1// Copyright 2015 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5(function testNonConstructorStrict() { 6 "use strict"; 7 assertThrows(function() { 8 return new Math.cos(...[1,2,3]); 9 }, TypeError); 10 11 assertThrows(function() { 12 var CallNull = null; 13 return new CallNull(...[1,2,3]); 14 }, TypeError); 15})(); 16 17 18(function testNonConstructorSloppy() { 19 assertThrows(function() { 20 return new Math.cos(...[1,2,3]); 21 }, TypeError); 22 23 assertThrows(function() { 24 var CallNull = null; 25 return new CallNull(...[1,2,3]); 26 }, TypeError); 27})(); 28 29 30(function testConstructStrict() { 31 "use strict"; 32 function TestClass(a, b, c) { 33 this.wasCalled = true; 34 this.args = [a, b, c]; 35 } 36 TestClass.prototype.method = function() { 37 return this.args; 38 } 39 40 assertInstanceof(new TestClass(...[1, 2, 3]), TestClass); 41 assertEquals([1, 2, 3], (new TestClass(...[1, 2, 3])).method()); 42 assertEquals([1, 2, 3], (new TestClass(...[1, 2, 3])).args); 43 assertTrue((new TestClass(...[1, 2, 3])).wasCalled); 44})(); 45 46 47(function testConstructSloppy() { 48 function TestClass(a, b, c) { 49 this.wasCalled = true; 50 this.args = [a, b, c]; 51 } 52 TestClass.prototype.method = function() { 53 return this.args; 54 } 55 56 assertInstanceof(new TestClass(...[1, 2, 3]), TestClass); 57 assertEquals([1, 2, 3], (new TestClass(...[1, 2, 3])).method()); 58 assertEquals([1, 2, 3], (new TestClass(...[1, 2, 3])).args); 59 assertTrue((new TestClass(...[1, 2, 3])).wasCalled); 60})(); 61