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