Files
swift-mirror/test/Sema/availability.swift
Dmitri Hrybenko 3b04d1b013 tests: reorganize tests so that they actually use the target platform
Most tests were using %swift or similar substitutions, which did not
include the target triple and SDK.  The driver was defaulting to the
host OS.  Thus, we could not run the tests when the standard library was
not built for OS X.

Swift SVN r24504
2015-01-19 06:52:49 +00:00

94 lines
3.2 KiB
Swift

// RUN: %target-parse-verify-swift
// REQUIRES: OS=macosx
@availability(*, unavailable)
func unavailable_foo() {} // expected-note {{'unavailable_foo()' has been explicitly marked unavailable here}}
func test() {
unavailable_foo() // expected-error {{'unavailable_foo()' is unavailable}}
}
@availability(*,unavailable,message="use 'Int' instead")
struct NSUInteger {} // expected-note 2 {{explicitly marked unavailable here}}
func foo(x : NSUInteger) { // expected-error {{'NSUInteger' is unavailable: use 'Int' instead}}
let y : NSUInteger = 42 // expected-error {{'NSUInteger' is unavailable: use 'Int' instead}}
}
// Test preventing overrides of unavailable methods.
class ClassWithUnavailable {
@availability(*, unavailable)
func doNotOverride() {}
// FIXME: extraneous diagnostic here
@availability(*, unavailable)
init(int _: Int) {} // expected-note 2 {{'init(int:)' has been explicitly marked unavailable here}}
convenience init(otherInt: Int) {
self.init(int: otherInt) // expected-error {{'init(int:)' is unavailable}}
}
@availability(*, unavailable)
subscript (i: Int) -> Int { // expected-note{{'subscript' has been explicitly marked unavailable here}}
return i
}
}
class ClassWithOverride : ClassWithUnavailable {
override func doNotOverride() {} // expected-error {{cannot override 'doNotOverride' which has been marked unavailable}}
}
func testInit() {
ClassWithUnavailable(int: 0) // expected-error {{'init(int:)' is unavailable}}
}
func testSuvscript(cwu: ClassWithUnavailable) {
let x = cwu[5] // expected-error{{'subscript' is unavailable}}
}
/* FIXME 'nil == a' fails to type-check with a bogus error message
* <rdar://problem/17540796>
func testString() {
let a : String = "Hey"
if a == nil {
println("nil")
} else if nil == a {
println("nil")
}
else {
println("not nil")
}
}
*/
@availability(OSX, unavailable)
let unavailableOnOSX: Int = 0 // expected-note{{explicitly marked unavailable here}}
@availability(iOS, unavailable)
let unavailableOniOS: Int = 0
@availability(iOS, unavailable) @availability(OSX, unavailable)
let unavailableOnBothA: Int = 0 // expected-note{{explicitly marked unavailable here}}
@availability(OSX, unavailable)
let unavailableOnBothB: Int = 0 // expected-note{{explicitly marked unavailable here}}
@availability(OSX, unavailable)
typealias UnavailableOnOSX = Int // expected-note{{explicitly marked unavailable here}}
@availability(iOS, unavailable)
typealias UnavailableOniOS = Int
@availability(iOS, unavailable) @availability(OSX, unavailable)
typealias UnavailableOnBothA = Int // expected-note{{explicitly marked unavailable here}}
@availability(OSX, unavailable) @availability(iOS, unavailable)
typealias UnavailableOnBothB = Int // expected-note{{explicitly marked unavailable here}}
func testPlatforms() {
_ = unavailableOnOSX // expected-error{{unavailable}}
_ = unavailableOniOS
_ = unavailableOnBothA // expected-error{{unavailable}}
_ = unavailableOnBothB // expected-error{{unavailable}}
let _: UnavailableOnOSX = 0 // expected-error{{unavailable}}
let _: UnavailableOniOS = 0
let _: UnavailableOnBothA = 0 // expected-error{{unavailable}}
let _: UnavailableOnBothB = 0 // expected-error{{unavailable}}
}