Skip to content

Commit 67798cd

Browse files
committed
Update tests to check unavailable and obsoleted attributes on extensions
1 parent 1cc25b9 commit 67798cd

File tree

2 files changed

+60
-3
lines changed

2 files changed

+60
-3
lines changed

test/attr/attr_availability_osx.swift

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,60 @@ func testAccessors() {
141141
t.unavailableSetter = .init() // expected-error {{setter for 'unavailableSetter' is unavailable in macOS: bad setter}}
142142
t.unavailableSetter.mutate() // expected-error {{setter for 'unavailableSetter' is unavailable in macOS: bad setter}}
143143
}
144+
145+
// Check available on extensions
146+
147+
@available(macOS, unavailable)
148+
extension TestStruct {
149+
func unavailInExtension() {} // expected-note 2 {{'unavailInExtension()' has been explicitly marked unavailable here}}
150+
}
151+
152+
@available(macOS, obsoleted: 10.0)
153+
extension TestStruct {
154+
func obsoletedInExtension() {} // expected-note 2 {{'obsoletedInExtension()' was obsoleted in macOS 10.0}}
155+
}
156+
157+
@available(macOS, deprecated: 10.0)
158+
extension TestStruct {
159+
func deprecatedInExtension() {}
160+
}
161+
162+
@available(swift, introduced: 50.0)
163+
extension TestStruct {
164+
func introducedInExtensionSwift() {} // expected-note 2 {{'introducedInExtensionSwift()' was introduced in Swift 50.0}}
165+
}
166+
167+
@available(macOS, introduced: 10.50)
168+
extension TestStruct {
169+
func introducedInExtensionMacOS() {}
170+
}
171+
172+
TestStruct().unavailInExtension() // expected-error {{'unavailInExtension()' is unavailable in macOS}}
173+
TestStruct().obsoletedInExtension() // expected-error {{'obsoletedInExtension()' is unavailable}}
174+
TestStruct().deprecatedInExtension() // expected-warning {{'deprecatedInExtension()' was deprecated in macOS 10.0}}
175+
TestStruct().introducedInExtensionSwift() // expected-error {{'introducedInExtensionSwift()' is unavailable}}
176+
TestStruct().introducedInExtensionMacOS() // expected-error {{'introducedInExtensionMacOS()' is only available in macOS 10.50 or newer}}
177+
// expected-note@-1{{add 'if #available' version check}}
178+
179+
extension TestStruct {
180+
func availableFunc() {
181+
unavailInExtension() // expected-error {{'unavailInExtension()' is unavailable in macOS}}
182+
obsoletedInExtension() // expected-error {{'obsoletedInExtension()' is unavailable}}
183+
deprecatedInExtension() // expected-warning {{'deprecatedInExtension()' was deprecated in macOS 10.0}}
184+
introducedInExtensionSwift() // expected-error {{'introducedInExtensionSwift()' is unavailable}}
185+
}
186+
}
187+
188+
extension TestStruct { // expected-note{{add @available attribute to enclosing extension}}
189+
func availableFuncMacOS() { // expected-note{{add @available attribute to enclosing instance method}}
190+
introducedInExtensionMacOS() // expected-error {{'introducedInExtensionMacOS()' is only available in macOS 10.50 or newer}}
191+
// expected-note@-1{{add 'if #available' version check}}
192+
}
193+
}
194+
195+
@available(macOS, introduced: 10.50)
196+
extension TestStruct {
197+
func futureFuncMacOS() {
198+
introducedInExtensionMacOS()
199+
}
200+
}

test/attr/attr_availability_swift.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ extension TestStruct {
2929
func doTheThing() {} // expected-note {{'doTheThing()' was introduced in Swift 400}}
3030
}
3131

32-
@available(swift 400) // FIXME: This has no effect and should be complained about.
32+
@available(swift 400)
3333
extension TestStruct {
34-
func doAnotherThing() {}
34+
func doAnotherThing() {} // expected-note {{'doAnotherThing()' was introduced in Swift 400}}
3535
}
3636

3737
@available(macOS 10.11, *)
3838
func testMemberAvailability() {
3939
TestStruct().doTheThing() // expected-error {{'doTheThing()' is unavailable}}
40-
TestStruct().doAnotherThing() // okay (for now)
40+
TestStruct().doAnotherThing() // expected-error {{'doAnotherThing()' is unavailable}}
4141
}
4242

4343
@available(swift 400) // FIXME: This has no effect and should be complained about.

0 commit comments

Comments
 (0)