mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
136 lines
3.8 KiB
Swift
136 lines
3.8 KiB
Swift
// RUN: %target-run-simple-swift | FileCheck %s
|
|
|
|
import Foundation
|
|
|
|
@objc @class_protocol protocol SwiftObjCProto {}
|
|
|
|
class SwiftSuperPort : NSPort { }
|
|
|
|
class SwiftSubPort : SwiftSuperPort { }
|
|
|
|
class SwiftSuper { }
|
|
class SwiftSub : SwiftSuper { }
|
|
|
|
extension NSPort : SwiftObjCProto {}
|
|
|
|
var obj : AnyObject
|
|
|
|
func genericCast<T>(x: AnyObject, _: T.Type) -> T? {
|
|
return x as T
|
|
}
|
|
|
|
// Test instance of Swift subclass of Objective-C class
|
|
|
|
obj = SwiftSubPort()
|
|
_ = (obj as SwiftSubPort)!
|
|
_ = (obj as SwiftSuperPort)!
|
|
_ = (obj as NSPort)
|
|
_ = (obj as NSObject)!
|
|
if !(obj as SwiftSubPort) { abort() }
|
|
if !(obj as SwiftSuperPort) { abort() }
|
|
if !(obj as NSPort) { abort() }
|
|
if !(obj as NSObject) { abort() }
|
|
if (obj as NSArray) { abort() }
|
|
if (obj as SwiftSub) { abort() }
|
|
if (obj as SwiftSuper) { abort() }
|
|
|
|
obj = SwiftSuperPort()
|
|
_ = (obj as SwiftSuperPort)!
|
|
_ = (obj as NSPort)!
|
|
_ = (obj as NSObject)!
|
|
if (obj as SwiftSubPort) { abort() }
|
|
if !(obj as SwiftSuperPort) { abort() }
|
|
if !(obj as NSPort) { abort() }
|
|
if !(obj as NSObject) { abort() }
|
|
if (obj as NSArray) { abort() }
|
|
if (obj as SwiftSub) { abort() }
|
|
if (obj as SwiftSuper) { abort() }
|
|
|
|
// Test instance of Objective-C class that has Swift subclass
|
|
|
|
obj = NSPort()
|
|
_ = (obj as NSPort)!
|
|
_ = (obj as NSObject)!
|
|
if (obj as SwiftSubPort) { abort() }
|
|
if (obj as SwiftSuperPort) { abort() }
|
|
if !(obj as NSPort) { abort() }
|
|
if !(obj as NSObject) { abort() }
|
|
if (obj as NSArray) { abort() }
|
|
if (obj as SwiftSub) { abort() }
|
|
if (obj as SwiftSuper) { abort() }
|
|
if !(obj as SwiftObjCProto) { abort() }
|
|
|
|
obj = NSPort()
|
|
_ = genericCast(obj, NSPort.self)!
|
|
_ = genericCast(obj, NSObject.self)!
|
|
if genericCast(obj, SwiftSubPort.self) { abort() }
|
|
if genericCast(obj, SwiftSuperPort.self) { abort() }
|
|
if !genericCast(obj, NSPort.self) { abort() }
|
|
if !genericCast(obj, NSObject.self) { abort() }
|
|
if genericCast(obj, NSArray.self) { abort() }
|
|
if genericCast(obj, SwiftSub.self) { abort() }
|
|
if genericCast(obj, SwiftSuper.self) { abort() }
|
|
|
|
obj = NSObject()
|
|
_ = (obj as NSObject)!
|
|
if (obj as SwiftSubPort) { abort() }
|
|
if (obj as SwiftSuperPort) { abort() }
|
|
if (obj as NSPort) { abort() }
|
|
if !(obj as NSObject) { abort() }
|
|
if (obj as NSCopying) { abort() }
|
|
if (obj as NSArray) { abort() }
|
|
if (obj as SwiftSub) { abort() }
|
|
if (obj as SwiftSuper) { abort() }
|
|
if (obj as SwiftObjCProto) { abort() }
|
|
|
|
// Test instance of a tagged pointer type
|
|
|
|
obj = NSNumber(int: 1234567)
|
|
_ = (obj as NSNumber)!
|
|
_ = (obj as NSValue)!
|
|
_ = (obj as NSObject)!
|
|
_ = (obj as NSCopying)!
|
|
if (obj as SwiftSubPort) { abort() }
|
|
if (obj as SwiftSuperPort) { abort() }
|
|
if !(obj as NSNumber) { abort() }
|
|
if !(obj as NSValue) { abort() }
|
|
if !(obj as NSObject) { abort() }
|
|
if !(obj as NSCopying) { abort() }
|
|
if (obj as NSArray) { abort() }
|
|
if (obj as SwiftSub) { abort() }
|
|
if (obj as SwiftSuper) { abort() }
|
|
|
|
// Test instance of a Swift class with no Objective-C inheritance
|
|
|
|
obj = SwiftSub()
|
|
_ = (obj as SwiftSub)!
|
|
_ = (obj as SwiftSuper)!
|
|
if (obj as SwiftSubPort) { abort() }
|
|
if (obj as SwiftSuperPort) { abort() }
|
|
if (obj as NSObject) { abort() }
|
|
if (obj as NSArray) { abort() }
|
|
if !(obj as SwiftSub) { abort() }
|
|
if !(obj as SwiftSuper) { abort() }
|
|
|
|
obj = SwiftSuper()
|
|
_ = (obj as SwiftSuper)!
|
|
if (obj as SwiftSubPort) { abort() }
|
|
if (obj as SwiftSuperPort) { abort() }
|
|
if (obj as NSObject) { abort() }
|
|
if (obj as NSArray) { abort() }
|
|
if (obj as SwiftSub) { abort() }
|
|
if !(obj as SwiftSuper) { abort() }
|
|
|
|
// Test optional and non-optional bridged conversions
|
|
var ao: AnyObject = "s"
|
|
ao as String
|
|
ao is String
|
|
|
|
var auo: AnyObject! = "s"
|
|
var s: String = auo!
|
|
|
|
var auoo: AnyObject? = "s"
|
|
auoo! as String
|
|
|
|
println("ok") // CHECK: ok
|