From 288794bdaa3a1d6aceb3bcb0aa35abeaf12d7909 Mon Sep 17 00:00:00 2001
From: Rafael Aroxa <rafael.aroxa@prconcepts.com>
Date: Mon, 10 Oct 2016 12:35:15 -0500
Subject: [PATCH] Add `rex_title` to `UIBarItem`

---
 Rex.xcodeproj/project.pbxproj       |  6 +++++
 Source/UIKit/UIBarItem.swift        |  6 +++++
 Tests/UIKit/UITabBarItemTests.swift | 41 +++++++++++++++++++++++++++++
 3 files changed, 53 insertions(+)
 create mode 100644 Tests/UIKit/UITabBarItemTests.swift

diff --git a/Rex.xcodeproj/project.pbxproj b/Rex.xcodeproj/project.pbxproj
index ed0a7f5..8420ea6 100644
--- a/Rex.xcodeproj/project.pbxproj
+++ b/Rex.xcodeproj/project.pbxproj
@@ -7,6 +7,8 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		18C2BE961DABF2F4003C7ED0 /* UITabBarItemTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C2BE941DABD144003C7ED0 /* UITabBarItemTests.swift */; };
+		18C2BE971DABF2F4003C7ED0 /* UITabBarItemTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C2BE941DABD144003C7ED0 /* UITabBarItemTests.swift */; };
 		4238D5961B4D5950008534C0 /* NSTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4238D5951B4D5950008534C0 /* NSTextField.swift */; };
 		45CED46F1D27C1E300788BDC /* UIActivityIndicatorViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45CED46D1D27C1D400788BDC /* UIActivityIndicatorViewTests.swift */; };
 		45CED4701D27C1E400788BDC /* UIActivityIndicatorViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45CED46D1D27C1D400788BDC /* UIActivityIndicatorViewTests.swift */; };
@@ -209,6 +211,7 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
+		18C2BE941DABD144003C7ED0 /* UITabBarItemTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITabBarItemTests.swift; sourceTree = "<group>"; };
 		4238D5951B4D5950008534C0 /* NSTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = NSTextField.swift; path = AppKit/NSTextField.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
 		45CED46B1D27BB8700788BDC /* UIActivityIndicatorView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIActivityIndicatorView.swift; sourceTree = "<group>"; };
 		45CED46D1D27C1D400788BDC /* UIActivityIndicatorViewTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIActivityIndicatorViewTests.swift; sourceTree = "<group>"; };
@@ -507,6 +510,7 @@
 			children = (
 				45CED46D1D27C1D400788BDC /* UIActivityIndicatorViewTests.swift */,
 				8295FD8B1B873748007C9000 /* UIBarButtonItemTests.swift */,
+				18C2BE941DABD144003C7ED0 /* UITabBarItemTests.swift */,
 				8295FD881B873490007C9000 /* UIButtonTests.swift */,
 				8295FD851B873081007C9000 /* UIControlTests.swift */,
 				7DCF5B351CC80E8E004AEE75 /* UICollectionReusableViewTests.swift */,
@@ -916,6 +920,7 @@
 				D83457301AFEE45E0070616A /* SignalProducerTests.swift in Sources */,
 				D83457411AFEE6050070616A /* SignalTests.swift in Sources */,
 				8295FD8D1B87374A007C9000 /* UIBarButtonItemTests.swift in Sources */,
+				18C2BE961DABF2F4003C7ED0 /* UITabBarItemTests.swift in Sources */,
 				8295FD871B87309F007C9000 /* UIControlTests.swift in Sources */,
 				C7DCE2B71CB3C9D6001217D8 /* UITextViewTests.swift in Sources */,
 				5B7F81E41D0842B50014B06D /* UISegmentedControlTests.swift in Sources */,
@@ -980,6 +985,7 @@
 				7D5FE3081CD4B04E00834675 /* UITextFieldTests.swift in Sources */,
 				D8715DE21C211643005F4191 /* UIControlTests.swift in Sources */,
 				CC02C18C1CCA704F0025CC04 /* ActionTests.swift in Sources */,
+				18C2BE971DABF2F4003C7ED0 /* UITabBarItemTests.swift in Sources */,
 				D8715DDF1C21163B005F4191 /* NSObjectTests.swift in Sources */,
 				7DC3257E1CC6FD1C00746D88 /* UITableViewCellTests.swift in Sources */,
 				D8715DDC1C211637005F4191 /* PropertyTests.swift in Sources */,
diff --git a/Source/UIKit/UIBarItem.swift b/Source/UIKit/UIBarItem.swift
index 999bd94..49e1160 100644
--- a/Source/UIKit/UIBarItem.swift
+++ b/Source/UIKit/UIBarItem.swift
@@ -14,6 +14,12 @@ extension UIBarItem {
     public var rex_enabled: MutableProperty<Bool> {
         return associatedProperty(self, key: &enabledKey, initial: { $0.enabled }, setter: { $0.enabled = $1 })
     }
+    
+    /// Wraps a UIBarItem's `title` value in a bindable property.
+    public var rex_title: MutableProperty<String?> {
+        return associatedProperty(self, key: &titleKey, initial: { $0.title }, setter: { $0.title = $1 })
+    }
 }
 
 private var enabledKey: UInt8 = 0
+private var titleKey: UInt8 = 0
diff --git a/Tests/UIKit/UITabBarItemTests.swift b/Tests/UIKit/UITabBarItemTests.swift
new file mode 100644
index 0000000..29d35b6
--- /dev/null
+++ b/Tests/UIKit/UITabBarItemTests.swift
@@ -0,0 +1,41 @@
+//
+//  UITabBarItemTests.swift
+//  Rex
+//
+//  Created by Rafael Aroxa on 10/10/16.
+//  Copyright (c) 2015 Neil Pankey. All rights reserved.
+//
+
+import ReactiveCocoa
+import UIKit
+import XCTest
+import enum Result.NoError
+
+class UITabBarItemTests: XCTestCase {
+    
+    func testEnabledProperty() {
+        let tabBarItem = UITabBarItem()
+        tabBarItem.enabled = true
+        
+        let (signal, observer) = Signal<Bool, NoError>.pipe()
+        tabBarItem.rex_enabled <~ SignalProducer(signal: signal)
+        
+        observer.sendNext(false)
+        XCTAssertFalse(tabBarItem.enabled)
+        observer.sendNext(true)
+        XCTAssertTrue(tabBarItem.enabled)
+    }
+    
+    func testTitleProperty() {
+        let tabBarItem = UITabBarItem()
+        tabBarItem.title = nil
+        
+        let (signal, observer) = Signal<String?, NoError>.pipe()
+        tabBarItem.rex_title <~ SignalProducer(signal: signal)
+        
+        observer.sendNext("My Title")
+        XCTAssertEqual(tabBarItem.title, "My Title")
+        observer.sendNext(nil)
+        XCTAssertNil(tabBarItem.title)
+    }
+}