ruffle/web/packages/selfhosted/test/utils.js

141 lines
3.7 KiB
JavaScript
Raw Normal View History

2020-05-23 09:43:22 +00:00
const path = require("path");
2023-05-30 20:24:43 +00:00
async function isRuffleLoaded(browser) {
return await browser.execute(
2020-05-23 09:43:22 +00:00
() =>
window !== undefined &&
window.RufflePlayer !== undefined &&
2023-07-20 11:19:39 +00:00
window.RufflePlayer.invoked,
2020-05-23 09:43:22 +00:00
);
}
2023-05-30 20:24:43 +00:00
async function waitForRuffle(browser) {
await browser.waitUntil(async () => await isRuffleLoaded(browser), {
2020-05-23 09:43:22 +00:00
timeoutMsg: "Expected Ruffle to load",
});
2023-05-30 20:24:43 +00:00
await throwIfError(browser);
2020-09-14 17:10:35 +00:00
}
2023-05-30 20:24:43 +00:00
async function setupErrorHandler(browser) {
await browser.execute(() => {
2020-09-14 17:10:35 +00:00
window.ruffleErrors = [];
window.addEventListener("error", (error) => {
window.ruffleErrors.push(error);
});
});
}
2023-05-30 20:24:43 +00:00
async function hasError(browser) {
return await browser.execute(
2023-07-20 11:19:39 +00:00
() => window.ruffleErrors && window.ruffleErrors.length > 0,
2020-09-14 17:10:35 +00:00
);
}
2023-05-30 20:24:43 +00:00
async function throwIfError(browser) {
return await browser.execute(() => {
2020-09-14 17:10:35 +00:00
if (window.ruffleErrors && window.ruffleErrors.length > 0) {
throw window.ruffleErrors[0];
}
});
2020-05-23 09:43:22 +00:00
}
2023-05-30 20:24:43 +00:00
async function injectRuffle(browser) {
await setupErrorHandler(browser);
await browser.execute(() => {
2020-05-23 09:43:22 +00:00
const script = document.createElement("script");
script.type = "text/javascript";
script.src = "/dist/ruffle.js";
document.head.appendChild(script);
});
2023-05-30 20:24:43 +00:00
await throwIfError(browser);
2020-05-23 09:43:22 +00:00
}
2023-05-30 20:24:43 +00:00
async function playAndMonitor(browser, player, expectedOutput) {
await throwIfError(browser);
2020-09-14 17:10:35 +00:00
// TODO: better way to test for this in the API
await browser.waitUntil(
async () =>
2023-05-30 20:24:43 +00:00
(await hasError(browser)) ||
(await browser.execute((player) => player.instance, player)),
{
timeoutMsg: "Expected player to have initialized",
2023-07-20 11:19:39 +00:00
},
);
await browser.execute((player) => {
player.__ruffle_log__ = "";
player.traceObserver = (msg) => {
player.__ruffle_log__ += msg + "\n";
};
player.play();
}, player);
2023-05-30 20:24:43 +00:00
if (expectedOutput === undefined) {
expectedOutput = "Hello from Flash!\n";
2020-10-11 18:44:25 +00:00
}
await browser.waitUntil(
async () =>
(await browser.execute(
(player) => player.__ruffle_log__,
2023-07-20 11:19:39 +00:00
player,
2023-05-30 20:24:43 +00:00
)) === expectedOutput,
{
timeoutMsg: "Expected Ruffle to trace a message",
2023-07-20 11:19:39 +00:00
},
);
}
2023-05-30 20:24:43 +00:00
async function injectRuffleAndWait(browser) {
await injectRuffle(browser);
await waitForRuffle(browser);
2020-05-23 09:43:22 +00:00
}
2023-05-30 20:24:43 +00:00
async function openTest(browser, absoluteDir, filename) {
const dirname = path.basename(absoluteDir);
if (filename === undefined) {
filename = "index.html";
2020-05-23 09:43:22 +00:00
}
await browser.url(
2023-07-20 11:19:39 +00:00
`http://localhost:4567/test/polyfill/${dirname}/${filename}`,
);
2020-05-23 09:43:22 +00:00
}
/** Test set-up for JS API testing. */
2023-05-30 20:24:43 +00:00
function jsApiBefore(swf) {
let player = null;
before("Loads the test", async () => {
await browser.url("http://localhost:4567/test_assets/js_api.html");
2023-05-30 20:24:43 +00:00
await injectRuffleAndWait(browser);
player = await browser.execute(() => {
const ruffle = window.RufflePlayer.newest();
const player = ruffle.createPlayer();
const container = document.getElementById("test-container");
container.appendChild(player);
return player;
});
if (swf) {
await browser.execute((player) => {
player.load("/test_assets/example.swf");
}, player);
2023-05-30 20:24:43 +00:00
await playAndMonitor(browser, player);
}
});
}
2020-05-23 09:43:22 +00:00
module.exports = {
2023-05-30 20:24:43 +00:00
isRuffleLoaded,
waitForRuffle,
playAndMonitor,
injectRuffle,
injectRuffleAndWait,
openTest,
setupErrorHandler,
jsApiBefore,
2020-05-23 09:43:22 +00:00
};