blob: 76c9a8900ff4df1e8b5c60cf7855ef2781b779d9 [file] [log] [blame]
// RUN: %empty-directory(%t)
//
// RUN: cp %s %t/main.swift
// RUN: %target-clang %S/Inputs/OldABI/OldABI.mm -g -c -o %t/OldABI.o
// RUN: %target-build-swift %t/main.swift -framework Foundation -I %S/Inputs/OldABI/ -Xlinker %t/OldABI.o -o %t/objc_old_swift -Xfrontend -disable-access-control
// RUN: %target-codesign %t/objc_old_swift
// RUN: %target-run %t/objc_old_swift
// REQUIRES: executable_test
// REQUIRES: objc_interop
// Verify that objects that appear to be from the pre-stable Swift ABI
// are correctly ignored by stable Swift's entry points.
import Foundation
import OldABI
import StdlibUnittest
var tests = TestSuite("objc_old_swift")
tests.test("description")
.skip(.custom({ !CanTestOldABI() },
reason: "not using stable ABI's is-Swift bit yet"))
.code {
let obj = AllocOldABIObject()
expectEqual(String(describing:obj), "OldABI.Subclass")
expectEqual((obj as AnyObject).description!, "FakeSwiftObject instance")
}
tests.test("casts")
.skip(.custom({ !CanTestOldABI() },
reason: "not using stable ABI's is-Swift bit yet"))
.code {
let obj = AllocOldABIObject()
expectNil(obj as? String)
expectNotNil(obj as Any)
expectNotNil(obj as AnyObject)
}
tests.test("array")
.skip(.custom({ !CanTestOldABI() },
reason: "not using stable ABI's is-Swift bit yet"))
.code {
let array = Array(repeating: AllocOldABIObject(), count:5)
expectEqual(String(describing: array), "[OldABI.Subclass, OldABI.Subclass, OldABI.Subclass, OldABI.Subclass, OldABI.Subclass]")
var array2 = Array(repeating: AllocOldABIObject(), count:0)
for i in 0..<array.count {
expectNotNil(array[i])
array2.append(i as NSNumber)
array2.append(array[i]);
}
expectEqual(String(describing: array2), "[0, OldABI.Subclass, 1, OldABI.Subclass, 2, OldABI.Subclass, 3, OldABI.Subclass, 4, OldABI.Subclass]")
// Bridge an array of pre-stable objects to NSArray
let nsarray = NSMutableArray(array: array2)
expectEqual(nsarray.description, #"""
(
0,
"FakeSwiftObject instance",
1,
"FakeSwiftObject instance",
2,
"FakeSwiftObject instance",
3,
"FakeSwiftObject instance",
4,
"FakeSwiftObject instance"
)
"""#)
nsarray.add(5 as NSNumber)
// Bridge back from NSArray
let array3 = nsarray as [AnyObject]
expectEqual(String(describing: array3), "[0, OldABI.Subclass, 1, OldABI.Subclass, 2, OldABI.Subclass, 3, OldABI.Subclass, 4, OldABI.Subclass, 5]")
}
// FIXME: add coverage of more Swift runtime entrypoints
runAllTests()