334 lines
16 KiB
JavaScript
Executable File
334 lines
16 KiB
JavaScript
Executable File
/*eslint strict:0*/
|
|
casper.test.begin('wait() tests', 1, function(test) {
|
|
var waitStart;
|
|
|
|
casper.start('tests/site/index.html', function() {
|
|
waitStart = new Date().getTime();
|
|
});
|
|
|
|
casper.wait(250, function() {
|
|
test.assert(new Date().getTime() - waitStart > 250,
|
|
'Casper.wait() can wait for a given amount of time');
|
|
});
|
|
|
|
casper.run(function() {
|
|
test.done();
|
|
});
|
|
});
|
|
|
|
casper.test.begin('waitFor() tests', 4, function(test) {
|
|
casper.start('tests/site/waitFor.html');
|
|
|
|
casper.waitFor(function() {
|
|
return this.evaluate(function() {
|
|
return document.querySelectorAll('li').length === 4;
|
|
});
|
|
}, function() {
|
|
test.pass('Casper.waitFor() can wait for something to happen');
|
|
}, function() {
|
|
test.fail('Casper.waitFor() can wait for something to happen');
|
|
});
|
|
|
|
casper.reload().waitFor(function(){
|
|
return false;
|
|
}, function() {
|
|
test.fail('waitFor() processes onTimeout callback');
|
|
}, function() {
|
|
test.pass('waitFor() processes onTimeout callback');
|
|
}, 1000);
|
|
|
|
casper.reload().waitFor(function(){
|
|
return true;
|
|
}, function() {
|
|
test.pass('waitFor() can run test function when timeout is set to 1');
|
|
}, function() {
|
|
test.fail('waitFor() can not run test function when timeout is set to 1');
|
|
}, 1);
|
|
|
|
var testArray = [false,true];
|
|
var i = 0;
|
|
casper.reload().waitFor(function(){
|
|
return testArray[i++];
|
|
}, function() {
|
|
test.pass('waitFor() can run a last test function after timeout');
|
|
}, function() {
|
|
test.fail('waitFor() can not run a last test function after timeout');
|
|
}, (1.5*casper.options.retryTimeout));
|
|
|
|
casper.run(function() {
|
|
test.done();
|
|
});
|
|
});
|
|
|
|
casper.test.begin('waitForResource() tests', 2, function(test) {
|
|
casper.start('tests/site/waitFor.html');
|
|
|
|
casper.waitForResource('phantom.png', function() {
|
|
test.pass('Casper.waitForResource() waits for a resource');
|
|
}, function() {
|
|
test.fail('Casper.waitForResource() waits for a resource');
|
|
});
|
|
|
|
casper.reload().waitForResource(/phantom\.png$/, function() {
|
|
test.pass('Casper.waitForResource() waits for a resource using RegExp');
|
|
}, function() {
|
|
test.fail('Casper.waitForResource() waits for a resource using RegExp');
|
|
});
|
|
|
|
casper.run(function() {
|
|
test.done();
|
|
});
|
|
});
|
|
|
|
casper.test.begin('waitForSelector() tests', 1, function(test) {
|
|
casper.start('tests/site/waitFor.html');
|
|
|
|
casper.waitForSelector('li:nth-child(4)', function() {
|
|
test.pass('Casper.waitForSelector() waits for a selector to exist');
|
|
}, function() {
|
|
test.fail('Casper.waitForSelector() waits for a selector to exist');
|
|
});
|
|
|
|
casper.run(function() {
|
|
test.done();
|
|
});
|
|
});
|
|
|
|
casper.test.begin('waitForText() tests', 3, function(test) {
|
|
casper.start('tests/site/waitFor.html');
|
|
|
|
casper.waitForText('<li>four</li>', function() {
|
|
test.pass('Casper.waitForText() can wait for text');
|
|
}, function() {
|
|
test.fail('Casper.waitForText() can wait for text');
|
|
});
|
|
|
|
casper.reload().waitForText(/four/i, function() {
|
|
test.pass('Casper.waitForText() can wait for regexp');
|
|
}, function() {
|
|
test.fail('Casper.waitForText() can wait for regexp');
|
|
});
|
|
|
|
casper.reload().waitForText('Voilà', function() {
|
|
test.pass('Casper.waitForText() can wait for decoded HTML text');
|
|
}, function() {
|
|
test.fail('Casper.waitForText() can wait for decoded HTML text');
|
|
}, 1000);
|
|
|
|
casper.run(function() {
|
|
test.done();
|
|
});
|
|
});
|
|
|
|
casper.test.begin('waitForSelectorTextChange() tests', 1, function(test) {
|
|
casper.start('tests/site/waitFor.html');
|
|
|
|
casper.waitForSelectorTextChange('#textChange', function() {
|
|
test.pass('Casper.waitForSelectorTextChange() can wait for text on a selector to change');
|
|
}, function() {
|
|
test.fail('Casper.waitForSelectorTextChange() can wait for text on a selector to change');
|
|
});
|
|
|
|
casper.run(function() {
|
|
test.done();
|
|
});
|
|
});
|
|
|
|
casper.test.begin('waitUntilVisible() tests', 2, function(test) {
|
|
casper.start('tests/site/waitFor.html');
|
|
|
|
casper.waitUntilVisible('li:nth-child(4)', function() {
|
|
test.pass('Casper.waitUntilVisible() waits for a selector being visible');
|
|
}, function() {
|
|
test.fail('Casper.waitUntilVisible() waits for a selector being visible');
|
|
});
|
|
|
|
casper.waitUntilVisible('p', function() {
|
|
test.pass('Casper.waitUntilVisible() waits for a selector being visible');
|
|
}, function() {
|
|
test.fail('Casper.waitUntilVisible() waits for a selector being visible');
|
|
});
|
|
|
|
casper.run(function() {
|
|
test.done();
|
|
});
|
|
});
|
|
|
|
casper.test.begin('waitForUrl() regexp tests', 1, function(test) {
|
|
casper.start().thenEvaluate(function() {
|
|
setTimeout(function() {
|
|
document.location = './form.html';
|
|
}, 100);
|
|
});
|
|
|
|
casper.waitForUrl(/form\.html$/, function() {
|
|
test.pass('Casper.waitForUrl() waits for a given regexp url');
|
|
});
|
|
|
|
casper.run(function() {
|
|
test.done();
|
|
});
|
|
});
|
|
|
|
casper.test.begin('waitForUrl() string tests', 1, function(test) {
|
|
casper.start().thenEvaluate(function() {
|
|
setTimeout(function() {
|
|
document.location = './form.html';
|
|
}, 100);
|
|
});
|
|
|
|
casper.waitForUrl('form.html', function() {
|
|
test.pass('Casper.waitForUrl() waits for a given string url');
|
|
});
|
|
|
|
casper.run(function() {
|
|
test.done();
|
|
});
|
|
});
|
|
|
|
casper.test.begin('waitForExec() tests', 24, function(test) {
|
|
if (phantom.casperEngine === 'slimerjs') {
|
|
test.skip(24, 'SlimerJS DOES NOT HAVE A child_process MODULE');
|
|
} else {
|
|
var system = require('system');
|
|
var fs = require('fs');
|
|
var lsExecutable;
|
|
var shExecutable;
|
|
if (system.os.name != "windows") {
|
|
// Seems to be crashing here in slimerJs 0.10.x, added fs.exists before fs.isExecutable for testing
|
|
lsExecutable = system.env.PATH.split(':').filter(function (path) {
|
|
var fileString = path + fs.separator + 'ls';
|
|
return (fs.exists(fileString) && fs.isExecutable(fileString));
|
|
})[0] + fs.separator + 'ls';
|
|
shExecutable = system.env.PATH.split(':').filter(function (path) {
|
|
var fileString = path + fs.separator + 'sh';
|
|
return (fs.exists(fileString) && fs.isExecutable(fileString));
|
|
})[0] + fs.separator + 'sh';
|
|
};
|
|
var notExecutable = '';
|
|
var k = 0;
|
|
while (!notExecutable) {
|
|
notExecutable = (!fs.exists(fs.workingDirectory + fs.separator + 'run' + k + '.exe')) ? fs.workingDirectory + fs.separator + 'run' + k + '.exe' : '';
|
|
k++;
|
|
};
|
|
|
|
casper.start('');
|
|
|
|
casper.waitForExec(null, [],
|
|
// Add success1 because on some systems the default system shell maybe exits by itself after being called(?)
|
|
null,
|
|
/*
|
|
function success1(details) {
|
|
test.assert((utils.isObject(details.data.command) && utils.isString(details.data.command.program) && utils.isArray(details.data.command.parameters)), 'Casper.waitForExec() can call the default system shell and it exits before timeout: "' + JSON.stringify(details.data.command) + '"');
|
|
test.assertEquals(details.data.isChildNotFinished, 0,'Default system shell returned "isChildNotFinished" 0 before timeout');
|
|
test.assert(utils.isNumber(details.data.exitCode), 'Default system shell "' + JSON.stringify(details.data.command) + '" exited before timeout with exit code ' + details.data.exitCode);
|
|
|
|
},
|
|
*/
|
|
function timeout1(timeout, details) {
|
|
// exit code value seems to be 0 when phantom kills the process before 2.1.1(?)
|
|
var valueOfExitCode = (utils.matchEngine({name: 'phantomjs', version: {min: '1.9.0', max: '2.1.0'}})) ? 0 : 15;
|
|
test.assert((utils.isString(details.data.command) && utils.isArray(details.data.parameters)), 'Casper.waitForExec() can call the default system shell and kills it on timeout: ' + JSON.stringify(details.data));
|
|
test.assert( (utils.isNumber(details.data.pid) && ( details.data.pid > 0) ), 'Default system shell exited on timeout (TERM signal) and used PID ' + details.data.pid);
|
|
test.assertEquals(details.data.isChildNotFinished, 0,'Default system shell returned "isChildNotFinished" 0 on timeout');
|
|
test.assertEquals(details.data.exitCode, valueOfExitCode, 'Default system shell exited on timeout (TERM signal) with exit code ' + details.data.exitCode);
|
|
|
|
}, 2000);
|
|
|
|
casper.reload().waitForExec(notExecutable, [],
|
|
function success2(details) {
|
|
test.assert((utils.isString(details.data.command) && utils.isArray(details.data.parameters)), 'Casper.waitForExec() tried to call non existing executable: ' + JSON.stringify(details.data));
|
|
test.assertEquals(details.data.pid, 0,'Non existing executable returned "pid" 0');
|
|
test.assertEquals(details.data.isChildNotFinished, 0,'Non existing executable returned "isChildNotFinished" 0');
|
|
test.assertEquals(details.data.exitCode, null, 'Non existing executable returned exitCode null');
|
|
test.assertEquals(details.data.elapsedTime, null, 'Non existing executable returned elapsedTime null');
|
|
});
|
|
|
|
if (system.os.name != "windows") {
|
|
if (lsExecutable) {
|
|
|
|
casper.reload().waitForExec(lsExecutable, ['-a',fs.workingDirectory],
|
|
function success3(details) {
|
|
test.assert((utils.isString(details.data.command) && utils.isArray(details.data.parameters)), 'Casper.waitForExec() can call "lsExecutable" on "workingDirectory": ' + JSON.stringify(details.data));
|
|
test.assert( (utils.isNumber(details.data.pid) && ( details.data.pid > 0) ), '"lsExecutable" on "workingDirectory" used PID ' + details.data.pid);
|
|
test.assertEquals(details.data.isChildNotFinished, 0,'"lsExecutable" on "workingDirectory" returned "isChildNotFinished" 0');
|
|
test.assertEquals(details.data.exitCode, 0, '"lsExecutable" on "workingDirectory" returned exitCode 0');
|
|
test.assertTruthy(details.data.stdout, '"lsExecutable" on "workingDirectory" returned stdout ' + JSON.stringify(details.data.stdout));
|
|
});
|
|
|
|
casper.reload().waitForExec(lsExecutable, [notExecutable],
|
|
function success4(details) {
|
|
test.assert((utils.isString(details.data.command) && utils.isArray(details.data.parameters)), 'Casper.waitForExec() can call "lsExecutable" on "notExecutable": ' + JSON.stringify(details.data));
|
|
test.assert( (utils.isNumber(details.data.pid) && ( details.data.pid > 0) ), '"lsExecutable" on "notExecutable" used PID ' + details.data.pid);
|
|
test.assertEquals(details.data.isChildNotFinished, 0,'"lsExecutable" on "notExecutable" returned "isChildNotFinished" 0');
|
|
test.assertTruthy(details.data.exitCode, '"lsExecutable" on "notExecutable" returned exitCode ' + details.data.exitCode);
|
|
test.assertTruthy(details.data.stderr, '"lsExecutable" on "notExecutable" returned stderr ' + JSON.stringify(details.data.stderr));
|
|
});
|
|
|
|
} else {
|
|
casper.reload().then( function() {
|
|
test.skip(10, 'ls EXECUTABLE NOT FOUND');
|
|
});
|
|
};
|
|
|
|
if (shExecutable) {
|
|
// vars used to measure if 'shell script to trap TERM signal' is waiting enough and being killed faster enough
|
|
var shellTrapTimeout = 500;
|
|
var shellTrapTermTimeout = 1000;
|
|
var timeLapseAfterKillSignal = 300;
|
|
var minTimeLapse = shellTrapTimeout + shellTrapTermTimeout;
|
|
var maxTimeLapse = minTimeLapse + timeLapseAfterKillSignal;
|
|
casper.then( function() { // inside then for elapsedTime don't be added with other tests elapsedTime
|
|
// on my tests 'TERM trapped!' will not be on stdout because 'shExecutable' is killed with SIGKILL
|
|
casper.reload().waitForExec(shExecutable + ' -c', ['trap "echo TERM trapped!" TERM ; sleep 60'], null,
|
|
function timeout5(timeout,details) {
|
|
// exit code value seems to be 0 when phantom kills the process before 2.1.1(?)
|
|
var valueOfExitCode = (utils.matchEngine({name: 'phantomjs', version: {min: '1.9.0', max: '2.1.0'}})) ? 0 : 9;
|
|
test.assert((utils.isString(details.data.command) && utils.isArray(details.data.parameters)), 'Casper.waitForExec() can call shell script to trap TERM signal and then kills it: ' + JSON.stringify(details.data));
|
|
test.assert( (utils.isNumber(details.data.pid) && ( details.data.pid > 0) ), 'shell script to trap TERM signal used PID ' + details.data.pid);
|
|
test.assertEquals(details.data.isChildNotFinished, 0, 'shell script to trap TERM signal returned "isChildNotFinished" 0');
|
|
test.assertEquals(details.data.exitCode, valueOfExitCode, 'shell script to trap TERM signal returned exitCode ' + details.data.exitCode);
|
|
// test if it first waited for shellTrapTimeout ms, then waited for shellTrapTermTimeout ms after TERM signal, then exited faster (timeLapseAfterKillSignal ms or less) with KILL signal
|
|
test.assert( (utils.isNumber(details.data.elapsedTime) && (details.data.elapsedTime <= maxTimeLapse) && (details.data.elapsedTime > minTimeLapse) ), 'shell script to trap TERM signal run and killed in more than ' + minTimeLapse + 'ms and in less than or equal to ' + maxTimeLapse + 'ms: ' + details.data.elapsedTime);
|
|
}, [shellTrapTimeout, shellTrapTermTimeout]);
|
|
});
|
|
|
|
} else {
|
|
casper.reload().then( function() {
|
|
test.skip(5, 'sh EXECUTABLE NOT FOUND');
|
|
});
|
|
};
|
|
|
|
} else {
|
|
|
|
casper.reload().waitForExec(null, ['/c', 'dir', fs.workingDirectory],
|
|
function(details) {
|
|
test.assert((utils.isString(details.data.command) && utils.isArray(details.data.parameters)), 'Casper.waitForExec() can call dir on "workingDirectory": ' + JSON.stringify(details.data));
|
|
test.assert( (utils.isNumber(details.data.pid) && ( details.data.pid > 0) ), 'dir on "workingDirectory" used PID ' + details.data.pid);
|
|
test.assertEquals(details.data.isChildNotFinished, 0,'dir on "workingDirectory" returned "isChildNotFinished" 0');
|
|
test.assertEquals(details.data.exitCode, 0, 'dir on "workingDirectory" returned exitCode 0');
|
|
test.assertTruthy(details.data.stdout, 'dir on "workingDirectory" returned stdout ' + JSON.stringify(details.data.stdout));
|
|
});
|
|
|
|
casper.reload().waitForExec(null, ['/c', 'dir', notExecutable],
|
|
function(details) {
|
|
test.assert((utils.isString(details.data.command) && utils.isArray(details.data.parameters)), 'Casper.waitForExec() can dir on "notExecutable": ' + JSON.stringify(details.data));
|
|
test.assert( (utils.isNumber(details.data.pid) && ( details.data.pid > 0) ), 'dir on "notExecutable" used PID ' + details.data.pid);
|
|
test.assertEquals(details.data.isChildNotFinished, 0, 'dir on "notExecutable" returned "isChildNotFinished" 0');
|
|
test.assertTruthy(details.data.exitCode, 'dir on "notExecutable" returned exitCode ' + details.data.exitCode);
|
|
test.assertTruthy(details.data.stderr, 'dir on "notExecutable" returned stderr ' + JSON.stringify(details.data.stderr));
|
|
});
|
|
|
|
casper.reload().then( function() {
|
|
test.skip(5, 'WINDOWS SYSTEM, CAN NOT EASILY TRAP TERM SIGNAL ON SHELL SCRIPT');
|
|
});
|
|
|
|
};
|
|
|
|
};
|
|
|
|
casper.run(function() {
|
|
test.done();
|
|
});
|
|
});
|