Skip to content

Commit 7f41fb4

Browse files
Gardening tests (#133)
* Update package-lock.json * Ensure that setting nested prop works * Fix example Makefile * Note that fatal error outputs are expected * npm audit fix * Add failing tests for TODO * Add utility assert function for closure crash
1 parent b19e7c8 commit 7f41fb4

File tree

5 files changed

+59
-24
lines changed

5 files changed

+59
-24
lines changed

Example/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ JavaScriptKitExample:
77

88
dist/JavaScriptKitExample.wasm: JavaScriptKitExample
99
mkdir -p dist
10-
cp ./JavaScriptKitExample/.build/debug/JavaScriptKitExample $@
10+
cp ./JavaScriptKitExample/.build/debug/JavaScriptKitExample.wasm $@
1111

1212
node_modules:
1313
npm ci

Example/package-lock.json

+12-12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

IntegrationTests/TestSuites/Sources/PrimaryTests/main.swift

+23-4
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,12 @@ try test("Function Call") {
186186
let evalClosure = JSObject.global.globalObject1.eval_closure.function!
187187

188188
try test("Closure Lifetime") {
189+
func expectCrashByCall(ofClosure c: JSClosureProtocol) throws {
190+
print("======= BEGIN OF EXPECTED FATAL ERROR =====")
191+
_ = try expectThrow(try evalClosure.throws(c))
192+
print("======= END OF EXPECTED FATAL ERROR =======")
193+
}
194+
189195
do {
190196
let c1 = JSClosure { arguments in
191197
return arguments[0]
@@ -200,7 +206,7 @@ try test("Closure Lifetime") {
200206
}
201207
c1.release()
202208
// Call a released closure
203-
_ = try expectThrow(try evalClosure.throws(c1))
209+
try expectCrashByCall(ofClosure: c1)
204210
}
205211

206212
do {
@@ -209,7 +215,7 @@ try test("Closure Lifetime") {
209215
_ = JSClosure { _ in .undefined }
210216
return .undefined
211217
}
212-
_ = try expectThrow(try evalClosure.throws(c1))
218+
try expectCrashByCall(ofClosure: c1)
213219
c1.release()
214220
}
215221

@@ -219,7 +225,7 @@ try test("Closure Lifetime") {
219225
}
220226
try expectEqual(evalClosure(c1), .boolean(true))
221227
// second call will cause `fatalError` that can be caught as a JavaScript exception
222-
_ = try expectThrow(try evalClosure.throws(c1))
228+
try expectCrashByCall(ofClosure: c1)
223229
// OneshotClosure won't call fatalError even if it's deallocated before `release`
224230
}
225231
}
@@ -617,12 +623,25 @@ try test("Error") {
617623
}
618624

619625
try test("JSValue accessor") {
620-
let globalObject1 = JSObject.global.globalObject1
626+
var globalObject1 = JSObject.global.globalObject1
621627
try expectEqual(globalObject1.prop_1.nested_prop, .number(1))
622628
try expectEqual(globalObject1.object!.prop_1.object!.nested_prop, .number(1))
623629

624630
try expectEqual(globalObject1.prop_4[0], .number(3))
625631
try expectEqual(globalObject1.prop_4[1], .number(4))
632+
633+
globalObject1.prop_1.nested_prop = "bar"
634+
try expectEqual(globalObject1.prop_1.nested_prop, .string("bar"))
635+
636+
/* TODO: Fix https://github.com/swiftwasm/JavaScriptKit/issues/132 and un-comment this test
637+
`nested` should not be set again to `target.nested` by `target.nested.prop = .number(1)`
638+
639+
let observableObj = globalObject1.observable_obj.object!
640+
observableObj.set_called = .boolean(false)
641+
observableObj.target.nested.prop = .number(1)
642+
try expectEqual(observableObj.set_called, .boolean(false))
643+
644+
*/
626645
}
627646

628647
try test("Exception") {

IntegrationTests/bin/primary-tests.js

+14-2
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,21 @@ global.globalObject1 = {
4747
throw 3.0
4848
},
4949
},
50-
eval_closure: function(fn) {
50+
eval_closure: function (fn) {
5151
return fn(arguments[1])
52-
}
52+
},
53+
observable_obj: {
54+
set_called: false,
55+
target: new Proxy({
56+
nested: {}
57+
}, {
58+
set(target, key, value) {
59+
global.globalObject1.observable_obj.set_called = true;
60+
target[key] = value;
61+
return true;
62+
}
63+
})
64+
},
5365
};
5466

5567
global.Animal = function (name, age, isCat) {

IntegrationTests/package-lock.json

+9-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)