Files
swift-mirror/test/Interpreter/objc_protocols.swift
Rintaro Ishizaki 4de3d033dd [Tests] Disable a test case
Disable test/Interpreter/objc_protocols.swift while investigating

rdar://107343134
2023-03-29 13:53:19 -07:00

109 lines
3.2 KiB
Swift

// REQUIRES: rdar107343134
// RUN: %target-run-simple-swift
// REQUIRES: executable_test
// REQUIRES: objc_interop
import StdlibUnittest
import Foundation
@objc protocol Horse {
init()
}
class Pony : Horse {
let x = LifetimeTracked(0)
required init() {}
}
var ObjCProtocolsTest = TestSuite("ObjCProtocols")
ObjCProtocolsTest.test("InitRequirement") {
let t: Horse.Type = Pony.self
_ = t.init()
}
@objc protocol OptionalRequirements {
@objc optional func returnNumber(n: Int) -> Int
@objc optional static func returnNumberStatic(n: Int) -> Int
@objc optional func returnSelf() -> Self
}
ObjCProtocolsTest.test("OptionalMethodReferenceTypes") {
class Base {}
class Derived: Base, OptionalRequirements {}
let exist: OptionalRequirements = Derived()
let existComposition: Base & OptionalRequirements = Derived()
let existMeta: OptionalRequirements.Type = Derived.self
expectEqual(type(of: exist.returnNumber),
((Int) -> Int)?.self)
expectEqual(type(of: existMeta.returnNumberStatic),
((Int) -> Int)?.self)
expectEqual(type(of: OptionalRequirements.returnNumber),
((OptionalRequirements) -> ((Int) -> Int)?).self)
expectEqual(type(of: (Base & OptionalRequirements).returnNumber),
((Base & OptionalRequirements) -> ((Int) -> Int)?).self)
expectEqual(type(of: exist.returnSelf),
(() -> OptionalRequirements)?.self)
expectEqual(type(of: existComposition.returnSelf),
(() -> Base & OptionalRequirements)?.self)
expectEqual(type(of: OptionalRequirements.returnSelf),
((OptionalRequirements) -> (() -> OptionalRequirements)?).self)
expectEqual(type(of: (Base & OptionalRequirements).returnSelf),
((Base & OptionalRequirements) -> (() -> Base & OptionalRequirements)?).self)
}
ObjCProtocolsTest.test("OptionalMethodReferencesNoImplementation") {
class Class: OptionalRequirements {}
let exist: OptionalRequirements = Class()
let existMeta: OptionalRequirements.Type = Class.self
expectNil(exist.returnNumber)
expectNil(existMeta.returnNumberStatic)
expectNil(OptionalRequirements.returnNumber(exist))
expectNil(exist.returnSelf)
expectNil(OptionalRequirements.returnSelf(exist))
}
ObjCProtocolsTest.test("OptionalMethodReferencesWithImplementation") {
class Class: OptionalRequirements {
func returnSelf() -> Self {
return self
}
func returnNumber(n: Int) -> Int {
return n
}
static func returnNumberStatic(n: Int) -> Int {
return n
}
}
let exist: OptionalRequirements = Class()
let existMeta: OptionalRequirements.Type = Class.self
let returnNumberRef = exist.returnNumber
let returnNumberStaticRef = existMeta.returnNumberStatic
let returnNumberUnboundRef = OptionalRequirements.returnNumber
expectEqual(returnNumberRef!(123), 123)
expectEqual(returnNumberStaticRef!(456), 456)
expectEqual(returnNumberUnboundRef(exist)!(789), 789)
let returnSelfRef = exist.returnSelf
let returnSelfUnboundRef = OptionalRequirements.returnSelf
expectEqual(returnSelfRef!().returnNumber!(n: 321), 321)
expectEqual(returnSelfUnboundRef(exist)!().returnNumber!(n: 456), 456)
}
runAllTests()