From 2ea5b73bd092a94447ec5e16251438c3e7df6903 Mon Sep 17 00:00:00 2001 From: mrahmiao Date: Fri, 1 Jan 2016 17:51:02 +0800 Subject: [PATCH] Adds `rx_enabled` to `NSControl`. --- RxCocoa/OSX/NSControl+Rx.swift | 20 +++++++++++++- Tests/RxCocoaTests/NSControl+RxTests.swift | 32 ++++++++++++++++++++++ Tests/Tests.xcodeproj/project.pbxproj | 4 +++ 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 Tests/RxCocoaTests/NSControl+RxTests.swift diff --git a/RxCocoa/OSX/NSControl+Rx.swift b/RxCocoa/OSX/NSControl+Rx.swift index 9aabdae2..d728e847 100644 --- a/RxCocoa/OSX/NSControl+Rx.swift +++ b/RxCocoa/OSX/NSControl+Rx.swift @@ -93,5 +93,23 @@ extension NSControl { } }) } - + + /** + Bindable sink for `enabled` property. + */ + public var rx_enabled: AnyObserver { + return AnyObserver { [weak self] event in + MainScheduler.ensureExecutingOnScheduler() + + switch event { + case .Next(let value): + self?.enabled = value + case .Error(let error): + bindingErrorToInterface(error) + break + case .Completed: + break + } + } + } } \ No newline at end of file diff --git a/Tests/RxCocoaTests/NSControl+RxTests.swift b/Tests/RxCocoaTests/NSControl+RxTests.swift new file mode 100644 index 00000000..2c91749a --- /dev/null +++ b/Tests/RxCocoaTests/NSControl+RxTests.swift @@ -0,0 +1,32 @@ +// +// NSControl+RxTests.swift +// Tests +// +// Created by mrahmiao on 1/1/16. +// +// + +import Foundation +import RxSwift +import RxCocoa +import Cocoa +import XCTest + +class NSControlTests : RxTest { +} + +extension NSControlTests { + func testEnabled_False() { + let subject = NSButton(frame: CGRectMake(0, 0, 1, 1)) + just(false).subscribe(subject.rx_enabled).dispose() + + XCTAssertTrue(subject.enabled == false) + } + + func testEnabled_True() { + let subject = NSButton(frame: CGRectMake(0, 0, 1, 1)) + just(true).subscribe(subject.rx_enabled).dispose() + + XCTAssertFalse(subject.enabled == true) + } +} \ No newline at end of file diff --git a/Tests/Tests.xcodeproj/project.pbxproj b/Tests/Tests.xcodeproj/project.pbxproj index 23e4bdb3..bdac51a9 100644 --- a/Tests/Tests.xcodeproj/project.pbxproj +++ b/Tests/Tests.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 4F0B0B231C36810E00BD0534 /* NSControl+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F0B0B221C36810E00BD0534 /* NSControl+RxTests.swift */; }; 5E5D10BB1B48355200432B25 /* Control+RxTests+UIKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E5D10BA1B48355200432B25 /* Control+RxTests+UIKit.swift */; }; C69B65001BA88FAC00A7FA73 /* ObserverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69B64FF1BA88FAC00A7FA73 /* ObserverTests.swift */; }; C69B65011BA8957C00A7FA73 /* ObserverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69B64FF1BA88FAC00A7FA73 /* ObserverTests.swift */; }; @@ -212,6 +213,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 4F0B0B221C36810E00BD0534 /* NSControl+RxTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSControl+RxTests.swift"; sourceTree = ""; }; 5E5D10BA1B48355200432B25 /* Control+RxTests+UIKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "Control+RxTests+UIKit.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; C69B64FF1BA88FAC00A7FA73 /* ObserverTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObserverTests.swift; sourceTree = ""; }; C801EB591B97951100C4D8C4 /* Observable+CreationTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "Observable+CreationTest.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; @@ -417,6 +419,7 @@ C8BCD3F81C14B901005F1280 /* UIView+RxTests.swift */, C8BCD3FD1C14BCAD005F1280 /* NSLayoutConstraint+RxTests.swift */, C8CF47651C1DA04700C3FA6E /* CLLocationManager+RxTests.swift */, + 4F0B0B221C36810E00BD0534 /* NSControl+RxTests.swift */, ); path = RxCocoaTests; sourceTree = SOURCE_ROOT; @@ -765,6 +768,7 @@ C8BCD3FC1C14B914005F1280 /* NSView+RxTests.swift in Sources */, C897EC3C1B10E000009C2CB0 /* BehaviorSubjectTest.swift in Sources */, C88BB8A51B07E64B0064D411 /* QueueTests.swift in Sources */, + 4F0B0B231C36810E00BD0534 /* NSControl+RxTests.swift in Sources */, C8E3812C1B2083C2008CDC33 /* PrimitiveMockObserver.swift in Sources */, C88BB8A61B07E64B0064D411 /* Observable+SingleTest.swift in Sources */, C897EC4B1B1123DA009C2CB0 /* Observable+MultipleTest+Zip.swift in Sources */,