//===--- SwiftNativeNSBase.swift - Test _SwiftNativeNS*Base classes -------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// // RUN: %empty-directory(%t) // // RUN: %target-clang %S/Inputs/SwiftNativeNSBase/SwiftNativeNSBase.m -c -o %t/SwiftNativeNSBase.o -g // RUN: %target-clang -fobjc-arc %S/Inputs/SlurpFastEnumeration/SlurpFastEnumeration.m -c -o %t/SlurpFastEnumeration.o // RUN: echo '#sourceLocation(file: "%s", line: 1)' > "%t/main.swift" && cat "%s" >> "%t/main.swift" && chmod -w "%t/main.swift" // RUN: %target-build-swift -Xfrontend -disable-access-control %t/main.swift %S/Inputs/DictionaryKeyValueTypes.swift %S/Inputs/DictionaryKeyValueTypesObjC.swift -I %S/Inputs/SwiftNativeNSBase/ -I %S/Inputs/SlurpFastEnumeration/ -Xlinker %t/SlurpFastEnumeration.o -Xlinker %t/SwiftNativeNSBase.o -o %t/SwiftNativeNSBase // RUN: %target-run %t/SwiftNativeNSBase // REQUIRES: executable_test // REQUIRES: objc_interop import Foundation import StdlibUnittest @_silgen_name("TestSwiftNativeNSBase_UnwantedCdtors") func TestSwiftNativeNSBase_UnwantedCdtors() -> Bool @_silgen_name("TestSwiftNativeNSBase_RetainCount") func TestSwiftNativeNSBase_RetainCount(_: UnsafeMutableRawPointer) -> Bool func classChain(of cls: AnyClass) -> [String] { var chain: [String] = [] var cls: AnyClass? = cls while cls != nil { chain.append(NSStringFromClass(cls!)) cls = class_getSuperclass(cls) } return chain } var SwiftNativeNSBaseTestSuite = TestSuite("SwiftNativeNSBase") SwiftNativeNSBaseTestSuite.test("UnwantedCdtors") { expectTrue(TestSwiftNativeNSBase_UnwantedCdtors()) } SwiftNativeNSBaseTestSuite.test("_SwiftNativeNSArrayBase.retainCount") { let bridged = getBridgedNSArrayOfRefTypeVerbatimBridged() assert(classChain(of: type(of: bridged)).contains("_SwiftNativeNSArrayBase")) expectTrue(TestSwiftNativeNSBase_RetainCount( Unmanaged.passUnretained(bridged).toOpaque())) _fixLifetime(bridged) } SwiftNativeNSBaseTestSuite.test("_SwiftNativeNSDictionaryBase.retainCount") { let bridged = getBridgedNSDictionaryOfRefTypesBridgedVerbatim() assert(classChain(of: type(of: bridged)) .contains("_SwiftNativeNSDictionaryBase")) expectTrue(TestSwiftNativeNSBase_RetainCount( Unmanaged.passUnretained(bridged).toOpaque())) _fixLifetime(bridged) } SwiftNativeNSBaseTestSuite.test("_SwiftNativeNSSetBase.retainCount") { let bridged = Set([10, 20, 30].map{ TestObjCKeyTy($0) })._bridgeToObjectiveC() assert(classChain(of: type(of: bridged)).contains("_SwiftNativeNSSetBase")) expectTrue(TestSwiftNativeNSBase_RetainCount( Unmanaged.passUnretained(bridged).toOpaque())) _fixLifetime(bridged) } SwiftNativeNSBaseTestSuite.setUp { resetLeaksOfDictionaryKeysValues() resetLeaksOfObjCDictionaryKeysValues() } SwiftNativeNSBaseTestSuite.tearDown { expectNoLeaksOfDictionaryKeysValues() expectNoLeaksOfObjCDictionaryKeysValues() } runAllTests()