levels test... not sure if its working tho

This commit is contained in:
Peter Cottle 2015-03-23 11:27:32 -07:00
parent 27ec708cc2
commit 4b5eb3d54d
4 changed files with 140 additions and 24 deletions

1
.gitignore vendored
View file

@ -10,4 +10,5 @@ FontAwesome-Vectors.pdf
index.html index.html
*.sw* *.sw*
npm-debug.log npm-debug.log
src/__tests__/casperjs/screenshots/*.png

View file

@ -1,3 +1,6 @@
var screenshotCounter = 0;
var CasperUtils = { var CasperUtils = {
getRoot: function() { getRoot: function() {
@ -47,10 +50,44 @@ var CasperUtils = {
visibleSelectors: function(selectors) { visibleSelectors: function(selectors) {
return function then() { return function then() {
selectors.forEach(function(selector) { selectors.forEach(function(selector) {
this.test.assertVisible(selector);
}.bind(this));
};
},
existingIDs: function(existingIDs) {
return function then() {
existingIDs.forEach(function(id) {
this.test.assertExists('#' + id);
}.bind(this));
};
},
existingSelectors: function(existingSelectors) {
return function then() {
existingSelectors.forEach(function(selector) {
this.test.assertExists(selector); this.test.assertExists(selector);
}.bind(this)); }.bind(this));
}; };
}, },
},
screenshot: {
entirePage: function () {
screenshotCounter++;
var documentBounds = this.evaluate(function() {
return __utils__.getElementBounds('body');
});
casper.capture('screenshots/entirePage' + screenshotCounter + '.png', {
top: 0,
left: 0,
height: documentBounds.height,
width: documentBounds.width
});
casper.echo('<<< Took screenshot ' + screenshotCounter + ' >>>', 'COMMENT');
}
}, },
waits: { waits: {
@ -64,12 +101,47 @@ var CasperUtils = {
}); });
}, },
allCommandsFinished: function () { allCommandsFinished: function() {
return this.evaluate(function() { return this.evaluate(function() {
return document.querySelectorAll('p.commandLine').length === return document.querySelectorAll('p.commandLine').length ===
document.querySelectorAll('p.finished').length; document.querySelectorAll('p.finished').length;
}); });
}, },
selectorVisible: function(selector) {
return function waitFor() {
return this.evaluate(function() {
return document.querySelectorAll(selector).length > 0;
});
};
},
idsVisible: function(ids) {
return function waitFor() {
return this.evaluate(function() {
var allVisible = true;
for (var i = 0; i < ids.length; i++) {
allVisible = allVisible && __utils__.exists('#' + ids[i]);
allVisible = allVisible && __utils__.visible('#' + ids[i]);
}
return allVisible;
});
};
},
idVisible: function(id) {
return function waitFor() {
return this.evaluate(function() {
return __utils__.visible(id);
});
};
},
commandVisible: function() {
return this.evaluate(function() {
return document.querySelectorAll('p.commandLine').length > 0;
});
}
}, },
}; };

View file

@ -0,0 +1,53 @@
var CasperUtils = require('./casperUtils').CasperUtils;
var levels = require('../../levels');
var numLevelSequences = Object.keys(levels.levelSequences).length;
var getLevelIconIDs = function(levelID) {
var level = levels.levelSequences[levelID];
var numLevels = Object.keys(level).length;
// We index at 1 for the level icons
var result = [];
for (var i = 1; i <= numLevels; i++) {
result.push('levelIcon-' + levelID + i);
}
return result;
};
var flattenArray = function(a, b) { return a.concat(b);};
var levelIconIDsForPages = function(start, end) {
return Object.keys(levels.levelSequences).slice(start, end)
.map(getLevelIconIDs)
.reduce(flattenArray);
};
casper.start(
CasperUtils.getUrlForCommands([
'levels',
]),
function() {
casper.waitFor(CasperUtils.waits.jsMount)
.waitFor(CasperUtils.waits.commandVisible)
.then(
CasperUtils.multiAssert(
CasperUtils.asserts.visibleSelectors([
'div.levelDropdownView'
]),
CasperUtils.asserts.visibleIDs(
levelIconIDsForPages(0, 5)
)
)
)
.then(CasperUtils.screenshot.entirePage)
.then(function() {
this.mouse.click('div[data-id="remote"]');
})
.then(CasperUtils.waits.idVisible('levelIcon-remote1'))
.then(CasperUtils.waits.idsVisible(
levelIconIDsForPages(5, numLevelSequences)
))
.then(CasperUtils.testDone);
}).run();

View file

@ -1,22 +1,5 @@
var CasperUtils = require('./casperUtils').CasperUtils; var CasperUtils = require('./casperUtils').CasperUtils;
var visibleIDs = [
'commandLineHistory',
'terminal',
'interfaceWrapper',
'mainVisSpace',
'commandLineBar'
];
var selectors = [
'div.visBackgroundColor',
'p.commandLine'
];
var doneSelectors = [
'p.finished'
];
casper.start( casper.start(
CasperUtils.getUrlForCommands([ CasperUtils.getUrlForCommands([
'git commit', 'git commit',
@ -24,19 +7,26 @@ casper.start(
function() { function() {
this.test.assertTitle('Learn Git Branching'); this.test.assertTitle('Learn Git Branching');
casper.waitFor( casper.waitFor(CasperUtils.waits.jsMount)
CasperUtils.waits.jsMount
)
.then(CasperUtils.multiAssert( .then(CasperUtils.multiAssert(
CasperUtils.asserts.visibleIDs(visibleIDs), CasperUtils.asserts.visibleIDs([
CasperUtils.asserts.visibleSelectors(selectors) 'commandLineHistory',
'terminal',
'interfaceWrapper',
'mainVisSpace',
'commandLineBar'
]),
CasperUtils.asserts.visibleSelectors([
'div.visBackgroundColor',
'p.commandLine'
])
)) ))
.waitFor(CasperUtils.waits.allCommandsFinished) .waitFor(CasperUtils.waits.allCommandsFinished)
.then( .then(
CasperUtils.asserts.visibleSelectors(doneSelectors) CasperUtils.asserts.visibleSelectors(['p.finished'])
) )
.then(CasperUtils.testDone); .then(CasperUtils.testDone);