chromium/third_party/blink/web_tests/fast/js/script-tests/exception-line-number.js

description('This test makes sure the exception stack has line number information.');

// Test error.stack:
function foo() {    // line 4
    try {
        doError();  // line 6
    } catch(err) {
        temp = err.stack;
    }
}
foo();              // line 11

// The stack trace contains the full path to the file.  We need to trim it to
// only the part below LayoutTest so that the test results are consistent
// regardless of which server it is served from.
//
// String.match() generates an array of matches.  We'll just convert all the
// elements back into a comma separated string by simply stringifying the
// array.  This makes it easier to compare the resultant stack trace info.

result = String(temp.match(/(?<=LayoutTests\/|web_tests\/)[^:]+\:[0-9]+/g));

shouldBe("result", '"fast/js/script-tests/exception-line-number.js:6,fast/js/script-tests/exception-line-number.js:11"');


// Test window.onerror:

window.onerror = function(msg, url, line) {
    url = String(url.match(/(?<=LayoutTests\/|web_tests\/)[^:]+/g));
    result = url + ':' + line;
    shouldBe("result", '"fast/js/script-tests/exception-line-number.js:36"');
    return true;  // We handled it.
}

this.err = Error(12, "line number test");
throw this.err;   // Line 36.