130 lines
4.9 KiB
JavaScript
130 lines
4.9 KiB
JavaScript
|
/*eslint strict:0, max-params:0*/
|
||
|
casper.test.begin('mapping argument context', 1, function(test) {
|
||
|
casper.start();
|
||
|
var context = {
|
||
|
"_boolean_true": true,
|
||
|
"_boolean_false": false,
|
||
|
"_int_number": 42,
|
||
|
"_float_number": 1337.42,
|
||
|
"_string": "plop! \"Ÿ£$\" 'no'",
|
||
|
"_array": [1, 2, 3],
|
||
|
"_object": {a: 1, b: 2},
|
||
|
"_function": function(){console.log('ok');}
|
||
|
};
|
||
|
var result = casper.evaluate(function(_boolean_true, _boolean_false, _int_number,
|
||
|
_float_number, _string, _array, _object, _function) {
|
||
|
return [].map.call(arguments, function(arg) {
|
||
|
return typeof(arg);
|
||
|
});
|
||
|
}, context);
|
||
|
test.assertEquals(
|
||
|
result.toString(),
|
||
|
['boolean', 'boolean', 'number', 'number', 'string', 'object', 'object', 'function'].toString(),
|
||
|
'Casper.evaluate() handles passed argument context correcly'
|
||
|
);
|
||
|
test.done();
|
||
|
});
|
||
|
|
||
|
casper.test.begin('handling no argument context', 1, function(test) {
|
||
|
casper.start();
|
||
|
test.assertEquals(casper.evaluate(function() {
|
||
|
return 42;
|
||
|
}), 42, 'Casper.evaluate() handles evaluation with no context passed');
|
||
|
test.done();
|
||
|
});
|
||
|
|
||
|
casper.test.begin('handling of object context (BC mode)', 3, function(test) {
|
||
|
casper.start();
|
||
|
test.assertEquals(casper.evaluate(function(a) {
|
||
|
return [a];
|
||
|
}, {a: "foo"}), ["foo"], 'Casper.evaluate() accepts an object as arguments context');
|
||
|
test.assertEquals(casper.evaluate(function(a, b) {
|
||
|
return [a, b];
|
||
|
}, {a: "foo", b: "bar"}), ["foo", "bar"], 'Casper.evaluate() accepts an object as arguments context');
|
||
|
test.assertEquals(casper.evaluate(function(a, b, c) {
|
||
|
return [a, b, c];
|
||
|
}, {a: "foo", b: "bar", c: "baz"}), ["foo", "bar", "baz"], 'Casper.evaluate() accepts an object as arguments context');
|
||
|
test.done();
|
||
|
});
|
||
|
|
||
|
casper.test.begin('handling of array context', 3, function(test) {
|
||
|
casper.start();
|
||
|
test.assertEquals(casper.evaluate(function(a) {
|
||
|
return a;
|
||
|
}, ["foo"]), ["foo"], 'Casper.evaluate() accepts an array as arguments context');
|
||
|
test.assertEquals(casper.evaluate(function(a, b) {
|
||
|
return [a, b];
|
||
|
}, ["foo", "bar"]), ["foo", "bar"], 'Casper.evaluate() accepts an array as arguments context');
|
||
|
test.assertEquals(casper.evaluate(function(a, b, c) {
|
||
|
return [a, b, c];
|
||
|
}, ["foo", "bar", "baz"]), ["foo", "bar", "baz"], 'Casper.evaluate() accepts an array as arguments context');
|
||
|
test.done();
|
||
|
});
|
||
|
|
||
|
casper.test.begin('natural arguments context (phantomjs equivalent)', 3, function(test) {
|
||
|
casper.start();
|
||
|
test.assertEquals(casper.evaluate(function(a) {
|
||
|
return [a];
|
||
|
}, "foo"), ["foo"], 'Casper.evaluate() accepts natural arguments context');
|
||
|
test.assertEquals(casper.evaluate(function(a, b) {
|
||
|
return [a, b];
|
||
|
}, "foo", "bar"), ["foo", "bar"], 'Casper.evaluate() accepts natural arguments context');
|
||
|
test.assertEquals(casper.evaluate(function(a, b, c) {
|
||
|
return [a, b, c];
|
||
|
}, "foo", "bar", "baz"), ["foo", "bar", "baz"], 'Casper.evaluate() accepts natural arguments context');
|
||
|
test.done();
|
||
|
});
|
||
|
|
||
|
casper.test.begin('thenEvaluate() tests', 2, function(test) {
|
||
|
casper.start().thenEvaluate(function(a, b) {
|
||
|
window.a = a;
|
||
|
window.b = b;
|
||
|
}, "foo", "bar");
|
||
|
casper.then(function() {
|
||
|
test.assertEquals(this.getGlobal('a'), "foo", "Casper.thenEvaluate() sets args");
|
||
|
test.assertEquals(this.getGlobal('b'), "bar",
|
||
|
"Casper.thenEvaluate() sets args the same way evaluate() does");
|
||
|
});
|
||
|
casper.run(function() {
|
||
|
test.done();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
// https://github.com/casperjs/casperjs/issues/489
|
||
|
// https://groups.google.com/forum/?fromgroups=#!topic/casperjs/95IgDMFnEKM
|
||
|
casper.test.begin("evaluate() returns a value which can be altered", 1, function(test) {
|
||
|
var list;
|
||
|
|
||
|
casper.start().then(function() {
|
||
|
list = this.evaluate(function() {
|
||
|
return [{a: 1}, {b: 2}];
|
||
|
});
|
||
|
var first = list[0];
|
||
|
first.a = 42;
|
||
|
test.assertEquals(list, [{a: 42}, {b: 2}],
|
||
|
'evaluate() returns a cloned value which can be altered');
|
||
|
});
|
||
|
|
||
|
casper.run(function() {
|
||
|
test.done();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
// https://github.com/casperjs/casperjs/issues/841
|
||
|
casper.test.begin("evaluate() with js disabled, throws error", 1, function(test) {
|
||
|
casper.options.pageSettings.javascriptEnabled = false;
|
||
|
casper.start().then(function() {
|
||
|
function getListResult() {
|
||
|
return this.evaluate(function() {
|
||
|
return [{a: 1}, {b: 2}];
|
||
|
});
|
||
|
}
|
||
|
test.assertThrows(getListResult, undefined,
|
||
|
"Casper.evaluate() raises an error if JavaScript is disabled in the page");
|
||
|
});
|
||
|
|
||
|
casper.run(function() {
|
||
|
test.done();
|
||
|
casper.options.pageSettings.javascriptEnabled = true;
|
||
|
});
|
||
|
});
|