tests: Add tests for Ruffle JS API

Add some basic scaffolding for testing the JS API. Adds a test for
`RufflePlayer.load` and `RufflePlayer.metadata`.
This commit is contained in:
Mike Welsh 2021-04-21 16:33:00 -07:00
parent d34b72cc47
commit 0c5951da52
6 changed files with 86 additions and 1 deletions

View File

@ -0,0 +1,8 @@
{
"env": {
"mocha": true
},
"globals": {
"browser": true
}
}

View File

@ -0,0 +1,17 @@
const { js_api_before, play_and_monitor } = require("../polyfill/utils");
const { use } = require("chai");
const chaiHtml = require("chai-html");
use(chaiHtml);
describe("RufflePlayer.load", () => {
js_api_before();
it("loads and plays a URL", () => {
const player = browser.$("<ruffle-player>");
browser.execute((player) => {
player.load("/test_assets/example.swf");
}, player);
play_and_monitor(browser, player);
});
});

View File

@ -0,0 +1,21 @@
const { js_api_before } = require("../polyfill/utils");
const { expect, use } = require("chai");
const chaiHtml = require("chai-html");
use(chaiHtml);
describe("RufflePlayer.metadata", () => {
js_api_before("/test_assets/example.swf");
it("has metadata after load", () => {
const player = browser.$("<ruffle-player>");
const metadata = browser.execute((player) => player.metadata, player);
expect(metadata).to.eql({
width: 550,
height: 400,
frameRate: 24,
numFrames: 1,
swfVersion: 15,
});
});
});

View File

@ -112,6 +112,32 @@ function open_test(browser, absolute_dir, file_name) {
browser.url(`http://localhost:4567/test/polyfill/${dir_name}/${file_name}`);
}
/** Test set-up for basic JS API testing. */
function js_api_before(swf) {
let player = null;
before("Loads the test", () => {
browser.url("http://localhost:4567/test_assets/js_api.html");
inject_ruffle_and_wait(browser);
player = browser.execute(() => {
const ruffle = window.RufflePlayer.newest();
const player = ruffle.createPlayer();
const container = document.getElementById("test-container");
container.appendChild(player);
return player;
});
if (swf) {
browser.execute((player) => {
player.load("/test_assets/example.swf");
}, player);
play_and_monitor(browser, player);
}
});
return player;
}
module.exports = {
is_ruffle_loaded,
wait_for_ruffle,
@ -120,4 +146,5 @@ module.exports = {
inject_ruffle_and_wait,
open_test,
setup_error_handler,
js_api_before,
};

View File

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Ruffle JS API Test</title>
</head>
<body>
<div id="test-container">
</div>
</body>
</html>

View File

@ -27,7 +27,7 @@ exports.config = {
// NPM script (see https://docs.npmjs.com/cli/run-script) then the current working
// directory is where your package.json resides, so `wdio` will be called from there.
//
specs: ["./test/polyfill/**/test.js"],
specs: ["./test/polyfill/**/test.js", "./test/js_api/*.js"],
// Patterns to exclude.
exclude: [
// 'path/to/excluded/files'