| // Copyright 2015 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. | 
 |  | 
 | (function testNonConstructorStrict() { | 
 |   "use strict"; | 
 |   assertThrows(function() { | 
 |     return new Math.cos(...[1,2,3]); | 
 |   }, TypeError); | 
 |  | 
 |   assertThrows(function() { | 
 |     var CallNull = null; | 
 |     return new CallNull(...[1,2,3]); | 
 |   }, TypeError); | 
 | })(); | 
 |  | 
 |  | 
 | (function testNonConstructorSloppy() { | 
 |   assertThrows(function() { | 
 |     return new Math.cos(...[1,2,3]); | 
 |   }, TypeError); | 
 |  | 
 |   assertThrows(function() { | 
 |     var CallNull = null; | 
 |     return new CallNull(...[1,2,3]); | 
 |   }, TypeError); | 
 | })(); | 
 |  | 
 |  | 
 | (function testConstructStrict() { | 
 |   "use strict"; | 
 |   function TestClass(a, b, c) { | 
 |     this.wasCalled = true; | 
 |     this.args = [a, b, c]; | 
 |   } | 
 |   TestClass.prototype.method = function() { | 
 |     return this.args; | 
 |   } | 
 |  | 
 |   assertInstanceof(new TestClass(...[1, 2, 3]), TestClass); | 
 |   assertEquals([1, 2, 3], (new TestClass(...[1, 2, 3])).method()); | 
 |   assertEquals([1, 2, 3], (new TestClass(...[1, 2, 3])).args); | 
 |   assertTrue((new TestClass(...[1, 2, 3])).wasCalled); | 
 | })(); | 
 |  | 
 |  | 
 | (function testConstructSloppy() { | 
 |   function TestClass(a, b, c) { | 
 |     this.wasCalled = true; | 
 |     this.args = [a, b, c]; | 
 |   } | 
 |   TestClass.prototype.method = function() { | 
 |     return this.args; | 
 |   } | 
 |  | 
 |   assertInstanceof(new TestClass(...[1, 2, 3]), TestClass); | 
 |   assertEquals([1, 2, 3], (new TestClass(...[1, 2, 3])).method()); | 
 |   assertEquals([1, 2, 3], (new TestClass(...[1, 2, 3])).args); | 
 |   assertTrue((new TestClass(...[1, 2, 3])).wasCalled); | 
 | })(); |