| // RUN: %swift -typecheck -verify -parse-stdlib -target i386-apple-tvos9.0 %s |
| |
| @available(tvOS, introduced: 1.0, deprecated: 2.0, obsoleted: 9.0, |
| message: "you don't want to do that anyway") |
| func doSomething() { } |
| // expected-note @-1{{'doSomething()' was obsoleted in tvOS 9.0}} |
| |
| doSomething() // expected-error{{'doSomething()' is unavailable: you don't want to do that anyway}} |
| |
| // Preservation of major.minor.micro |
| @available(tvOS, introduced: 1.0, deprecated: 2.0, obsoleted: 8.0) |
| func doSomethingElse() { } |
| // expected-note @-1{{'doSomethingElse()' was obsoleted in tvOS 8.0}} |
| |
| doSomethingElse() // expected-error{{'doSomethingElse()' is unavailable}} |
| |
| // Preservation of minor-only version |
| @available(tvOS, introduced: 1.0, deprecated: 1.5, obsoleted: 9) |
| func doSomethingReallyOld() { } |
| // expected-note @-1{{'doSomethingReallyOld()' was obsoleted in tvOS 9}} |
| |
| doSomethingReallyOld() // expected-error{{'doSomethingReallyOld()' is unavailable}} |
| |
| // Test deprecations in 9.0 and later |
| |
| @available(tvOS, introduced: 1.1, deprecated: 9.0, |
| message: "Use another function") |
| func deprecatedFunctionWithMessage() { } |
| |
| deprecatedFunctionWithMessage() // expected-warning{{'deprecatedFunctionWithMessage()' was deprecated in tvOS 9.0: Use another function}} |
| |
| |
| @available(tvOS, introduced: 1.0, deprecated: 9.0) |
| func deprecatedFunctionWithoutMessage() { } |
| |
| deprecatedFunctionWithoutMessage() // expected-warning{{'deprecatedFunctionWithoutMessage()' was deprecated in tvOS 9.0}} |
| |
| @available(tvOS, introduced: 1.0, deprecated: 9.0, |
| message: "Use BetterClass instead") |
| class DeprecatedClass { } |
| |
| func functionWithDeprecatedParameter(p: DeprecatedClass) { } // expected-warning{{'DeprecatedClass' was deprecated in tvOS 9.0: Use BetterClass instead}} |
| |
| @available(tvOS, introduced: 7.0, deprecated: 10.0, |
| message: "Use BetterClass instead") |
| class DeprecatedClassIn8_0 { } |
| |
| // Elements deprecated later than the minimum deployment target (which is 9.0, in this case) should not generate warnings |
| func functionWithDeprecatedLaterParameter(p: DeprecatedClassIn8_0) { } |
| |
| // Treat tvOS as distinct from iOS in availability queries |
| |
| @available(tvOS, introduced: 9.2) |
| func functionIntroducedOntvOS9_2() { } |
| |
| if #available(iOS 9.3, *) { |
| functionIntroducedOntvOS9_2() // expected-error {{'functionIntroducedOntvOS9_2()' is only available on tvOS 9.2 or newer}} |
| // expected-note@-1 {{add 'if #available' version check}} |
| } |
| |
| if #available(iOS 9.3, tvOS 9.1, *) { |
| functionIntroducedOntvOS9_2() // expected-error {{'functionIntroducedOntvOS9_2()' is only available on tvOS 9.2 or newer}} {{29-32=9.2}} |
| } |
| |
| if #available(iOS 9.1, tvOS 9.2, *) { |
| functionIntroducedOntvOS9_2() |
| } |
| |
| if #available(iOS 8.0, tvOS 9.2, *) { |
| } |
| |
| if #available(iOS 9.2, tvOS 8.0, *) { // no-warning |
| } |
| |
| |
| // Swift-originated iOS availability attributes should not be transcribed to tvOS |
| |
| @available(iOS, unavailable) |
| func swiftOriginatedFunctionUnavailableOnIOS() { } |
| |
| @available(iOS, introduced: 6.0, deprecated: 9.0) |
| func swiftOriginatedFunctionDeprecatedOnIOS() { } |
| |
| @available(iOS, introduced: 10.0) |
| func swiftOriginatedFunctionPotentiallyUnavailableOnIOS() { } |
| |
| func useSwiftOriginatedFunctions() { |
| // We do not expect diagnostics here because iOS availability attributes coming from |
| // Swift should not be transcribed to tvOS. |
| swiftOriginatedFunctionUnavailableOnIOS() |
| swiftOriginatedFunctionDeprecatedOnIOS() |
| swiftOriginatedFunctionPotentiallyUnavailableOnIOS() |
| } |