@@ -16,7 +16,7 @@ final class KeyboardFrameObserverTests: XCTestCase {
1616
1717 var actualFrames = [ CGRect] ( )
1818
19- var keyboardFrameObserver = KeyboardFrameObserver ( notificationCenter: notificationCenter) { ( keyboardFrame: CGRect ) in
19+ let keyboardFrameObserver = KeyboardFrameObserver ( notificationCenter: notificationCenter) { ( keyboardFrame: CGRect ) in
2020 actualFrames. append ( keyboardFrame)
2121 if actualFrames. count >= expectedFrames. count {
2222 XCTAssertEqual ( actualFrames, expectedFrames)
@@ -47,7 +47,7 @@ final class KeyboardFrameObserverTests: XCTestCase {
4747
4848 var actualFrames = [ CGRect] ( )
4949
50- var keyboardFrameObserver = KeyboardFrameObserver ( notificationCenter: notificationCenter) { ( keyboardFrame: CGRect ) in
50+ let keyboardFrameObserver = KeyboardFrameObserver ( notificationCenter: notificationCenter) { ( keyboardFrame: CGRect ) in
5151 actualFrames. append ( keyboardFrame)
5252 if actualFrames. count >= expectedFrames. count {
5353 XCTAssertEqual ( actualFrames, expectedFrames)
@@ -70,7 +70,7 @@ final class KeyboardFrameObserverTests: XCTestCase {
7070
7171 let expectationForKeyboardFrame = expectation ( description: " Wait for keyboard frame updates " )
7272
73- var keyboardFrameObserver = KeyboardFrameObserver ( notificationCenter: notificationCenter) { ( keyboardFrame: CGRect ) in
73+ let keyboardFrameObserver = KeyboardFrameObserver ( notificationCenter: notificationCenter) { ( keyboardFrame: CGRect ) in
7474 expectationForKeyboardFrame. fulfill ( )
7575 }
7676 keyboardFrameObserver. startObservingKeyboardFrame ( )
@@ -88,7 +88,7 @@ final class KeyboardFrameObserverTests: XCTestCase {
8888
8989 let expectationForKeyboardFrame = expectation ( description: " Wait for keyboard frame updates " )
9090
91- var keyboardFrameObserver = KeyboardFrameObserver ( notificationCenter: notificationCenter) { ( keyboardFrame: CGRect ) in
91+ let keyboardFrameObserver = KeyboardFrameObserver ( notificationCenter: notificationCenter) { ( keyboardFrame: CGRect ) in
9292 expectationForKeyboardFrame. fulfill ( )
9393 }
9494 keyboardFrameObserver. startObservingKeyboardFrame ( )
@@ -101,6 +101,31 @@ final class KeyboardFrameObserverTests: XCTestCase {
101101 waitForExpectations ( timeout: 0.1 )
102102 }
103103
104+ func testItWillNotEmitNewEventsWhenItIsDeallocated( ) {
105+ // Arrange
106+ let notificationCenter = NotificationCenter ( )
107+
108+ var eventsLogged = 0
109+ var keyboardFrameObserver : KeyboardFrameObserver ? = KeyboardFrameObserver ( notificationCenter: notificationCenter) { _ in
110+ eventsLogged += 1
111+ }
112+
113+ keyboardFrameObserver? . startObservingKeyboardFrame ( )
114+
115+ // These should be logged
116+ notificationCenter. postKeyboardWillShowNotification ( keyboardFrame: CGRect ( x: 1 , y: 1 , width: 1 , height: 1 ) )
117+ notificationCenter. postKeyboardWillShowNotification ( keyboardFrame: CGRect ( x: 2 , y: 2 , width: 2 , height: 2 ) )
118+
119+ // Act
120+ keyboardFrameObserver = nil
121+
122+ // This should not be logged anymore
123+ notificationCenter. postKeyboardWillShowNotification ( keyboardFrame: CGRect ( x: 3 , y: 3 , width: 3 , height: 3 ) )
124+
125+ // Assert
126+ XCTAssertEqual ( eventsLogged, 2 )
127+ }
128+
104129 func testItCanSendInitialEvents( ) {
105130 // Arrange
106131 let expectedKeyboardState = KeyboardState (
@@ -110,7 +135,7 @@ final class KeyboardFrameObserverTests: XCTestCase {
110135 let keyboardStateProvider = MockKeyboardStateProvider ( state: expectedKeyboardState)
111136
112137 var actualKeyboardFrame : CGRect = . zero
113- var keyboardFrameObserver = KeyboardFrameObserver ( keyboardStateProvider: keyboardStateProvider) { frame in
138+ let keyboardFrameObserver = KeyboardFrameObserver ( keyboardStateProvider: keyboardStateProvider) { frame in
114139 actualKeyboardFrame = frame
115140 }
116141
0 commit comments