Skip to content

Commit 01ed36d

Browse files
authored
Merge pull request #77573 from tshortli/deprecated-property-wrapper-tests
Tests: Add tests for deprecated property wrapper diagnostics
2 parents 735aa98 + c3e189e commit 01ed36d

File tree

1 file changed

+59
-9
lines changed

1 file changed

+59
-9
lines changed

test/Sema/property_wrapper_availability.swift

Lines changed: 59 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,15 @@ struct Available51Wrapper<T> {
1515
var wrappedValue: T
1616
}
1717

18+
@available(*, deprecated)
19+
@propertyWrapper
20+
struct DeprecatedWrapper<T> {
21+
var wrappedValue: T
22+
}
23+
1824
@available(*, unavailable)
1925
@propertyWrapper
20-
struct UnavailableWrapper<T> { // expected-note 6 {{'UnavailableWrapper' has been explicitly marked unavailable here}}
26+
struct UnavailableWrapper<T> { // expected-note 8 {{'UnavailableWrapper' has been explicitly marked unavailable here}}
2127
var wrappedValue: T
2228
}
2329

@@ -26,7 +32,7 @@ struct WrappedValueUnavailableOnMacOS<T> {
2632
init(wrappedValue: T) { fatalError() }
2733

2834
@available(macOS, unavailable)
29-
var wrappedValue: T { // expected-note 6 {{'wrappedValue' has been explicitly marked unavailable here}}
35+
var wrappedValue: T { // expected-note 9 {{'wrappedValue' has been explicitly marked unavailable here}}
3036
get { fatalError() }
3137
set { fatalError() }
3238
}
@@ -49,7 +55,10 @@ struct AlwaysAvailableStruct { // expected-note 3 {{add @available attribute to
4955

5056
@Available51Wrapper var available51Explicit: S // expected-error {{'Available51Wrapper' is only available in macOS 51 or newer}}
5157
@Available51Wrapper var available51Inferred = S() // expected-error {{'Available51Wrapper' is only available in macOS 51 or newer}}
52-
58+
59+
@DeprecatedWrapper var deprecatedExplicit: S // expected-warning {{'DeprecatedWrapper' is deprecated}}
60+
@DeprecatedWrapper var deprecatedInferred = S() // expected-warning {{'DeprecatedWrapper' is deprecated}}
61+
5362
@UnavailableWrapper var unavailableExplicit: S // expected-error {{'UnavailableWrapper' is unavailable}}
5463
@UnavailableWrapper var unavailableInferred = S() // expected-error {{'UnavailableWrapper' is unavailable}}
5564

@@ -64,7 +73,10 @@ struct Available51Struct {
6473

6574
@Available51Wrapper var available51Explicit: S
6675
@Available51Wrapper var available51Inferred = S()
67-
76+
77+
@DeprecatedWrapper var deprecatedExplicit: S // expected-warning {{'DeprecatedWrapper' is deprecated}}
78+
@DeprecatedWrapper var deprecatedInferred = S() // expected-warning {{'DeprecatedWrapper' is deprecated}}
79+
6880
@UnavailableWrapper var unavailableExplicit: S // expected-error {{'UnavailableWrapper' is unavailable}}
6981
@UnavailableWrapper var unavailableInferred = S() // expected-error {{'UnavailableWrapper' is unavailable}}
7082

@@ -80,6 +92,9 @@ struct UnavailableStruct {
8092
@Available51Wrapper var available51Explicit: S
8193
@Available51Wrapper var available51Inferred = S()
8294

95+
@DeprecatedWrapper var deprecatedExplicit: S
96+
@DeprecatedWrapper var deprecatedInferred = S()
97+
8398
@UnavailableWrapper var unavailableExplicit: S
8499
@UnavailableWrapper var unavailableInferred = S()
85100

@@ -95,44 +110,79 @@ struct UnavailableOnMacOSStruct {
95110
@Available51Wrapper var available51Explicit: S
96111
@Available51Wrapper var available51Inferred = S()
97112

113+
@DeprecatedWrapper var deprecatedExplicit: S
114+
@DeprecatedWrapper var deprecatedInferred = S()
115+
98116
@UnavailableWrapper var unavailableExplicit: S
99117
@UnavailableWrapper var unavailableInferred = S()
100118

101119
@WrappedValueUnavailableOnMacOS var unavailableWrappedValue: S
102120
@WrappedValueAvailable51 var wrappedValueAavailable51: S // expected-error {{'wrappedValue' is only available in macOS 51 or newer}}
103121
}
104122

105-
func alwaysAvailableFunc( // expected-note 2 {{add @available attribute to enclosing global function}}
123+
func alwaysAvailableFunc( // expected-note 4 {{add @available attribute to enclosing global function}}
106124
@AlwaysAvailableWrapper _ alwaysAvailable: S,
107125
@Available51Wrapper _ available51: S, // expected-error {{'Available51Wrapper' is only available in macOS 51 or newer}}
126+
@DeprecatedWrapper _ deprecated: S, // expected-warning {{'DeprecatedWrapper' is deprecated}}
108127
@UnavailableWrapper _ unavailable: S, // expected-error {{'UnavailableWrapper' is unavailable}}
109128
@WrappedValueUnavailableOnMacOS _ unavailableWrappedValue: S, // expected-error {{'wrappedValue' is unavailable in macOS}}
110129
@WrappedValueAvailable51 _ wrappedValueAavailable51: S // expected-error {{'wrappedValue' is only available in macOS 51 or newer}}
111-
) {}
130+
) {
131+
@AlwaysAvailableWrapper var alwaysAvailableLocal = S()
132+
@Available51Wrapper var available51Local = S() // expected-error {{'Available51Wrapper' is only available in macOS 51 or newer}}
133+
@DeprecatedWrapper var deprecatedLocal = S() // expected-warning {{'DeprecatedWrapper' is deprecated}}
134+
@UnavailableWrapper var unavailableLocal = S() // expected-error {{'UnavailableWrapper' is unavailable}}
135+
@WrappedValueUnavailableOnMacOS var unavailableWrappedValueLocal = S() // expected-error {{'wrappedValue' is unavailable}}
136+
@WrappedValueAvailable51 var wrappedValueAavailable51 = S() // expected-error {{'wrappedValue' is only available in macOS 51 or newer}}
137+
}
112138

113139
@available(macOS 51, *)
114140
func available51Func(
115141
@AlwaysAvailableWrapper _ alwaysAvailable: S,
116142
@Available51Wrapper _ available51: S,
143+
@DeprecatedWrapper _ deprecated: S, // expected-warning {{'DeprecatedWrapper' is deprecated}}
117144
@UnavailableWrapper _ unavailable: S, // expected-error {{'UnavailableWrapper' is unavailable}}
118145
@WrappedValueUnavailableOnMacOS _ unavailableWrappedValue: S, // expected-error {{'wrappedValue' is unavailable in macOS}}
119146
@WrappedValueAvailable51 _ wrappedValueAavailable51: S
120-
) {}
147+
) {
148+
@AlwaysAvailableWrapper var alwaysAvailableLocal = S()
149+
@Available51Wrapper var available51Local = S()
150+
@DeprecatedWrapper var deprecatedLocal = S() // expected-warning {{'DeprecatedWrapper' is deprecated}}
151+
@UnavailableWrapper var unavailableLocal = S() // expected-error {{'UnavailableWrapper' is unavailable}}
152+
@WrappedValueUnavailableOnMacOS var unavailableWrappedValueLocal = S() // expected-error {{'wrappedValue' is unavailable}}
153+
@WrappedValueAvailable51 var wrappedValueAavailable51 = S()
154+
}
121155

122156
@available(*, unavailable)
123157
func unavailableFunc(
124158
@AlwaysAvailableWrapper _ alwaysAvailable: S,
125159
@Available51Wrapper _ available51: S,
160+
@DeprecatedWrapper _ deprecated: S,
126161
@UnavailableWrapper _ unavailable: S,
127162
@WrappedValueUnavailableOnMacOS _ unavailableWrappedValue: S, // expected-error {{'wrappedValue' is unavailable in macOS}}
128163
@WrappedValueAvailable51 _ wrappedValueAavailable51: S // expected-error {{'wrappedValue' is only available in macOS 51 or newer}}
129-
) {}
164+
) {
165+
@AlwaysAvailableWrapper var alwaysAvailableLocal = S()
166+
@Available51Wrapper var available51Local = S()
167+
@DeprecatedWrapper var deprecatedLocal = S()
168+
@UnavailableWrapper var unavailableLocal = S()
169+
@WrappedValueUnavailableOnMacOS var unavailableWrappedValueLocal = S() // expected-error {{'wrappedValue' is unavailable}}
170+
@WrappedValueAvailable51 var wrappedValueAavailable51 = S() // expected-error {{'wrappedValue' is only available in macOS 51 or newer}}
171+
}
130172

131173
@available(macOS, unavailable)
132174
func unavailableOnMacOSFunc(
133175
@AlwaysAvailableWrapper _ alwaysAvailable: S,
134176
@Available51Wrapper _ available51: S,
177+
@DeprecatedWrapper _ deprecated: S,
135178
@UnavailableWrapper _ unavailable: S,
136179
@WrappedValueUnavailableOnMacOS _ unavailableWrappedValue: S,
137180
@WrappedValueAvailable51 _ wrappedValueAavailable51: S // expected-error {{'wrappedValue' is only available in macOS 51 or newer}}
138-
) {}
181+
) {
182+
@AlwaysAvailableWrapper var alwaysAvailableLocal = S()
183+
@Available51Wrapper var available51Local = S()
184+
@DeprecatedWrapper var deprecatedLocal = S()
185+
@UnavailableWrapper var unavailableLocal = S()
186+
@WrappedValueUnavailableOnMacOS var unavailableWrappedValueLocal = S()
187+
@WrappedValueAvailable51 var wrappedValueAavailable51 = S() // expected-error {{'wrappedValue' is only available in macOS 51 or newer}}
188+
}

0 commit comments

Comments
 (0)