Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit b52151c

Browse filesBrowse files
BridgeJS: Add runtime tests for importing TypeScript classes
1 parent 304ee67 commit b52151c
Copy full SHA for b52151c

7 files changed

+120-2Lines changed: 120 additions & 2 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎Plugins/PackageToJS/Templates/bin/test.js‎

Copy file name to clipboardExpand all lines: Plugins/PackageToJS/Templates/bin/test.js
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ const harnesses = {
6565
if (preludeScript) {
6666
const prelude = await import(preludeScript)
6767
if (prelude.setupOptions) {
68-
options = prelude.setupOptions(options, { isMainThread: true })
68+
options = await prelude.setupOptions(options, { isMainThread: true })
6969
}
7070
}
7171
process.on("beforeExit", () => {
Collapse file

‎Plugins/PackageToJS/Templates/platforms/node.js‎

Copy file name to clipboardExpand all lines: Plugins/PackageToJS/Templates/platforms/node.js
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export function createDefaultWorkerFactory(preludeScript) {
5959
if (preludeScript) {
6060
const prelude = await import(preludeScript);
6161
if (prelude.setupOptions) {
62-
options = prelude.setupOptions(options, { isMainThread: false })
62+
options = await prelude.setupOptions(options, { isMainThread: false })
6363
}
6464
}
6565
await instantiateForThread(tid, startArg, {
Collapse file

‎Tests/BridgeJSRuntimeTests/Generated/ImportTS.swift‎

Copy file name to clipboardExpand all lines: Tests/BridgeJSRuntimeTests/Generated/ImportTS.swift
+44Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,48 @@ func jsRoundTripString(_ v: String) -> String {
4747
_init_memory_with_result(b.baseAddress.unsafelyUnwrapped, Int32(ret))
4848
return Int(ret)
4949
}
50+
}
51+
52+
struct JsGreeter {
53+
let this: JSObject
54+
55+
init(this: JSObject) {
56+
self.this = this
57+
}
58+
59+
init(takingThis this: Int32) {
60+
self.this = JSObject(id: UInt32(bitPattern: this))
61+
}
62+
63+
init(_ name: String) {
64+
@_extern(wasm, module: "BridgeJSRuntimeTests", name: "bjs_JsGreeter_init")
65+
func bjs_JsGreeter_init(_ name: Int32) -> Int32
66+
var name = name
67+
let nameId = name.withUTF8 { b in
68+
_make_jsstring(b.baseAddress.unsafelyUnwrapped, Int32(b.count))
69+
}
70+
let ret = bjs_JsGreeter_init(nameId)
71+
self.this = JSObject(id: UInt32(bitPattern: ret))
72+
}
73+
74+
func greet() -> String {
75+
@_extern(wasm, module: "BridgeJSRuntimeTests", name: "bjs_JsGreeter_greet")
76+
func bjs_JsGreeter_greet(_ self: Int32) -> Int32
77+
let ret = bjs_JsGreeter_greet(Int32(bitPattern: self.this.id))
78+
return String(unsafeUninitializedCapacity: Int(ret)) { b in
79+
_init_memory_with_result(b.baseAddress.unsafelyUnwrapped, Int32(ret))
80+
return Int(ret)
81+
}
82+
}
83+
84+
func changeName(_ name: String) -> Void {
85+
@_extern(wasm, module: "BridgeJSRuntimeTests", name: "bjs_JsGreeter_changeName")
86+
func bjs_JsGreeter_changeName(_ self: Int32, _ name: Int32) -> Void
87+
var name = name
88+
let nameId = name.withUTF8 { b in
89+
_make_jsstring(b.baseAddress.unsafelyUnwrapped, Int32(b.count))
90+
}
91+
bjs_JsGreeter_changeName(Int32(bitPattern: self.this.id), nameId)
92+
}
93+
5094
}
Collapse file

‎Tests/BridgeJSRuntimeTests/Generated/JavaScript/ImportTS.json‎

Copy file name to clipboardExpand all lines: Tests/BridgeJSRuntimeTests/Generated/JavaScript/ImportTS.json
+48Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,55 @@
6969
}
7070
],
7171
"types" : [
72+
{
73+
"constructor" : {
74+
"parameters" : [
75+
{
76+
"name" : "name",
77+
"type" : {
78+
"string" : {
79+
80+
}
81+
}
82+
}
83+
]
84+
},
85+
"methods" : [
86+
{
87+
"name" : "greet",
88+
"parameters" : [
7289

90+
],
91+
"returnType" : {
92+
"string" : {
93+
94+
}
95+
}
96+
},
97+
{
98+
"name" : "changeName",
99+
"parameters" : [
100+
{
101+
"name" : "name",
102+
"type" : {
103+
"string" : {
104+
105+
}
106+
}
107+
}
108+
],
109+
"returnType" : {
110+
"void" : {
111+
112+
}
113+
}
114+
}
115+
],
116+
"name" : "JsGreeter",
117+
"properties" : [
118+
119+
]
120+
}
73121
]
74122
}
75123
],
Collapse file

‎Tests/BridgeJSRuntimeTests/ImportAPITests.swift‎

Copy file name to clipboardExpand all lines: Tests/BridgeJSRuntimeTests/ImportAPITests.swift
+7Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,11 @@ class ImportAPITests: XCTestCase {
3434
XCTAssertEqual(jsRoundTripString(v), v)
3535
}
3636
}
37+
38+
func testClass() {
39+
let greeter = JsGreeter("Alice")
40+
XCTAssertEqual(greeter.greet(), "Hello, Alice!")
41+
greeter.changeName("Bob")
42+
XCTAssertEqual(greeter.greet(), "Hello, Bob!")
43+
}
3744
}
Collapse file

‎Tests/BridgeJSRuntimeTests/bridge-js.d.ts‎

Copy file name to clipboardExpand all lines: Tests/BridgeJSRuntimeTests/bridge-js.d.ts
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,9 @@ export function jsRoundTripVoid(): void
22
export function jsRoundTripNumber(v: number): number
33
export function jsRoundTripBool(v: boolean): boolean
44
export function jsRoundTripString(v: string): string
5+
6+
export class JsGreeter {
7+
constructor(name: string);
8+
greet(): string;
9+
changeName(name: string): void;
10+
}
Collapse file

‎Tests/prelude.mjs‎

Copy file name to clipboardExpand all lines: Tests/prelude.mjs
+13Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,19 @@ export async function setupOptions(options, context) {
1919
"jsRoundTripString": (v) => {
2020
return v;
2121
},
22+
JsGreeter: class {
23+
/** @param {string} name */
24+
constructor(name) {
25+
this.name = name;
26+
}
27+
greet() {
28+
return `Hello, ${this.name}!`;
29+
}
30+
/** @param {string} name */
31+
changeName(name) {
32+
this.name = name;
33+
}
34+
}
2235
},
2336
addToCoreImports(importObject, importsContext) {
2437
const { getInstance, getExports } = importsContext;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.