|
| 1 | +// RUN: %empty-directory(%t) |
| 2 | + |
| 3 | +// RUN: %target-swift-frontend -emit-module %s \ |
| 4 | +// RUN: -I %S/../Inputs/custom-modules/availability-domains \ |
| 5 | +// RUN: -enable-experimental-feature CustomAvailability \ |
| 6 | +// RUN: -experimental-spi-only-imports \ |
| 7 | +// RUN: -enable-library-evolution -swift-version 5 -library-level api \ |
| 8 | +// RUN: -package-name TestPackage -module-name Test \ |
| 9 | +// RUN: -emit-module-interface-path %t/Test.swiftinterface \ |
| 10 | +// RUN: -emit-private-module-interface-path %t/Test.private.swiftinterface \ |
| 11 | +// RUN: -emit-package-module-interface-path %t/Test.package.swiftinterface |
| 12 | + |
| 13 | +// RUN: %target-swift-typecheck-module-from-interface(%t/Test.swiftinterface) \ |
| 14 | +// RUN: -I %S/../Inputs/custom-modules/availability-domains \ |
| 15 | +// RUN: -module-name Test |
| 16 | + |
| 17 | +// RUN: %target-swift-typecheck-module-from-interface(%t/Test.private.swiftinterface) \ |
| 18 | +// RUN: -I %S/../Inputs/custom-modules/availability-domains \ |
| 19 | +// RUN: -module-name Test |
| 20 | + |
| 21 | +// RUN: %target-swift-typecheck-module-from-interface(%t/Test.package.swiftinterface) \ |
| 22 | +// RUN: -I %S/../Inputs/custom-modules/availability-domains \ |
| 23 | +// RUN: -module-name Test |
| 24 | + |
| 25 | +// RUN: %FileCheck %s --check-prefixes=CHECK --input-file %t/Test.swiftinterface |
| 26 | +// RUN: %FileCheck %s --check-prefixes=CHECK-PUBLIC --input-file %t/Test.swiftinterface |
| 27 | +// RUN: %FileCheck %s --check-prefixes=CHECK,CHECK-NONPUBLIC --input-file %t/Test.private.swiftinterface |
| 28 | +// RUN: %FileCheck %s --check-prefixes=CHECK,CHECK-NONPUBLIC --input-file %t/Test.package.swiftinterface |
| 29 | + |
| 30 | +// REQUIRES: swift_feature_CustomAvailability |
| 31 | + |
| 32 | +import Lakes |
| 33 | +@_spiOnly import Seas |
| 34 | + |
| 35 | +// CHECK: @available(Salt) |
| 36 | +// CHECK: public func availableInPublicEnabledDomain() |
| 37 | +@available(Salt) |
| 38 | +public func availableInPublicEnabledDomain() { } |
| 39 | + |
| 40 | +// CHECK: @available(Erie) |
| 41 | +// CHECK: public func availableInPublicDisabledDomain() |
| 42 | +@available(Erie) |
| 43 | +public func availableInPublicDisabledDomain() { } |
| 44 | + |
| 45 | +// CHECK: @available(Huron) |
| 46 | +// CHECK: public func availableInPublicDynamicDomain() |
| 47 | +@available(Huron) |
| 48 | +public func availableInPublicDynamicDomain() { } |
| 49 | + |
| 50 | +// CHECK: @available(Salt, unavailable) |
| 51 | +// CHECK: public func unavailableInPublicEnabledDomain() |
| 52 | +@available(Salt, unavailable) |
| 53 | +public func unavailableInPublicEnabledDomain() { } |
| 54 | + |
| 55 | +// CHECK: @available(Erie, unavailable) |
| 56 | +// CHECK: public func unavailableInPublicDisabledDomain() |
| 57 | +@available(Erie, unavailable) |
| 58 | +public func unavailableInPublicDisabledDomain() { } |
| 59 | + |
| 60 | +// CHECK: @available(Huron, unavailable) |
| 61 | +// CHECK: public func unavailableInPublicDynamicDomain() |
| 62 | +@available(Huron, unavailable) |
| 63 | +public func unavailableInPublicDynamicDomain() { } |
| 64 | + |
| 65 | +// CHECK-NONPUBLIC: @available(Baltic) |
| 66 | +// CHECK-PUBLIC-NOT: Baltic |
| 67 | +// CHECK-LABEL: public func availableInSPIOnlyEnabledDomain() |
| 68 | +@available(Baltic) |
| 69 | +public func availableInSPIOnlyEnabledDomain() { } |
| 70 | + |
| 71 | +// CHECK-NONPUBLIC: @available(Mediterranean) |
| 72 | +// CHECK-NONPUBLIC-LABEL: public func availableInSPIOnlyDisabledDomain_Secret() |
| 73 | +// CHECK-PUBLIC-NOT: Mediterranean |
| 74 | +// CHECK-PUBLIC-NOT: availableInSPIOnlyDisabledDomain_Secret |
| 75 | +@available(Mediterranean) |
| 76 | +public func availableInSPIOnlyDisabledDomain_Secret() { } |
| 77 | + |
| 78 | +// CHECK-NONPUBLIC: @available(Aegean) |
| 79 | +// CHECK-PUBLIC-NOT: Aegean |
| 80 | +// CHECK-LABEL: public func availableInSPIOnlyDynamicDomain() |
| 81 | +@available(Aegean) |
| 82 | +public func availableInSPIOnlyDynamicDomain() { } |
| 83 | + |
| 84 | +// CHECK-NONPUBLIC: @available(Baltic, unavailable) |
| 85 | +// CHECK-NONPUBLIC-LABEL: public func unavailableInSPIOnlyEnabledDomain_Secret() |
| 86 | +// CHECK-PUBLIC-NOT: Baltic |
| 87 | +// CHECK-PUBLIC-NOT: unavailableInSPIOnlyEnabledDomain_Secret |
| 88 | +@available(Baltic, unavailable) |
| 89 | +public func unavailableInSPIOnlyEnabledDomain_Secret() { } |
| 90 | + |
| 91 | +// CHECK-NONPUBLIC: @available(Mediterranean, unavailable) |
| 92 | +// CHECK-PUBLIC-NOT: Mediterranean |
| 93 | +// CHECK-LABEL: public func unavailableInSPIOnlyDisabledDomain() |
| 94 | +@available(Mediterranean, unavailable) |
| 95 | +public func unavailableInSPIOnlyDisabledDomain() { } |
| 96 | + |
| 97 | +// CHECK: @available(*, unavailable) |
| 98 | +// CHECK-NONPUBLIC: @available(Baltic) |
| 99 | +// CHECK-PUBLIC-NOT: Baltic |
| 100 | +// CHECK-LABEL: public func availableInSPIOnlyEnabledDomainAndUnavailableUniversally() |
| 101 | +@available(*, unavailable) |
| 102 | +@available(Baltic) |
| 103 | +public func availableInSPIOnlyEnabledDomainAndUnavailableUniversally() { } |
| 104 | + |
| 105 | +// CHECK-NONPUBLIC: @available(*, unavailable) |
| 106 | +// CHECK-NONPUBLIC: @available(Mediterranean) |
| 107 | +// CHECK-NONPUBLIC-LABEL: public func availableInSPIOnlyDisabledDomainAndUnavailableUniversally_Secret() |
| 108 | +// CHECK-PUBLIC-NOT: Mediterranean |
| 109 | +// CHECK-PUBLIC-NOT: availableInSPIOnlyDisabledDomainAndUnavailableUniversally_Secret |
| 110 | +@available(*, unavailable) |
| 111 | +@available(Mediterranean) |
| 112 | +public func availableInSPIOnlyDisabledDomainAndUnavailableUniversally_Secret() { } |
| 113 | + |
| 114 | +// CHECK: @available(*, unavailable) |
| 115 | +// CHECK-NONPUBLIC: @available(Aegean) |
| 116 | +// CHECK-PUBLIC-NOT: Aegean |
| 117 | +// CHECK-LABEL: public func availableInSPIOnlyDynamicDomainAndUnavailableUniversally() |
| 118 | +@available(*, unavailable) |
| 119 | +@available(Aegean) |
| 120 | +public func availableInSPIOnlyDynamicDomainAndUnavailableUniversally() { } |
0 commit comments