Skip to content

Commit d0571af

Browse files
committed
Tests: Add Obj-C interop tests for ExtensionImportVisibility.
1 parent 78cd114 commit d0571af

File tree

9 files changed

+83
-0
lines changed

9 files changed

+83
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
@import Foundation;
2+
3+
@interface X
4+
@end
5+
6+
@interface X (A)
7+
- (void)fromA;
8+
@end
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
@_exported import Categories_A
2+
3+
extension X {
4+
public func fromOverlayForA() {}
5+
@objc public func fromOverlayForAObjC() {}
6+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@import Categories_A;
2+
3+
@interface X (B)
4+
- (void)fromB;
5+
@end
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
@_exported import Categories_B
2+
3+
extension X {
4+
public func fromOverlayForB() {}
5+
@objc public func fromOverlayForBObjC() {}
6+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@import Categories_A;
2+
3+
@interface X (C)
4+
- (void)fromC;
5+
@end
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
@_exported import Categories_C
2+
3+
extension X {
4+
public func fromOverlayForC() {}
5+
@objc public func fromOverlayForCObjC() {}
6+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import Categories_C
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module Categories_A {
2+
header "Categories_A.h"
3+
export *
4+
}
5+
6+
module Categories_B {
7+
header "Categories_B.h"
8+
export *
9+
}
10+
11+
module Categories_C {
12+
header "Categories_C.h"
13+
export *
14+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-swift-frontend -emit-module -I %t -I %S/Inputs/Categories -o %t %S/Inputs/Categories/Categories_A.swift
3+
// RUN: %target-swift-frontend -emit-module -I %t -I %S/Inputs/Categories -o %t %S/Inputs/Categories/Categories_B.swift
4+
// RUN: %target-swift-frontend -emit-module -I %t -I %S/Inputs/Categories -o %t %S/Inputs/Categories/Categories_C.swift
5+
// RUN: %target-swift-frontend -emit-module -I %t -I %S/Inputs/Categories -o %t %S/Inputs/Categories/Categories_D.swift
6+
// RUN: %target-swift-frontend -typecheck %s -I %t -I %S/Inputs/Categories -verify -enable-experimental-feature ExtensionImportVisibility
7+
8+
// REQUIRES: objc_interop
9+
10+
import Categories_B
11+
import Categories_D
12+
// expected-note 2 {{add import of module 'Categories_C'}}{{1-1=import Categories_C\n}}
13+
func test(x: X) {
14+
x.fromA()
15+
x.fromOverlayForA()
16+
x.fromB()
17+
x.fromOverlayForB()
18+
x.fromC() // expected-error {{class method 'fromC()' is not available due to missing import of defining module 'Categories_C'}}
19+
x.fromOverlayForC() // expected-error {{instance method 'fromOverlayForC()' is not available due to missing import of defining module 'Categories_C'}}
20+
}
21+
22+
func testAnyObject(a: AnyObject) {
23+
a.fromA()
24+
a.fromOverlayForAObjC()
25+
a.fromB()
26+
a.fromOverlayForBObjC()
27+
// FIXME: Better diagnostics?
28+
// Name lookup for AnyObject already ignored transitive imports, so
29+
// ExtensionImportVisibility has no effect on these diagnostics.
30+
a.fromC() // expected-error {{value of type 'AnyObject' has no member 'fromC'}}
31+
a.fromOverlayForCObjC() // expected-error {{value of type 'AnyObject' has no member 'fromOverlayForCObjC'}}
32+
}

0 commit comments

Comments
 (0)