| // 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); |
| } |
| })(); |