Browse Source

Merge pull request #211 from rohan-panchal/dev

Added identifier field to ConstraintDescription
Robert Payne 9 years ago
parent
commit
1ca48df9b1
3 changed files with 28 additions and 2 deletions
  1. 5 1
      Source/Constraint.swift
  2. 10 1
      Source/ConstraintDescription.swift
  3. 13 0
      Tests/Tests.swift

+ 5 - 1
Source/Constraint.swift

@@ -193,15 +193,18 @@ internal class ConcreteConstraint: Constraint {
         }
     }
     
+    private let label: String?
+    
     private var installInfo: ConcreteConstraintInstallInfo? = nil
     
-    internal init(fromItem: ConstraintItem, toItem: ConstraintItem, relation: ConstraintRelation, constant: Any, multiplier: Float, priority: Float) {
+    internal init(fromItem: ConstraintItem, toItem: ConstraintItem, relation: ConstraintRelation, constant: Any, multiplier: Float, priority: Float, label: String? = nil) {
         self.fromItem = fromItem
         self.toItem = toItem
         self.relation = relation
         self.constant = constant
         self.multiplier = multiplier
         self.priority = priority
+        self.label = label
     }
     
     internal func installOnView(updateExisting updateExisting: Bool = false, file: String? = nil, line: UInt? = nil) -> [LayoutConstraint] {
@@ -269,6 +272,7 @@ internal class ConcreteConstraint: Constraint {
                 attribute: layoutToAttribute,
                 multiplier: CGFloat(self.multiplier),
                 constant: layoutConstant)
+            layoutConstraint.identifier = self.label
             
             // set priority
             layoutConstraint.priority = self.priority

+ 10 - 1
Source/ConstraintDescription.swift

@@ -34,6 +34,8 @@ public protocol ConstraintDescriptionFinalizable: class {
     
     var constraint: Constraint { get }
     
+    func labeled(label: String) -> ConstraintDescriptionFinalizable
+    
 }
 
 /**
@@ -191,6 +193,7 @@ internal class ConstraintDescription: ConstraintDescriptionExtendable, Constrain
     internal var centerX: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterX) }
     internal var centerY: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterY) }
     internal var baseline: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Baseline) }
+    internal var label: String?
     
     @available(iOS 8.0, *)
     internal var firstBaseline: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.FirstBaseline) }
@@ -487,11 +490,17 @@ internal class ConstraintDescription: ConstraintDescriptionExtendable, Constrain
                 relation: self.relation!,
                 constant: self.constant,
                 multiplier: self.multiplier,
-                priority: self.priority)
+                priority: self.priority,
+                label: self.label)
         }
         return self.concreteConstraint!
     }
     
+    func labeled(label: String) -> ConstraintDescriptionFinalizable {
+        self.label = label
+        return self
+    }
+    
     // MARK: Private
     
     private let fromItem: ConstraintItem

+ 13 - 0
Tests/Tests.swift

@@ -249,4 +249,17 @@ class SnapKitTests: XCTestCase {
         XCTAssertEqual(constraints[1].constant, 50, "Should be 50")
     }
     
+    func testConstraintIdentifier() {
+        let identifier = "Test-Identifier"
+        let view = View()
+        self.container.addSubview(view)
+        
+        view.snp_makeConstraints { (make) -> Void in
+            make.top.equalTo(self.container.snp_top).labeled(identifier)
+        }
+        
+        let constraints = container.snp_constraints as! [NSLayoutConstraint]
+        XCTAssertEqual(constraints[0].identifier, identifier, "Identifier should be 'Test'")
+    }
+    
 }