summaryrefslogtreecommitdiffstats
path: root/toolkit/components/uniffi-bindgen-gecko-js/fixtures/tests/xpcshell/test_callbacks.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/uniffi-bindgen-gecko-js/fixtures/tests/xpcshell/test_callbacks.js')
-rw-r--r--toolkit/components/uniffi-bindgen-gecko-js/fixtures/tests/xpcshell/test_callbacks.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/toolkit/components/uniffi-bindgen-gecko-js/fixtures/tests/xpcshell/test_callbacks.js b/toolkit/components/uniffi-bindgen-gecko-js/fixtures/tests/xpcshell/test_callbacks.js
new file mode 100644
index 0000000000..ff5ef464ef
--- /dev/null
+++ b/toolkit/components/uniffi-bindgen-gecko-js/fixtures/tests/xpcshell/test_callbacks.js
@@ -0,0 +1,47 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+const { logEvenNumbers, logEvenNumbersMainThread } = ChromeUtils.import(
+ "resource://gre/modules/RustFixtureCallbacks.jsm"
+);
+
+class Logger {
+ constructor() {
+ this.messages = [];
+ this.finishedPromise = new Promise((resolve, reject) => {
+ this.finishedResolve = resolve;
+ this.finishedReject = reject;
+ });
+ }
+
+ log(message) {
+ this.messages.push(message);
+ }
+
+ finished() {
+ this.finishedResolve(true);
+ }
+
+ async waitForFinish() {
+ // Set a timeout to avoid hanging the tests if the Rust code fails to call finished().
+ do_timeout(2000, () =>
+ this.finishedReject("Timeout waiting for finished()")
+ );
+ return this.finishedPromise;
+ }
+}
+
+add_task(async function testLogEvenNumbers() {
+ async function runTest(logEvenNumbersFunc) {
+ const logger = new Logger();
+ logEvenNumbersFunc(logger, [1, 1, 2, 3, 5, 8, 13]);
+ await logger.waitForFinish();
+ Assert.deepEqual(logger.messages, [
+ "Saw even number: 2",
+ "Saw even number: 8",
+ ]);
+ }
+
+ await runTest(logEvenNumbers);
+ await runTest(logEvenNumbersMainThread);
+});