split up pick integration tests to avoid cached info
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user