Skip to content

Commit c9d3cf0

Browse files
committed
Tests: Add test cases for potential unavailability in class inheritance when is specified.
1 parent b81ced4 commit c9d3cf0

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

test/attr/attr_inlinable_available.swift

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,31 @@ public protocol AfterDeploymentTargetProto {}
103103
@available(watchOS, unavailable)
104104
public protocol UnavailableProto {}
105105

106+
// MARK: - Class definitions
107+
108+
public class NoAvailableClass {}
109+
110+
@available(macOS 10.9, iOS 7.0, tvOS 8.0, watchOS 1.0, *)
111+
public class BeforeInliningTargetClass {}
112+
113+
@available(macOS 10.10, iOS 8.0, tvOS 9.0, watchOS 2.0, *)
114+
public class AtInliningTargetClass {}
115+
116+
@available(macOS 10.14.5, iOS 12.3, tvOS 12.3, watchOS 5.3, *)
117+
public class BetweenTargetsClass {}
118+
119+
@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *)
120+
public class AtDeploymentTargetClass {}
121+
122+
@available(macOS 11, iOS 14, tvOS 14, watchOS 7, *)
123+
public class AfterDeploymentTargetClass {}
124+
125+
@available(macOS, unavailable)
126+
@available(iOS, unavailable)
127+
@available(tvOS, unavailable)
128+
@available(watchOS, unavailable)
129+
public class UnavailableClass {}
130+
106131

107132
// MARK: - Internal functions
108133

@@ -1190,6 +1215,43 @@ enum InternalNoAvailableEnumWithTypeAliases { // expected-note {{add @available
11901215
public typealias F = AfterDeploymentTarget // expected-error {{'AfterDeploymentTarget' is only available in macOS 11 or newer}} expected-note {{add @available attribute to enclosing type alias}}
11911216
}
11921217

1218+
// MARK: - Class inheritance
1219+
1220+
// FIXME: Duplicate 'add @available' emitted when classes are nested in a decl
1221+
1222+
public enum NoAvailableEnumWithClasses {
1223+
public class InheritsNoAvailable: NoAvailableClass {}
1224+
public class InheritsBeforeInliningTarget: BeforeInliningTargetClass {}
1225+
public class InheritsAtInliningTarget: AtInliningTargetClass {}
1226+
public class InheritsBetweenTargets: BetweenTargetsClass {} // expected-error {{'BetweenTargetsClass' is only available in macOS 10.14.5 or newer}} expected-note 2 {{add @available attribute to enclosing class}}
1227+
public class InheritsAtDeploymentTarget: AtDeploymentTargetClass {} // expected-error {{'AtDeploymentTargetClass' is only available in macOS 10.15 or newer}} expected-note 2 {{add @available attribute to enclosing class}}
1228+
public class InheritsAfterDeploymentTarget: AfterDeploymentTargetClass {} // expected-error {{'AfterDeploymentTargetClass' is only available in macOS 11 or newer}} expected-note 2 {{add @available attribute to enclosing class}}
1229+
}
1230+
1231+
@_spi(Private)
1232+
public enum SPIEnumWithClasses {
1233+
public class InheritsNoAvailable: NoAvailableClass {}
1234+
public class InheritsBeforeInliningTarget: BeforeInliningTargetClass {}
1235+
public class InheritsAtInliningTarget: AtInliningTargetClass {}
1236+
public class InheritsBetweenTargets: BetweenTargetsClass {}
1237+
public class InheritsAtDeploymentTarget: AtDeploymentTargetClass {}
1238+
// FIXME: Duplicate 'add @available' note is emitted
1239+
public class InheritsAfterDeploymentTarget: AfterDeploymentTargetClass {} // expected-error {{'AfterDeploymentTargetClass' is only available in}} expected-note 2 {{add @available attribute to enclosing class}}
1240+
}
1241+
1242+
@available(macOS, unavailable)
1243+
@available(iOS, unavailable)
1244+
@available(tvOS, unavailable)
1245+
@available(watchOS, unavailable)
1246+
public enum UnavailableEnumWithClasses {
1247+
public class InheritsNoAvailable: NoAvailableClass {}
1248+
public class InheritsBeforeInliningTarget: BeforeInliningTargetClass {}
1249+
public class InheritsAtInliningTarget: AtInliningTargetClass {}
1250+
public class InheritsBetweenTargets: BetweenTargetsClass {}
1251+
public class InheritsAtDeploymentTarget: AtDeploymentTargetClass {}
1252+
public class InheritsAfterDeploymentTarget: AfterDeploymentTargetClass {} // expected-error {{'AfterDeploymentTargetClass' is only available in}} expected-note 2 {{add @available attribute to enclosing class}}
1253+
public class InheritsUnavailable: UnavailableClass {}
1254+
}
11931255

11941256
// MARK: - Top-level code
11951257

0 commit comments

Comments
 (0)