Skip to content

Commit 41db78b

Browse files
committed
Tests: Improve coverage in members_transitive*.swift.
- Reorganize test cases - Add tests cases for multi-file and contextual base lookup - Verify behavior without `MemberImportVisibility` feature NFC.
1 parent e8120a6 commit 41db78b

File tree

6 files changed

+50
-16
lines changed

6 files changed

+50
-16
lines changed

test/NameLookup/Inputs/members_A.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,7 @@ extension Y {
2323

2424
public static func <<<(a: Self, b: Self) -> Self { a }
2525
}
26+
27+
public enum EnumInA {
28+
case caseInA
29+
}

test/NameLookup/Inputs/members_B.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,6 @@ extension Y {
1313
public static func >>>(a: Self, b: Self) -> Self { b }
1414
}
1515

16+
public enum EnumInB {
17+
case caseInB
18+
}

test/NameLookup/Inputs/members_C.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,7 @@ extension Y {
1313

1414
public static func <>(a: Self, b: Self) -> Self { a }
1515
}
16+
17+
public enum EnumInC {
18+
case caseInC
19+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import members_A
2+
import members_B
3+
import members_C
4+
5+
func takesEnumInA(_ a: EnumInA) {}
6+
func takesEnumInB(_ b: EnumInB) {}
7+
func takesEnumInC(_ c: EnumInC) {}

test/NameLookup/members_transitive.swift

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,39 @@
22
// RUN: %target-swift-frontend -emit-module -o %t %S/Inputs/members_A.swift
33
// RUN: %target-swift-frontend -emit-module -I %t -o %t %S/Inputs/members_B.swift
44
// RUN: %target-swift-frontend -emit-module -I %t -o %t %S/Inputs/members_C.swift
5-
// RUN: %target-swift-frontend -typecheck %s -I %t -verify -enable-experimental-feature MemberImportVisibility
5+
// RUN: %target-swift-frontend -typecheck -primary-file %s %S/Inputs/members_transitive_other.swift -I %t -verify -swift-version 5
6+
// RUN: %target-swift-frontend -typecheck -primary-file %s %S/Inputs/members_transitive_other.swift -I %t -verify -swift-version 6
7+
// RUN: %target-swift-frontend -typecheck -primary-file %s %S/Inputs/members_transitive_other.swift -I %t -verify -swift-version 5 -enable-experimental-feature MemberImportVisibility -verify-additional-prefix member-visibility-
68

79
import members_C
8-
// expected-note 2{{add import of module 'members_B'}}{{1-1=import members_B\n}}
9-
func test(x: X, y: Y<Z>) {
10-
// Declared in members_A
10+
// expected-member-visibility-note 7{{add import of module 'members_B'}}{{1-1=import members_B\n}}
11+
12+
13+
func testExtensionMembers(x: X, y: Y<Z>) {
1114
x.XinA()
1215
y.YinA()
16+
17+
x.XinB() // expected-member-visibility-error{{instance method 'XinB()' is not available due to missing import of defining module 'members_B'}}
18+
y.YinB() // expected-member-visibility-error{{instance method 'YinB()' is not available due to missing import of defining module 'members_B'}}
19+
20+
x.XinC()
21+
y.YinC()
22+
}
23+
24+
func testOperatorMembers(x: X, y: Y<Z>) {
1325
_ = x <<< x
1426
_ = y <<< y
1527

16-
// Declared in members_B
17-
x.XinB() // expected-error{{instance method 'XinB()' is not available due to missing import of defining module 'members_B'}}
18-
y.YinB() // expected-error{{instance method 'YinB()' is not available due to missing import of defining module 'members_B'}}
1928
_ = x >>> x // expected-error{{cannot find operator '>>>' in scope}}
2029
_ = y >>> y // expected-error{{cannot find operator '>>>' in scope}}
2130

22-
// Declared in members_C
23-
x.XinC()
24-
y.YinC()
2531
_ = x <> x
2632
_ = y <> y
2733
}
34+
35+
func testMembersWithContextualBase() {
36+
takesEnumInA(.caseInA)
37+
takesEnumInB(.caseInB) // expected-member-visibility-error{{enum case 'caseInB' is not available due to missing import of defining module 'members_B'}}
38+
takesEnumInC(.caseInC)
39+
}
40+

test/NameLookup/members_transitive_objc.swift

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,26 @@
33
// RUN: %target-swift-frontend -emit-module -I %t -I %S/Inputs/Categories -o %t %S/Inputs/Categories/Categories_B.swift
44
// RUN: %target-swift-frontend -emit-module -I %t -I %S/Inputs/Categories -o %t %S/Inputs/Categories/Categories_C.swift
55
// RUN: %target-swift-frontend -emit-module -I %t -I %S/Inputs/Categories -o %t %S/Inputs/Categories/Categories_E.swift
6-
// RUN: %target-swift-frontend -typecheck %s -I %t -I %S/Inputs/Categories -verify -enable-experimental-feature MemberImportVisibility
6+
// RUN: %target-swift-frontend -typecheck %s -I %t -I %S/Inputs/Categories -import-objc-header %S/Inputs/Categories/Bridging.h -verify -swift-version 5
7+
// RUN: %target-swift-frontend -typecheck %s -I %t -I %S/Inputs/Categories -import-objc-header %S/Inputs/Categories/Bridging.h -verify -swift-version 6
8+
// RUN: %target-swift-frontend -typecheck %s -I %t -I %S/Inputs/Categories -import-objc-header %S/Inputs/Categories/Bridging.h -verify -swift-version 5 -enable-experimental-feature MemberImportVisibility -verify-additional-prefix member-visibility-
79

810
// REQUIRES: objc_interop
911

1012
import Categories_B
1113
import Categories_E
1214

13-
// expected-note@-1 2 {{add import of module 'Categories_C'}}{{1-1=import Categories_C\n}}
14-
// expected-note@-2 {{add import of module 'Categories_D'}}{{1-1=import Categories_D\n}}
15+
// expected-member-visibility-note@-1 2 {{add import of module 'Categories_C'}}{{1-1=import Categories_C\n}}
16+
// expected-member-visibility-note@-2 {{add import of module 'Categories_D'}}{{1-1=import Categories_D\n}}
1517
func test(x: X) {
1618
x.fromA()
1719
x.fromOverlayForA()
1820
x.fromB()
1921
x.fromOverlayForB()
20-
x.fromC() // expected-error {{class method 'fromC()' is not available due to missing import of defining module 'Categories_C'}}
21-
x.fromOverlayForC() // expected-error {{instance method 'fromOverlayForC()' is not available due to missing import of defining module 'Categories_C'}}
22-
x.fromSubmoduleOfD() // expected-error {{class method 'fromSubmoduleOfD()' is not available due to missing import of defining module 'Categories_D'}}
22+
x.fromC() // expected-member-visibility-error {{class method 'fromC()' is not available due to missing import of defining module 'Categories_C'}}
23+
x.fromOverlayForC() // expected-member-visibility-error {{instance method 'fromOverlayForC()' is not available due to missing import of defining module 'Categories_C'}}
24+
x.fromSubmoduleOfD() // expected-member-visibility-error {{class method 'fromSubmoduleOfD()' is not available due to missing import of defining module 'Categories_D'}}
25+
x.fromBridgingHeader()
2326
}
2427

2528
func testAnyObject(a: AnyObject) {

0 commit comments

Comments
 (0)