slint/api/node/__test__/eventloop.spec.mts
Florian Blasius 39106acbdc
Added runEventLoopUntilQuit for node (#4444)
Co-authored-by: Simon Hausmann <simon.hausmann@slint.dev>
2024-01-30 05:46:46 +00:00

81 lines
No EOL
2 KiB
TypeScript

// Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// Test that the Slint event loop processes libuv's events.
import test from 'ava'
import * as http from 'http';
import fetch from "node-fetch";
import { runEventLoop, quitEventLoop, private_api } from '../index.js'
test.serial('merged event loops with timer', async (t) => {
let invoked = false;
await runEventLoop(() => {
setTimeout(() => {
invoked = true;
quitEventLoop();
}, 2);
});
t.true(invoked)
})
test.serial('merged event loops with networking', async (t) => {
const listener = (request, result) => {
result.writeHead(200);
result.end("Hello World");
};
let received_response = "";
await runEventLoop(() => {
const server = http.createServer(listener);
server.listen(async () => {
let host = "localhost";
let port = (server.address() as any).port;
console.log(`server ready at ${host}:${port}`);
(fetch as any)(`http://${host}:${port}/`).then(async (response) => {
return response.text();
}).then((text) => {
received_response = text;
//console.log("received ", text);
quitEventLoop();
server.close();
});
});
})
t.is(received_response, "Hello World");
})
test.serial('quit event loop on last window closed with callback', async (t) => {
let compiler = new private_api.ComponentCompiler;
let definition = compiler.buildFromSource(`
export component App inherits Window {
width: 300px;
height: 300px;
}`, "");
t.not(definition, null);
let instance = definition!.create() as any;
t.not(instance, null);
instance.window().show();
await runEventLoop(
() => {
setTimeout(() => {
instance.window().hide();
}, 2);
});
})