2020-05-23 09:43:22 +00:00
|
|
|
const path = require("path");
|
|
|
|
|
|
|
|
function is_ruffle_loaded(browser) {
|
|
|
|
return browser.execute(
|
|
|
|
() =>
|
|
|
|
window !== undefined &&
|
|
|
|
window.RufflePlayer !== undefined &&
|
|
|
|
window.RufflePlayer.invoked
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
function wait_for_ruffle(browser) {
|
|
|
|
browser.waitUntil(() => is_ruffle_loaded(browser), {
|
|
|
|
timeoutMsg: "Expected Ruffle to load",
|
|
|
|
});
|
2020-09-14 17:10:35 +00:00
|
|
|
throw_if_error(browser);
|
|
|
|
}
|
|
|
|
|
|
|
|
function setup_error_handler(browser) {
|
|
|
|
browser.execute(() => {
|
|
|
|
window.ruffleErrors = [];
|
|
|
|
window.addEventListener("error", (error) => {
|
|
|
|
window.ruffleErrors.push(error);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function has_error(browser) {
|
|
|
|
return browser.execute(
|
|
|
|
() => window.ruffleErrors && window.ruffleErrors.length > 0
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
function throw_if_error(browser) {
|
|
|
|
return browser.execute(() => {
|
|
|
|
if (window.ruffleErrors && window.ruffleErrors.length > 0) {
|
|
|
|
throw window.ruffleErrors[0];
|
|
|
|
}
|
|
|
|
});
|
2020-05-23 09:43:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function inject_ruffle(browser) {
|
2020-09-14 17:10:35 +00:00
|
|
|
setup_error_handler(browser);
|
2020-05-23 09:43:22 +00:00
|
|
|
browser.execute(() => {
|
|
|
|
const script = document.createElement("script");
|
|
|
|
script.type = "text/javascript";
|
|
|
|
script.src = "/dist/ruffle.js";
|
|
|
|
document.head.appendChild(script);
|
|
|
|
});
|
2020-09-14 17:10:35 +00:00
|
|
|
throw_if_error(browser);
|
2020-05-23 09:43:22 +00:00
|
|
|
}
|
|
|
|
|
2020-10-11 18:44:25 +00:00
|
|
|
function play_and_monitor(browser, player, expected_output) {
|
2020-09-14 17:10:35 +00:00
|
|
|
throw_if_error(browser);
|
|
|
|
|
2020-09-05 23:39:17 +00:00
|
|
|
// TODO: better way to test for this in the API
|
|
|
|
browser.waitUntil(
|
|
|
|
() => {
|
2020-09-14 17:10:35 +00:00
|
|
|
return (
|
|
|
|
has_error(browser) ||
|
|
|
|
browser.execute((player) => {
|
|
|
|
return (
|
2020-11-16 21:43:28 +00:00
|
|
|
player.playButtonClicked !== undefined &&
|
2020-09-14 17:10:35 +00:00
|
|
|
player.instance
|
|
|
|
);
|
|
|
|
}, player)
|
|
|
|
);
|
2020-09-05 23:39:17 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
timeoutMsg: "Expected player to have initialized",
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
browser.execute((player) => {
|
|
|
|
player.__ruffle_log__ = "";
|
2020-11-16 21:52:26 +00:00
|
|
|
player.traceObserver = (msg) => {
|
2020-09-05 23:39:17 +00:00
|
|
|
player.__ruffle_log__ += msg + "\n";
|
|
|
|
};
|
|
|
|
|
|
|
|
// TODO: make this an actual intended api...
|
2020-11-16 21:43:28 +00:00
|
|
|
player.playButtonClicked();
|
2020-09-05 23:39:17 +00:00
|
|
|
}, player);
|
|
|
|
|
2020-10-11 18:44:25 +00:00
|
|
|
if (expected_output === undefined) {
|
|
|
|
expected_output = "Hello from Flash!\n";
|
|
|
|
}
|
|
|
|
|
2020-09-05 23:39:17 +00:00
|
|
|
browser.waitUntil(
|
|
|
|
() => {
|
|
|
|
return (
|
|
|
|
browser.execute((player) => {
|
|
|
|
return player.__ruffle_log__;
|
2020-10-11 18:44:25 +00:00
|
|
|
}, player) === expected_output
|
2020-09-05 23:39:17 +00:00
|
|
|
);
|
|
|
|
},
|
|
|
|
{
|
|
|
|
timeoutMsg: "Expected Ruffle to trace a message",
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2020-05-23 09:43:22 +00:00
|
|
|
function inject_ruffle_and_wait(browser) {
|
|
|
|
inject_ruffle(browser);
|
|
|
|
wait_for_ruffle(browser);
|
|
|
|
}
|
|
|
|
|
|
|
|
function open_test(browser, absolute_dir, file_name) {
|
|
|
|
const dir_name = path.basename(absolute_dir);
|
|
|
|
if (file_name === undefined) {
|
|
|
|
file_name = "index.html";
|
|
|
|
}
|
|
|
|
browser.url(`http://localhost:4567/test/polyfill/${dir_name}/${file_name}`);
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
is_ruffle_loaded,
|
|
|
|
wait_for_ruffle,
|
2020-09-05 23:39:17 +00:00
|
|
|
play_and_monitor,
|
2020-05-23 09:43:22 +00:00
|
|
|
inject_ruffle,
|
|
|
|
inject_ruffle_and_wait,
|
|
|
|
open_test,
|
2020-11-27 23:04:56 +00:00
|
|
|
setup_error_handler,
|
2020-05-23 09:43:22 +00:00
|
|
|
};
|