Files
swift-mirror/test/attr/attr_objc_resilience.swift
Ben Langmuir 7d11d43d6d [test] Add explicit targets to tests depending on the default
Add specific deployment target versions to some tests that need to test
10.x-specific behaviours and are currently depending on the default
deployment target.

Certain tests were only checking either the stable or unstable ABI
depending on the platform the test was running. In those cases I doubled
up the checks so that we would test both cases on platforms that
supported it. This might use a bit of extra time on targets that only
support the stable ABI, but it seemed worth it for the additional
coverage in CI.
2024-08-29 07:55:14 -07:00

66 lines
2.9 KiB
Swift

// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend -target %target-pre-stable-abi-triple -emit-module-path %t/resilient_struct.swiftmodule %S/../Inputs/resilient_struct.swift -enable-library-evolution
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -target %target-pre-stable-abi-triple -emit-module-path %t/resilient_objc_class.swiftmodule %S/../Inputs/resilient_objc_class.swift -I %t -enable-library-evolution
// RUN: %target-swift-frontend -target %target-pre-stable-abi-triple -typecheck -verify %s -I %t
// REQUIRES: objc_interop
// UNSUPPORTED: OS=xros
import Foundation
import resilient_objc_class
@objc public class ResilientNSObjectSubclass : ResilientNSObjectOutsideParent {}
// expected-error@-1 {{explicit '@objc' on subclass of 'ResilientNSObjectOutsideParent' requires}}
public class AnotherResilientNSObjectSubclass : ResilientNSObjectOutsideParent {}
extension ResilientNSObjectOutsideParent {
@objc public func categoryOneMethod() {}
// expected-error@-1 {{'@objc' instance method in extension of subclass of 'ResilientNSObjectOutsideParent' requires}}
}
extension AnotherResilientNSObjectSubclass {
@objc public func categoryTwoMethod() {}
// expected-error@-1 {{'@objc' instance method in extension of subclass of 'ResilientNSObjectOutsideParent' requires}}
}
// Note: @_fixed_layout on a class only applies to the storage layout and
// not metadata, which remains resilient.
@_fixed_layout
@objc public class FixedLayoutNSObjectSubclass : FixedLayoutNSObjectOutsideParent {}
// expected-error@-1 {{explicit '@objc' on subclass of 'FixedLayoutNSObjectOutsideParent' requires}}
@_fixed_layout
public class AnotherFixedLayoutNSObjectSubclass : FixedLayoutNSObjectOutsideParent {}
extension FixedLayoutNSObjectOutsideParent {
@objc public func categoryOneMethod() {}
// expected-error@-1 {{'@objc' instance method in extension of subclass of 'FixedLayoutNSObjectOutsideParent' requires}}
}
extension AnotherFixedLayoutNSObjectSubclass {
@objc public func categoryTwoMethod() {}
// expected-error@-1 {{'@objc' instance method in extension of subclass of 'FixedLayoutNSObjectOutsideParent' requires}}
}
// If either the class or the extension member has sufficiently narrow
// availability, we're okay.
extension AnotherResilientNSObjectSubclass {
@available(macOS 10.15, iOS 13.0.0, tvOS 13.0.0, watchOS 6.0.0, *)
@objc public func availableCategoryOneMethod() {}
}
extension AnotherResilientNSObjectSubclass {
@available(macOS 10.15, iOS 13.0.0, tvOS 13.0.0, watchOS 6.0.0, *)
@objc public func availableCategoryTwoMethod() {}
}
@available(macOS 10.15, iOS 13.0.0, tvOS 13.0.0, watchOS 6.0.0, *)
@objc public class AvailableResilientNSObjectSubclass : ResilientNSObjectOutsideParent {}
@available(macOS 10.15, iOS 13.0.0, tvOS 13.0.0, watchOS 6.0.0, *)
extension AnotherResilientNSObjectSubclass {
@objc public func categoryThreeMethod() {}
}