puppeteer/third_party/phantomjs/test/module/webpage/on-error.js
2017-05-11 00:06:41 -07:00

111 lines
3.4 KiB
JavaScript

//! unsupported
var webpage = require('webpage');
test(function () {
var page = webpage.create();
assert_not_equals(page.onError, undefined);
var onErrorFunc1 = function() { return !"x"; };
page.onError = onErrorFunc1;
assert_equals(page.onError, onErrorFunc1);
var onErrorFunc2 = function() { return !!"y"; };
page.onError = onErrorFunc2;
assert_equals(page.onError, onErrorFunc2);
assert_not_equals(page.onError, onErrorFunc1);
page.onError = null;
// Will only allow setting to a function value, so setting it to `null` returns `undefined`
assert_equals(page.onError, undefined);
page.onError = undefined;
assert_equals(page.onError, undefined);
}, "setting and clearing page.onError");
test(function () {
var page = webpage.create();
var lastError = null;
page.onError = function(message) { lastError = message; };
page.evaluate(function() { referenceError2(); });
assert_equals(lastError, "ReferenceError: Can't find variable: referenceError2");
page.evaluate(function() { throw "foo"; });
assert_equals(lastError, "foo");
page.evaluate(function() { throw Error("foo"); });
assert_equals(lastError, "Error: foo");
}, "basic error reporting");
async_test(function () {
var page = webpage.create();
var lastError = null;
page.onError = this.step_func_done(function(message) {
assert_equals(message, "ReferenceError: Can't find variable: referenceError");
});
page.evaluate(function() {
setTimeout(function() { referenceError(); }, 0);
});
}, "error reporting from async events");
test(function () {
var page = webpage.create();
var hadError = false;
page.onError = function() { hadError = true; };
page.evaluate(function() {
window.caughtError = false;
try {
referenceError();
} catch(e) {
window.caughtError = true;
}
});
assert_equals(hadError, false);
assert_is_true(page.evaluate(function() { return window.caughtError; }));
}, "should not report errors that were caught");
function check_stack(message, stack) {
assert_equals(message,
"ReferenceError: Can't find variable: referenceError");
if (typeof stack === "string") {
var lines = stack.split("\n");
assert_regexp_match(lines[0], RegExp("^bar@.*?"+helperBase+":7:23$"));
assert_regexp_match(lines[1], RegExp("^foo@.*?"+helperBase+":3:17$"));
} else {
assert_regexp_match(stack[0].file, RegExp(helperBase));
assert_equals(stack[0].line, 7);
assert_equals(stack[0]["function"], "bar");
assert_regexp_match(stack[1].file, RegExp(helperBase));
assert_equals(stack[1].line, 3);
assert_equals(stack[1]["function"], "foo");
}
}
var helperBase = "error-helper.js";
var helperFile = "../../fixtures/" + helperBase;
assert_is_true(phantom.injectJs(helperFile));
test(function () {
try {
ErrorHelper.foo();
} catch (e) {
check_stack(e.toString(), e.stack);
}
}, "stack trace accuracy (controller script)");
async_test(function () {
var page = webpage.create();
page.libraryPath = phantom.libraryPath;
assert_is_true(page.injectJs(helperFile));
page.onError = this.step_func_done(check_stack);
page.evaluate(function () {
setTimeout(function () { ErrorHelper.foo(); }, 0);
});
}, "stack trace accuracy (webpage script)");