Skip to content

Commit e4c6536

Browse files
committed
Improve testing for re-exported modules.
Test more kinds of entities, including through serialized SIL, and verify that other combinations work (e.g., building the overlay against the public module but using it with the private version).
1 parent a9942ac commit e4c6536

File tree

4 files changed

+115
-4
lines changed

4 files changed

+115
-4
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,49 @@
11
@_exported import SomeKit
2+
import Foundation
23

34
extension SKWidget {
45
public func extensionMethod() -> ExtensionType { return ExtensionType() }
56

67
public struct ExtensionType { }
78
}
89

10+
extension SKWidget.ExtensionType {
11+
public func foo() { }
12+
}
13+
14+
extension NSObject {
15+
public func doSomethingElse(_: SKWidget) { }
16+
}
917

18+
extension SKWidgetError {
19+
public func getCode(from widget: SKWidget) -> SKWidgetError.Code {
20+
return widget.getCurrentError()
21+
}
22+
}
23+
24+
extension SKWidgetError.Code {
25+
public var isBoom: Bool {
26+
return self == .boom
27+
}
28+
}
29+
30+
public protocol HasAnObject {
31+
var anObject: NSObject { get set }
32+
}
33+
34+
extension SKWidget : HasAnObject { }
35+
36+
@inline(__always)
37+
public func inlineWidgetOperations(_ widget: SKWidget) {
38+
widget.extensionMethod().foo()
39+
widget.someObjCMethod()
40+
widget.someObjCExtensionMethod()
41+
widget.doSomething(with: widget)
42+
widget.doSomethingElse(widget)
43+
let obj = widget.anObject
44+
widget.anObject = obj
45+
_ = SKWidgetError(.boom).getCode(from: widget).isBoom
46+
var hao: HasAnObject = widget
47+
someKitGlobalFunc()
48+
hao.anObject = widget
49+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,26 @@
11
@import ObjectiveC;
22

33
@interface SKWidget : NSObject
4+
- (void)someObjCMethod;
45
@end
6+
7+
@interface SKWidget(ObjCAPI)
8+
- (void)someObjCExtensionMethod;
9+
@property (readwrite,strong,nonnull) NSObject *anObject;
10+
@end
11+
12+
@interface NSObject (SKWidget)
13+
- (void)doSomethingWithWidget:(nonnull SKWidget *)widget;
14+
@end
15+
16+
extern NSString * _Nonnull const SKWidgetErrorDomain;
17+
typedef enum __attribute__((ns_error_domain(SKWidgetErrorDomain))) SKWidgetErrorCode : NSInteger {
18+
SKWidgetErrorNone = 0,
19+
SKWidgetErrorBoom = 1
20+
} SKWidgetErrorCode;
21+
22+
@interface SKWidget(Erroneous)
23+
- (SKWidgetErrorCode)getCurrentError;
24+
@end
25+
26+
extern void someKitGlobalFunc(void);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,27 @@
11
@import ObjectiveC;
2+
@import Foundation;
23

34
@interface SKWidget : NSObject
5+
- (void)someObjCMethod;
46
@end
7+
8+
@interface SKWidget(ObjCAPI)
9+
- (void)someObjCExtensionMethod;
10+
@property (readwrite,strong,nonnull) NSObject *anObject;
11+
@end
12+
13+
@interface NSObject (SKWidget)
14+
- (void)doSomethingWithWidget:(nonnull SKWidget *)widget;
15+
@end
16+
17+
extern NSString * _Nonnull const SKWidgetErrorDomain;
18+
typedef enum __attribute__((ns_error_domain(SKWidgetErrorDomain))) SKWidgetErrorCode : NSInteger {
19+
SKWidgetErrorNone = 0,
20+
SKWidgetErrorBoom = 1
21+
} SKWidgetErrorCode;
22+
23+
@interface SKWidget(Erroneous)
24+
- (SKWidgetErrorCode)getCurrentError;
25+
@end
26+
27+
extern void someKitGlobalFunc(void);
Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,46 @@
11
// RUN: rm -rf %t
22
// RUN: mkdir -p %t
33

4+
// FIXME: BEGIN -enable-source-import hackaround
5+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource) -emit-module -o %t %clang-importer-sdk-path/swift-modules/CoreGraphics.swift
6+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) -emit-module -o %t %clang-importer-sdk-path/swift-modules/Foundation.swift
7+
// FIXME: END -enable-source-import hackaround
8+
49
// Build the overlay with private frameworks.
5-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-module -F %S/Inputs/privateframeworks/withprivate -o %t %S/Inputs/privateframeworks/overlay/SomeKit.swift
10+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) -emit-module -F %S/Inputs/privateframeworks/withprivate -o %t %S/Inputs/privateframeworks/overlay/SomeKit.swift
11+
12+
// Use the overlay with private frameworks.
13+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) -emit-sil -o /dev/null -F %S/Inputs/privateframeworks/withprivate %s -verify
14+
15+
// Use the overlay without private frameworks.
16+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) -emit-sil -o /dev/null -F %S/Inputs/privateframeworks/withoutprivate -I %t %s
17+
18+
// Build the overlay with public frameworks.
19+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) -emit-module -F %S/Inputs/privateframeworks/withoutprivate -o %t %S/Inputs/privateframeworks/overlay/SomeKit.swift
620

721
// Use the overlay with private frameworks.
8-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -typecheck -F %S/Inputs/privateframeworks/withprivate -I %t %s -verify
22+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) -emit-sil -o /dev/null -F %S/Inputs/privateframeworks/withprivate %s -verify
923

1024
// Use the overlay without private frameworks.
11-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -typecheck -F %S/Inputs/privateframeworks/withoutprivate -I %t %s -verify
25+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) -emit-sil -o /dev/null -F %S/Inputs/privateframeworks/withoutprivate -I %t %s
1226

1327
// REQUIRES: objc_interop
1428

1529
import SomeKit
1630

1731
func testWidget(widget: SKWidget) {
18-
_ = widget.extensionMethod()
32+
_ = widget.someObjCMethod()
33+
_ = widget.someObjCExtensionMethod()
34+
35+
let ext = widget.extensionMethod()
36+
ext.foo()
37+
38+
widget.doSomethingElse(widget)
39+
inlineWidgetOperations(widget)
40+
}
41+
42+
func testError(widget: SKWidget) {
43+
let c: SKWidgetError.Code = SKWidgetError(.boom).getCode(from: widget)
44+
if c.isBoom { }
1945
}
2046

0 commit comments

Comments
 (0)