@@ -46,7 +46,7 @@ extension HMAccessoryBrowser {
4646 @objc func pmk_startSearchingForNewAccessories( ) {
4747 after ( . milliseconds( 100 ) )
4848 . done { swag in
49- self . delegate! . accessoryBrowser ? ( self , didFindNewAccessory: MockAccessory ( ) )
49+ self . delegate? . accessoryBrowser ? ( self , didFindNewAccessory: MockAccessory ( ) )
5050 }
5151 }
5252}
@@ -81,4 +81,36 @@ func swizzle(_ foo: AnyClass, _ from: Selector, isClassMethod: Bool = false, bod
8181 method_exchangeImplementations ( swizzledMethod, originalMethod)
8282}
8383
84+ //////////////////////////////////////////////////////////// Cancellation
85+
86+ extension HMAccessoryBrowserTests {
87+
88+ func testCancelBrowserScanReturningFirst( ) {
89+ swizzle ( HMAccessoryBrowser . self, #selector( HMAccessoryBrowser . startSearchingForNewAccessories) ) {
90+ let ex = expectation ( description: " " )
91+
92+ cancellable ( HMPromiseAccessoryBrowser ( ) . start ( scanInterval: . returnFirst( timeout: 0.5 ) ) )
93+ . done { accessories in
94+ XCTAssertEqual ( accessories. count, 1 )
95+ XCTFail ( )
96+ } . catch ( policy: . allErrors) {
97+ $0. isCancelled ? ex. fulfill ( ) : XCTFail ( )
98+ } . cancel ( )
99+
100+ waitForExpectations ( timeout: 1 , handler: nil )
101+ }
102+ }
103+
104+ func testCancelBrowserScanReturningTimeout( ) {
105+ let ex = expectation ( description: " " )
106+
107+ cancellable ( HMPromiseAccessoryBrowser ( ) . start ( scanInterval: . returnFirst( timeout: 0.5 ) ) )
108+ . catch ( policy: . allErrors) {
109+ $0. isCancelled ? ex. fulfill ( ) : XCTFail ( )
110+ } . cancel ( )
111+
112+ waitForExpectations ( timeout: 1 , handler: nil )
113+ }
114+ }
115+
84116#endif
0 commit comments