|
| 1 | +// RUN: rm -rf %t |
| 2 | +// RUN: mkdir -p %t |
| 3 | +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-module -o %t %s -disable-objc-attr-requires-foundation-module |
| 4 | +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -parse-as-library %t/availability.swiftmodule -typecheck -emit-objc-header-path %t/availability.h -import-objc-header %S/../Inputs/empty.h -disable-objc-attr-requires-foundation-module |
| 5 | +// RUN: %FileCheck %s < %t/availability.h |
| 6 | +// RUN: %check-in-clang %t/availability.h |
| 7 | + |
| 8 | +// REQUIRES: objc_interop |
| 9 | + |
| 10 | +// CHECK-LABEL: @interface Availability{{$}} |
| 11 | +// CHECK-NEXT: - (void)alwaysAvailable; |
| 12 | +// CHECK-NEXT: - (void)alwaysUnavailable SWIFT_UNAVAILABLE; |
| 13 | +// CHECK-NEXT: - (void)alwaysUnavailableTwo SWIFT_UNAVAILABLE_MSG("stuff happened"); |
| 14 | +// CHECK-NEXT: - (void)alwaysUnavailableThree SWIFT_UNAVAILABLE_MSG("'alwaysUnavailableThree' has been renamed to 'bar'"); |
| 15 | +// CHECK-NEXT: - (void)alwaysUnavailableFour SWIFT_UNAVAILABLE_MSG("'alwaysUnavailableFour' has been renamed to 'baz': whatever"); |
| 16 | +// CHECK-NEXT: - (void)alwaysDeprecated SWIFT_DEPRECATED; |
| 17 | +// CHECK-NEXT: - (void)alwaysDeprecatedTwo SWIFT_DEPRECATED_MSG("it's old"); |
| 18 | +// CHECK-NEXT: - (void)alwaysDeprecatedThree SWIFT_DEPRECATED_MSG("", "qux"); |
| 19 | +// CHECK-NEXT: - (void)alwaysDeprecatedFour SWIFT_DEPRECATED_MSG("use something else", "quux"); |
| 20 | +// CHECK-NEXT: - (void)escapeMessage SWIFT_DEPRECATED_MSG("one\ntwo\tthree\x0Dfour\\ \"five\""); |
| 21 | +// CHECK-NEXT: - (void)unicodeMessage SWIFT_DEPRECATED_MSG("über"); |
| 22 | +// CHECK-NEXT: - (void)singlePlatShorthand SWIFT_AVAILABILITY(macos,introduced=10.10); |
| 23 | +// CHECK-NEXT: - (void)multiPlatShorthand |
| 24 | +// CHECK-DAG: SWIFT_AVAILABILITY(macos,introduced=10.11) |
| 25 | +// CHECK-DAG: SWIFT_AVAILABILITY(ios,introduced=9.0) |
| 26 | +// CHECK-DAG: SWIFT_AVAILABILITY(tvos,introduced=9.0) |
| 27 | +// CHECK-DAG: SWIFT_AVAILABILITY(watchos,introduced=3.0) |
| 28 | +// CHECK-NEXT: - (void)singlePlatIntroduced SWIFT_AVAILABILITY(ios,introduced=9.0); |
| 29 | +// CHECK-NEXT: - (void)singlePlatDeprecated SWIFT_AVAILABILITY(macos,deprecated=10.10); |
| 30 | +// CHECK-NEXT: - (void)singlePlatDeprecatedTwo SWIFT_AVAILABILITY(macos,deprecated=10.10,message="'singlePlatDeprecatedTwo' has been renamed to 'flubber'"); |
| 31 | +// CHECK-NEXT: - (void)singlePlatDeprecatedThree SWIFT_AVAILABILITY(macos,deprecated=10.10,message="'singlePlatDeprecatedThree' has been renamed to 'fozzybear': we changed our minds"); |
| 32 | +// CHECK-NEXT: - (void)singlePlatDeprecatedAlways SWIFT_AVAILABILITY(tvos,deprecated=0.0.1); |
| 33 | +// CHECK-NEXT: - (void)singlePlatDeprecatedAlwaysTwo SWIFT_AVAILABILITY(macos,introduced=10.7,deprecated=10.7); |
| 34 | +// CHECK-NEXT: - (void)singlePlatUnavailable SWIFT_AVAILABILITY(watchos,unavailable); |
| 35 | +// CHECK-NEXT: - (void)singlePlatUnavailableTwo SWIFT_AVAILABILITY(watchos,unavailable); |
| 36 | +// CHECK-NEXT: - (void)singlePlatObsoleted SWIFT_AVAILABILITY(ios,obsoleted=8.1); |
| 37 | +// CHECK-NEXT: - (void)singlePlatCombined SWIFT_AVAILABILITY(macos,introduced=10.7,deprecated=10.9,obsoleted=10.10); |
| 38 | +// CHECK-NEXT: - (void)multiPlatCombined |
| 39 | +// CHECK-DAG: SWIFT_AVAILABILITY(macos,introduced=10.6,deprecated=10.8,obsoleted=10.9) |
| 40 | +// CHECK-DAG: SWIFT_AVAILABILITY(ios,introduced=7.0,deprecated=9.0,obsoleted=10.0) |
| 41 | +// CHECK-NEXT: - (void)extensionUnavailable |
| 42 | +// CHECK-DAG: SWIFT_AVAILABILITY(macos_app_extension,unavailable) |
| 43 | +// CHECK-DAG: SWIFT_AVAILABILITY(ios_app_extension,unavailable) |
| 44 | +// CHECK-DAG: SWIFT_AVAILABILITY(tvos_app_extension,unavailable) |
| 45 | +// CHECK-DAG: SWIFT_AVAILABILITY(watchos_app_extension,unavailable) |
| 46 | +// CHECK-NEXT: - (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; |
| 47 | +// CHECK-NEXT: - (nonnull instancetype)initWithX:(NSInteger)_ OBJC_DESIGNATED_INITIALIZER SWIFT_AVAILABILITY(macos,introduced=10.10); |
| 48 | +// CHECK-NEXT: @end |
| 49 | +// CHECK-LABEL: @interface AvailabilitySub |
| 50 | +// CHECK-NEXT: - (nonnull instancetype)init SWIFT_UNAVAILABLE; |
| 51 | +// CHECK-NEXT: - (nonnull instancetype)initWithX:(NSInteger)_ SWIFT_UNAVAILABLE; |
| 52 | +// CHECK-NEXT: @end |
| 53 | +@objc class Availability { |
| 54 | + func alwaysAvailable() {} |
| 55 | + |
| 56 | + @available(*, unavailable) |
| 57 | + func alwaysUnavailable() {} |
| 58 | + @available(*, unavailable, message: "stuff happened") |
| 59 | + func alwaysUnavailableTwo() {} |
| 60 | + @available(*, unavailable, renamed: "bar") |
| 61 | + func alwaysUnavailableThree() {} |
| 62 | + @available(*, unavailable, message: "whatever", renamed: "baz") |
| 63 | + func alwaysUnavailableFour() {} |
| 64 | + |
| 65 | + @available(*, deprecated) |
| 66 | + func alwaysDeprecated() {} |
| 67 | + @available(*, deprecated, message: "it's old") |
| 68 | + func alwaysDeprecatedTwo() {} |
| 69 | + @available(*, deprecated, renamed: "qux") |
| 70 | + func alwaysDeprecatedThree() {} |
| 71 | + @available(*, deprecated, message: "use something else", renamed: "quux") |
| 72 | + func alwaysDeprecatedFour() {} |
| 73 | + |
| 74 | + @available(*, deprecated, message: "one\ntwo\tthree\rfour\\ \"five\"") |
| 75 | + func escapeMessage() {} |
| 76 | + @available(*, deprecated, message: "über") |
| 77 | + func unicodeMessage() {} |
| 78 | + |
| 79 | + @available(macOS 10.10, *) |
| 80 | + func singlePlatShorthand() {} |
| 81 | + @available(macOS 10.11, iOS 9.0, tvOS 9.0, watchOS 3.0, *) |
| 82 | + func multiPlatShorthand() {} |
| 83 | + |
| 84 | + @available(iOS, introduced: 9.0) |
| 85 | + func singlePlatIntroduced() {} |
| 86 | + @available(macOS, deprecated: 10.10) |
| 87 | + func singlePlatDeprecated() {} |
| 88 | + @available(macOS, deprecated: 10.10, renamed: "flubber") |
| 89 | + func singlePlatDeprecatedTwo() {} |
| 90 | + @available(macOS, deprecated: 10.10, message: "we changed our minds", renamed: "fozzybear") |
| 91 | + func singlePlatDeprecatedThree() {} |
| 92 | + @available(tvOS, deprecated) |
| 93 | + func singlePlatDeprecatedAlways() {} |
| 94 | + @available(macOS, introduced: 10.7, deprecated) |
| 95 | + func singlePlatDeprecatedAlwaysTwo() {} |
| 96 | + @available(watchOS, unavailable) |
| 97 | + func singlePlatUnavailable() {} |
| 98 | + @available(watchOS, introduced: 2.0, unavailable) |
| 99 | + func singlePlatUnavailableTwo() {} |
| 100 | + @available(iOS, obsoleted: 8.1) |
| 101 | + func singlePlatObsoleted() {} |
| 102 | + @available(macOS, introduced: 10.7, deprecated: 10.9, obsoleted: 10.10) |
| 103 | + func singlePlatCombined() {} |
| 104 | + |
| 105 | + @available(macOS, introduced: 10.6, deprecated: 10.8, obsoleted: 10.9) |
| 106 | + @available(iOS, introduced: 7.0, deprecated: 9.0, obsoleted: 10.0) |
| 107 | + func multiPlatCombined() {} |
| 108 | + |
| 109 | + @available(macOSApplicationExtension, unavailable) |
| 110 | + @available(iOSApplicationExtension, unavailable) |
| 111 | + @available(tvOSApplicationExtension, unavailable) |
| 112 | + @available(watchOSApplicationExtension, unavailable) |
| 113 | + func extensionUnavailable() {} |
| 114 | + |
| 115 | + init() {} |
| 116 | + @available(macOS 10.10, *) |
| 117 | + init(x _: Int) {} |
| 118 | +} |
| 119 | + |
| 120 | +@objc class AvailabilitySub: Availability { |
| 121 | + private override init() { super.init() } |
| 122 | + @available(macOS 10.10, *) |
| 123 | + private override init(x _: Int) { super.init() } |
| 124 | +} |
0 commit comments