-
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathSkipAndroidBridgeSamplesTests.swift
More file actions
115 lines (92 loc) · 4.24 KB
/
Copy pathSkipAndroidBridgeSamplesTests.swift
File metadata and controls
115 lines (92 loc) · 4.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// Copyright 2024–2026 Skip
// SPDX-License-Identifier: MPL-2.0
import Foundation
import SkipBridge
import SkipAndroidBridge
import SkipAndroidBridgeSamples
import XCTest
final class SkipAndroidBridgeSamplesTests: XCTestCase {
override func setUp() {
#if SKIP
loadPeerLibrary(packageName: "skip-android-bridge", moduleName: "SkipAndroidBridgeSamples")
//try AndroidBridge.initBridge("SkipAndroidBridgeSamples") // doesn't work on Robolectric
let context = ProcessInfo.processInfo.androidContext
try AndroidBridgeBootstrap.initAndroidBridge(filesDir: context.getFilesDir().getAbsolutePath(), cacheDir: context.getCacheDir().getAbsolutePath())
#endif
}
func testSimpleConstants() {
XCTAssertEqual(swiftStringConstant, "s")
}
func testFunction() {
XCTAssertEqual("value", getStringValue("value"))
}
func testBundleClassName() throws {
let className = bundleClassName()
if isAndroid {
XCTAssertEqual("AndroidBundle: bundle: class skip.android.bridge.samples._ModuleBundleLocator", className)
} else {
XCTAssertTrue(className.hasPrefix("NSBundle"), "unexpected bundle class name: \(className)")
}
}
func resourceURLTest(name: String, bundle: Bundle?) throws {
if isRobolectric {
// unwrap fails on Robolectric
throw XCTSkip("unknown error on Robolectric")
}
let url = try XCTUnwrap(getAssetURL(named: "\(name).json", in: bundle))
if isRobolectric || !isJava {
XCTAssertEqual("file", url.scheme)
XCTAssertEqual("\(name).json", url.lastPathComponent)
} else {
XCTAssertEqual("asset", url.scheme)
XCTAssertEqual("asset:/skip/android/bridge/samples/Resources/\(name).json", url.absoluteString)
}
let expectedContents = "{ \"name\": \"\(name)\" }\n"
let bridgedData = try XCTUnwrap(getAssetContents(named: "\(name).json", in: bundle))
XCTAssertEqual(expectedContents, String(data: bridgedData, encoding: .utf8))
// also try loading localy with the Java side of the URLProtocol
let localData = try Data(contentsOf: url)
XCTAssertEqual(expectedContents, String(data: localData, encoding: .utf8))
}
func testResourceURL() throws {
try resourceURLTest(name: "SkipAndroidBridgeSamples", bundle: nil)
}
func testResourceURLWithBundleParameter() throws {
try resourceURLTest(name: "SkipAndroidBridgeSamplesTests", bundle: .module)
}
func testUserDefaultsClassName() throws {
let className = userDefaultsClassName()
if isAndroid {
XCTAssertEqual("AndroidUserDefaults: SkipAndroidBridge.UserDefaultsAccess", className)
}
}
func testUserDefaults() throws {
if isRobolectric {
// ???
// SkipBridge/BridgedTypes.swift:189: Fatal error: Unable to bridge Swift instance value of type: NSTaggedPointerString
throw XCTSkip("unknown error on Robolectric")
}
setStringDefault(name: "test", value: "value")
XCTAssertEqual("value", getStringDefault(name: "test"))
setStringDefault(name: "test", value: "value2")
XCTAssertEqual("value2", getStringDefault(name: "test"))
setStringDefault(name: "test", value: nil)
XCTAssertEqual(nil, getStringDefault(name: "test"))
}
func testAndroidContext() throws {
if !isAndroid {
throw XCTSkip("no package name on Robolectric")
}
// SkipAndroidBridgeSamplesTests.kt testAndroidContext -> SkipAndroidBridgeSamples.kt nativeAndroidContextPackageName -> SkipAndroidBridgeSamples.swift nativeAndroidContextPackageName -> AndroidContext.swift getPackageName()
XCTAssertEqual("skip.android.bridge.samples.module.test", try nativeAndroidContextPackageName())
}
func testLocalizedStringResource() throws {
XCTAssertEqual(localizedStringResourceLiteralKey(), "literal")
XCTAssertEqual(localizedStringResourceInterpolatedKey(), "interpolated %lld!")
}
// not working yet…
// func testMainActorAsync() async throws {
// let value = await mainActorAsyncValue()
// XCTAssertEqual("MainActor!", value)
// }
}