mirror of
				https://github.com/tc39/test262.git
				synced 2025-11-04 05:33:50 +01:00 
			
		
		
		
	sourceRevisionAtLastExport: 33f2fb0e53d135f0ee17cfccd9d993eb2a6f47de targetRevisionAtLastExport: 31340cbd9add103f586d501b0c3354b7b182abc0
		
			
				
	
	
		
			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);
 | 
						|
  }
 | 
						|
})();
 |