From 1703afbbd0c42293b0df2a43f0a4117f1ca1ab9e Mon Sep 17 00:00:00 2001 From: "Michael \"Z\" Goddard" Date: Thu, 4 Oct 2018 11:49:56 -0400 Subject: [PATCH] split up pick integration tests to avoid cached info --- test/integration/pick-tests.js | 105 ++++++++++++++++++++++----------- 1 file changed, 72 insertions(+), 33 deletions(-) diff --git a/test/integration/pick-tests.js b/test/integration/pick-tests.js index 97890ac..a76f0ff 100644 --- a/test/integration/pick-tests.js +++ b/test/integration/pick-tests.js @@ -7,55 +7,94 @@ const chromeless = new Chromeless(); const indexHTML = path.resolve(__dirname, 'index.html'); 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 chromeless.goto(`file://${indexHTML}`) .setFileInput('#file', testDir(file)) // the index.html handler for file input will add a #loaded element when it // finishes. .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. (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', () => { - vm.greenFlag(); - const sendResults = []; + const results = await runFile('test-mouse-touch.sb2', action, boundAction => { + vm.greenFlag(); + const sendResults = []; - const idToTargetName = id => { - const target = vm.runtime.targets.find(tar => tar.drawableID === id); - if (!target) { - return `[Unknown drawableID: ${id}]`; - } - return target.sprite.name; - }; - const sprite = vm.runtime.targets.find(target => target.sprite.name === 'Sprite1'); + const idToTargetName = id => { + const target = vm.runtime.targets.find(tar => tar.drawableID === id); + if (!target) { + return `[Unknown drawableID: ${id}]`; + } + return target.sprite.name; + }; + const sprite = vm.runtime.targets.find(target => target.sprite.name === 'Sprite1'); - sendResults.push(['center', idToTargetName(render.pick(240, 180))]); - sendResults.push(['left', idToTargetName(render.pick(200, 180))]); - sendResults.push(['over', render.drawableTouching(sprite.drawableID, 240, 180)]); - sprite.setVisible(false); - sendResults.push(['hidden sprite pick center', idToTargetName(render.pick(240, 180))]); - sendResults.push(['hidden over', render.drawableTouching(sprite.drawableID, 240, 180)]); - return sendResults; + boundAction({ + sendResults, + idToTargetName, + render, + sprite + }); + 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'], - ['over', true], - ['hidden sprite pick center', 'Stage'], - ['hidden over', true] - ]; - t.plan(expect.length); - for (let x = 0; x < expect.length; x++) { - t.deepEqual(results[x], expect[x], expect[x][0]); + }; + + const tests = [ + { + name: 'pick Sprite1', + action: ({sendResults, render, idToTargetName}) => { + sendResults.push(['center', idToTargetName(render.pick(240, 180))]); + }, + expect: [['center', 'Sprite1']] + }, + { + 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 await chromeless.end();