| // 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 NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT |
| #if canImport(SwiftFoundation) && !DEPLOYMENT_RUNTIME_OBJC |
| @testable import SwiftFoundation |
| #else |
| @testable import Foundation |
| #endif |
| #endif |
| |
| class SwiftClass { |
| class InnerClass {} |
| } |
| |
| |
| |
| struct SwiftStruct {} |
| |
| enum SwiftEnum {} |
| |
| class TestObjCRuntime: XCTestCase { |
| static var allTests: [(String, (TestObjCRuntime) -> () throws -> Void)] { |
| var tests: [(String, (TestObjCRuntime) -> () throws -> Void)] = [ |
| ("testStringFromClass", testStringFromClass), |
| ("testClassFromString", testClassFromString), |
| ] |
| |
| #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT |
| tests.append(("testClassesRenamedByAPINotes", testClassesRenamedByAPINotes)) |
| #endif |
| |
| return tests |
| } |
| |
| func testStringFromClass() { |
| let name = testBundleName() |
| XCTAssertEqual(NSStringFromClass(NSObject.self), "NSObject") |
| XCTAssertEqual(NSStringFromClass(SwiftClass.self), "\(name).SwiftClass") |
| #if canImport(SwiftXCTest) && !DEPLOYMENT_RUNTIME_OBJC |
| XCTAssertEqual(NSStringFromClass(XCTestCase.self), "SwiftXCTest.XCTestCase"); |
| #else |
| XCTAssertEqual(NSStringFromClass(XCTestCase.self), "XCTest.XCTestCase"); |
| #endif |
| } |
| |
| func testClassFromString() { |
| let name = testBundleName() |
| XCTAssertNotNil(NSClassFromString("NSObject")) |
| XCTAssertNotNil(NSClassFromString("\(name).SwiftClass")) |
| XCTAssertNil(NSClassFromString("\(name).SwiftClass.InnerClass")) |
| XCTAssertNil(NSClassFromString("SwiftClass")) |
| XCTAssertNil(NSClassFromString("MadeUpClassName")) |
| XCTAssertNil(NSClassFromString("SwiftStruct")); |
| XCTAssertNil(NSClassFromString("SwiftEnum")); |
| } |
| |
| #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT |
| func testClassesRenamedByAPINotes() throws { |
| for entry in _NSClassesRenamedByObjCAPINotes { |
| XCTAssert(NSClassFromString(NSStringFromClass(entry.class)) === entry.class) |
| XCTAssert(NSStringFromClass(try XCTUnwrap(NSClassFromString(entry.objCName))) == entry.objCName) |
| } |
| } |
| #endif |
| } |