| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See http://swift.org/LICENSE.txt for license information |
| // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| // |
| |
| |
| #if DEPLOYMENT_RUNTIME_OBJC || os(Linux) |
| import Foundation |
| import XCTest |
| #else |
| import SwiftFoundation |
| import SwiftXCTest |
| #endif |
| |
| |
| class TestNSNotificationCenter : XCTestCase { |
| static var allTests: [(String, (TestNSNotificationCenter) -> () throws -> Void)] { |
| return [ |
| ("test_defaultCenter", test_defaultCenter), |
| ("test_postNotification", test_postNotification), |
| ("test_postNotificationForObject", test_postNotificationForObject), |
| ("test_postMultipleNotifications", test_postMultipleNotifications), |
| ("test_addObserverForNilName", test_addObserverForNilName), |
| ("test_removeObserver", test_removeObserver), |
| ] |
| } |
| |
| func test_defaultCenter() { |
| let defaultCenter1 = NSNotificationCenter.defaultCenter() |
| XCTAssertNotNil(defaultCenter1) |
| let defaultCenter2 = NSNotificationCenter.defaultCenter() |
| XCTAssertEqual(defaultCenter1, defaultCenter2) |
| } |
| |
| func removeObserver(_ observer: NSObjectProtocol, notificationCenter: NSNotificationCenter) { |
| guard let observer = observer as? NSObject else { |
| return |
| } |
| |
| notificationCenter.removeObserver(observer) |
| } |
| |
| func test_postNotification() { |
| let notificationCenter = NSNotificationCenter() |
| let notificationName = "test_postNotification_name" |
| var flag = false |
| let dummyObject = NSObject() |
| let observer = notificationCenter.addObserverForName(notificationName, object: dummyObject, queue: nil) { notification in |
| XCTAssertEqual(notificationName, notification.name) |
| XCTAssertTrue(dummyObject === notification.object) |
| |
| flag = true |
| } |
| |
| notificationCenter.postNotificationName(notificationName, object: dummyObject) |
| XCTAssertTrue(flag) |
| |
| removeObserver(observer, notificationCenter: notificationCenter) |
| } |
| |
| func test_postNotificationForObject() { |
| let notificationCenter = NSNotificationCenter() |
| let notificationName = "test_postNotificationForObject_name" |
| var flag = true |
| let dummyObject = NSObject() |
| let dummyObject2 = NSObject() |
| let observer = notificationCenter.addObserverForName(notificationName, object: dummyObject, queue: nil) { notification in |
| flag = false |
| } |
| |
| notificationCenter.postNotificationName(notificationName, object: dummyObject2) |
| XCTAssertTrue(flag) |
| |
| removeObserver(observer, notificationCenter: notificationCenter) |
| } |
| |
| func test_postMultipleNotifications() { |
| let notificationCenter = NSNotificationCenter() |
| let notificationName = "test_postMultipleNotifications_name" |
| var flag1 = false |
| let observer1 = notificationCenter.addObserverForName(notificationName, object: nil, queue: nil) { _ in |
| flag1 = true |
| } |
| |
| var flag2 = true |
| let observer2 = notificationCenter.addObserverForName(notificationName, object: nil, queue: nil) { _ in |
| flag2 = false |
| } |
| |
| var flag3 = false |
| let observer3 = notificationCenter.addObserverForName(notificationName, object: nil, queue: nil) { _ in |
| flag3 = true |
| } |
| |
| removeObserver(observer2, notificationCenter: notificationCenter) |
| |
| notificationCenter.postNotificationName(notificationName, object: nil) |
| XCTAssertTrue(flag1) |
| XCTAssertTrue(flag2) |
| XCTAssertTrue(flag3) |
| |
| removeObserver(observer1, notificationCenter: notificationCenter) |
| removeObserver(observer3, notificationCenter: notificationCenter) |
| } |
| |
| func test_addObserverForNilName() { |
| let notificationCenter = NSNotificationCenter() |
| let notificationName = "test_addObserverForNilName_name" |
| let invalidNotificationName = "test_addObserverForNilName_name_invalid" |
| var flag1 = false |
| let observer1 = notificationCenter.addObserverForName(notificationName, object: nil, queue: nil) { _ in |
| flag1 = true |
| } |
| |
| var flag2 = true |
| let observer2 = notificationCenter.addObserverForName(invalidNotificationName, object: nil, queue: nil) { _ in |
| flag2 = false |
| } |
| |
| var flag3 = false |
| let observer3 = notificationCenter.addObserverForName(nil, object: nil, queue: nil) { _ in |
| flag3 = true |
| } |
| |
| notificationCenter.postNotificationName(notificationName, object: nil) |
| XCTAssertTrue(flag1) |
| XCTAssertTrue(flag2) |
| XCTAssertTrue(flag3) |
| |
| removeObserver(observer1, notificationCenter: notificationCenter) |
| removeObserver(observer2, notificationCenter: notificationCenter) |
| removeObserver(observer3, notificationCenter: notificationCenter) |
| } |
| |
| func test_removeObserver() { |
| let notificationCenter = NSNotificationCenter() |
| let notificationName = "test_removeObserver_name" |
| var flag = true |
| let observer = notificationCenter.addObserverForName(notificationName, object: nil, queue: nil) { _ in |
| flag = false |
| } |
| |
| removeObserver(observer, notificationCenter: notificationCenter) |
| |
| notificationCenter.postNotificationName(notificationName, object: nil) |
| XCTAssertTrue(flag) |
| } |
| |
| } |