103 lines
2.2 KiB
JavaScript
103 lines
2.2 KiB
JavaScript
|
// Copyright 2017 the V8 project authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
let fileName = 'mjsunit-assertion-error.js';
|
||
|
|
||
|
function addDefaultFrames(frameExpectations) {
|
||
|
// The last frame contains the error instantiation.
|
||
|
frameExpectations.unshift('assertTrue.*mjsunit.js');
|
||
|
// Frist frame is the top-level script.
|
||
|
frameExpectations.push(fileName);
|
||
|
}
|
||
|
|
||
|
function assertErrorMessage(frameExpectations, error) {
|
||
|
let stack = error.stack.split("\n");
|
||
|
let title = stack.shift();
|
||
|
assertContains('MjsUnitAssertionError', title);
|
||
|
addDefaultFrames(frameExpectations);
|
||
|
// Add default frames to the expectations.
|
||
|
assertEquals(frameExpectations.length, stack.length);
|
||
|
for (let i = 0; i < stack.length; i++) {
|
||
|
let frame = stack[i];
|
||
|
let expectation = frameExpectations[i];
|
||
|
assertTrue(frame.search(expectation) != -1,
|
||
|
`Frame ${i}: Did not find '${expectation}' in '${frame}'`);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Toplevel
|
||
|
try {
|
||
|
assertTrue(false);
|
||
|
} catch(e) {
|
||
|
assertErrorMessage([], e);
|
||
|
}
|
||
|
|
||
|
// Single function.
|
||
|
function throwError() {
|
||
|
assertTrue(false);
|
||
|
}
|
||
|
try {
|
||
|
throwError();
|
||
|
assertUnreachable();
|
||
|
} catch(e) {
|
||
|
assertErrorMessage(['throwError'], e);
|
||
|
}
|
||
|
|
||
|
// Nested function.
|
||
|
function outer() {
|
||
|
throwError();
|
||
|
}
|
||
|
try {
|
||
|
outer();
|
||
|
assertUnreachable();
|
||
|
} catch(e) {
|
||
|
assertErrorMessage(['throwError', 'outer'], e);
|
||
|
}
|
||
|
|
||
|
// Test Array helper nesting
|
||
|
try {
|
||
|
[1].map(throwError);
|
||
|
assertUnreachable();
|
||
|
} catch(e) {
|
||
|
assertErrorMessage(['throwError', 'Array.map'], e);
|
||
|
}
|
||
|
try {
|
||
|
Array.prototype.map.call([1], throwError);
|
||
|
assertUnreachable();
|
||
|
} catch(e) {
|
||
|
assertErrorMessage(['throwError', 'Array.map'], e);
|
||
|
}
|
||
|
|
||
|
// Test eval
|
||
|
try {
|
||
|
eval("assertTrue(false);");
|
||
|
assertUnreachable();
|
||
|
} catch(e) {
|
||
|
assertErrorMessage(['eval'], e);
|
||
|
}
|
||
|
|
||
|
(function testNestedEval() {
|
||
|
try {
|
||
|
eval("assertTrue(false);");
|
||
|
assertUnreachable();
|
||
|
} catch(e) {
|
||
|
assertErrorMessage(['eval', 'testNestedEval'], e);
|
||
|
}
|
||
|
})();
|
||
|
|
||
|
|
||
|
(function testConstructor() {
|
||
|
class Failer {
|
||
|
constructor() {
|
||
|
assertTrue(false);
|
||
|
}
|
||
|
}
|
||
|
try {
|
||
|
new Failer();
|
||
|
assertUnreachable();
|
||
|
} catch(e) {
|
||
|
assertErrorMessage(['new Failer', 'testConstructor'], e);
|
||
|
}
|
||
|
})();
|