split up pick integration tests to avoid cached info

This commit is contained in:
Michael "Z" Goddard
2018-10-04 11:49:56 -04:00
parent bd14d53fb2
commit 1703afbbd0

View File

@@ -7,55 +7,94 @@ const chromeless = new Chromeless();
const indexHTML = path.resolve(__dirname, 'index.html'); const indexHTML = path.resolve(__dirname, 'index.html');
const testDir = (...args) => path.resolve(__dirname, 'pick-tests', ...args); const testDir = (...args) => path.resolve(__dirname, 'pick-tests', ...args);
const runFile = (file, script) => const runFile = (file, action, script) =>
// start each test by going to the index.html, and loading the scratch file // start each test by going to the index.html, and loading the scratch file
chromeless.goto(`file://${indexHTML}`) chromeless.goto(`file://${indexHTML}`)
.setFileInput('#file', testDir(file)) .setFileInput('#file', testDir(file))
// the index.html handler for file input will add a #loaded element when it // the index.html handler for file input will add a #loaded element when it
// finishes. // finishes.
.wait('#loaded') .wait('#loaded')
.evaluate(script) .evaluate(`function () {return (${script})(${action});}`)
; ;
// immediately invoked async function to let us wait for each test to finish before starting the next. // immediately invoked async function to let us wait for each test to finish before starting the next.
(async () => { (async () => {
await test('pick tests', async t => { const testOperation = async function (name, action, expect) {
await test(name, async t => {
const results = await runFile('test-mouse-touch.sb2', () => { const results = await runFile('test-mouse-touch.sb2', action, boundAction => {
vm.greenFlag(); vm.greenFlag();
const sendResults = []; const sendResults = [];
const idToTargetName = id => { const idToTargetName = id => {
const target = vm.runtime.targets.find(tar => tar.drawableID === id); const target = vm.runtime.targets.find(tar => tar.drawableID === id);
if (!target) { if (!target) {
return `[Unknown drawableID: ${id}]`; return `[Unknown drawableID: ${id}]`;
} }
return target.sprite.name; return target.sprite.name;
}; };
const sprite = vm.runtime.targets.find(target => target.sprite.name === 'Sprite1'); const sprite = vm.runtime.targets.find(target => target.sprite.name === 'Sprite1');
sendResults.push(['center', idToTargetName(render.pick(240, 180))]); boundAction({
sendResults.push(['left', idToTargetName(render.pick(200, 180))]); sendResults,
sendResults.push(['over', render.drawableTouching(sprite.drawableID, 240, 180)]); idToTargetName,
sprite.setVisible(false); render,
sendResults.push(['hidden sprite pick center', idToTargetName(render.pick(240, 180))]); sprite
sendResults.push(['hidden over', render.drawableTouching(sprite.drawableID, 240, 180)]); });
return sendResults; return sendResults;
});
t.plan(expect.length);
for (let x = 0; x < expect.length; x++) {
t.deepEqual(results[x], expect[x], expect[x][0]);
}
t.end();
}); });
const expect = [ };
['center', 'Sprite1'],
['left', 'Stage'], const tests = [
['over', true], {
['hidden sprite pick center', 'Stage'], name: 'pick Sprite1',
['hidden over', true] action: ({sendResults, render, idToTargetName}) => {
]; sendResults.push(['center', idToTargetName(render.pick(240, 180))]);
t.plan(expect.length); },
for (let x = 0; x < expect.length; x++) { expect: [['center', 'Sprite1']]
t.deepEqual(results[x], expect[x], expect[x][0]); },
{
name: 'pick Stage',
action: ({sendResults, render, idToTargetName}) => {
sendResults.push(['left', idToTargetName(render.pick(200, 180))]);
},
expect: [['left', 'Stage']]
},
{
name: 'touching Sprite1',
action: ({sprite, sendResults, render}) => {
sendResults.push(['over', render.drawableTouching(sprite.drawableID, 240, 180)]);
},
expect: [['over', true]]
},
{
name: 'pick Stage through hidden Sprite1',
action: ({sprite, sendResults, render, idToTargetName}) => {
sprite.setVisible(false);
sendResults.push(['hidden sprite pick center', idToTargetName(render.pick(240, 180))]);
},
expect: [['hidden sprite pick center', 'Stage']]
},
{
name: 'touching hidden Sprite1',
action: ({sprite, sendResults, render}) => {
sprite.setVisible(false);
sendResults.push(['hidden over', render.drawableTouching(sprite.drawableID, 240, 180)]);
},
expect: [['hidden over', true]]
} }
t.end(); ];
}); for (const {name, action, expect} of tests) {
await testOperation(name, action, expect);
}
// close the browser window we used // close the browser window we used
await chromeless.end(); await chromeless.end();