Skip to content

Commit 497619e

Browse files
committed
Tests: Add test cases for potential unavailability in class inheritance when is specified.
1 parent 5747bc4 commit 497619e

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

test/attr/attr_inlinable_available.swift

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,28 @@ public protocol AfterDeploymentTargetProto {}
9797
@available(macOS, unavailable)
9898
public protocol UnavailableProto {}
9999

100+
// MARK: - Class definitions
101+
102+
public class NoAvailableClass {}
103+
104+
@available(macOS 10.9, *)
105+
public class BeforeInliningTargetClass {}
106+
107+
@available(macOS 10.10, *)
108+
public class AtInliningTargetClass {}
109+
110+
@available(macOS 10.14.5, *)
111+
public class BetweenTargetsClass {}
112+
113+
@available(macOS 10.15, *)
114+
public class AtDeploymentTargetClass {}
115+
116+
@available(macOS 11, *)
117+
public class AfterDeploymentTargetClass {}
118+
119+
@available(macOS, unavailable)
120+
public class UnavailableClass {}
121+
100122

101123
// MARK: - Internal functions
102124

@@ -1163,6 +1185,40 @@ enum InternalNoAvailableEnumWithTypeAliases { // expected-note {{add @available
11631185
public typealias F = AfterDeploymentTarget // expected-error {{'AfterDeploymentTarget' is only available in macOS 11 or newer}} expected-note {{add @available attribute to enclosing type alias}}
11641186
}
11651187

1188+
// MARK: - Class inheritance
1189+
1190+
// FIXME: Duplicate 'add @available' emitted when classes are nested in a decl
1191+
1192+
public enum NoAvailableEnumWithClasses {
1193+
public class InheritsNoAvailable: NoAvailableClass {}
1194+
public class InheritsBeforeInliningTarget: BeforeInliningTargetClass {}
1195+
public class InheritsAtInliningTarget: AtInliningTargetClass {}
1196+
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}}
1197+
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}}
1198+
public class InheritsAfterDeploymentTarget: AfterDeploymentTargetClass {} // expected-error {{'AfterDeploymentTargetClass' is only available in macOS 11 or newer}} expected-note 2 {{add @available attribute to enclosing class}}
1199+
}
1200+
1201+
@_spi(Private)
1202+
public enum SPIEnumWithClasses {
1203+
public class InheritsNoAvailable: NoAvailableClass {}
1204+
public class InheritsBeforeInliningTarget: BeforeInliningTargetClass {}
1205+
public class InheritsAtInliningTarget: AtInliningTargetClass {}
1206+
public class InheritsBetweenTargets: BetweenTargetsClass {}
1207+
public class InheritsAtDeploymentTarget: AtDeploymentTargetClass {}
1208+
// FIXME: Duplicate 'add @available' note is emitted
1209+
public class InheritsAfterDeploymentTarget: AfterDeploymentTargetClass {} // expected-error {{'AfterDeploymentTargetClass' is only available in}} expected-note 2 {{add @available attribute to enclosing class}}
1210+
}
1211+
1212+
@available(macOS, unavailable)
1213+
public enum UnavailableEnumWithClasses {
1214+
public class InheritsNoAvailable: NoAvailableClass {}
1215+
public class InheritsBeforeInliningTarget: BeforeInliningTargetClass {}
1216+
public class InheritsAtInliningTarget: AtInliningTargetClass {}
1217+
public class InheritsBetweenTargets: BetweenTargetsClass {}
1218+
public class InheritsAtDeploymentTarget: AtDeploymentTargetClass {}
1219+
public class InheritsAfterDeploymentTarget: AfterDeploymentTargetClass {} // expected-error {{'AfterDeploymentTargetClass' is only available in}} expected-note 2 {{add @available attribute to enclosing class}}
1220+
public class InheritsUnavailable: UnavailableClass {}
1221+
}
11661222

11671223
// MARK: - Top-level code
11681224

0 commit comments

Comments
 (0)