1014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Copyright 2015 the V8 project authors. All rights reserved. 2014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// found in the LICENSE file. 4014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch(function testNonConstructorStrict() { 6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "use strict"; 7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertThrows(function() { 8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new Math.cos(...[1,2,3]); 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }, TypeError); 10014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertThrows(function() { 12014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch var CallNull = null; 13014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new CallNull(...[1,2,3]); 14014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }, TypeError); 15014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch})(); 16014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 17014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 18014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch(function testNonConstructorSloppy() { 19014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertThrows(function() { 20014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new Math.cos(...[1,2,3]); 21014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }, TypeError); 22014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 23014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertThrows(function() { 24014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch var CallNull = null; 25014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return new CallNull(...[1,2,3]); 26014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }, TypeError); 27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch})(); 28014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 29014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 30014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch(function testConstructStrict() { 31014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch "use strict"; 32014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch function TestClass(a, b, c) { 33014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch this.wasCalled = true; 34014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch this.args = [a, b, c]; 35014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch TestClass.prototype.method = function() { 37014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return this.args; 38014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 39014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 40014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertInstanceof(new TestClass(...[1, 2, 3]), TestClass); 41014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertEquals([1, 2, 3], (new TestClass(...[1, 2, 3])).method()); 42014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertEquals([1, 2, 3], (new TestClass(...[1, 2, 3])).args); 43014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertTrue((new TestClass(...[1, 2, 3])).wasCalled); 44014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch})(); 45014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 46014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch(function testConstructSloppy() { 48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch function TestClass(a, b, c) { 49014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch this.wasCalled = true; 50014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch this.args = [a, b, c]; 51014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 52014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch TestClass.prototype.method = function() { 53014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return this.args; 54014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 55014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 56014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertInstanceof(new TestClass(...[1, 2, 3]), TestClass); 57014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertEquals([1, 2, 3], (new TestClass(...[1, 2, 3])).method()); 58014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertEquals([1, 2, 3], (new TestClass(...[1, 2, 3])).args); 59014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertTrue((new TestClass(...[1, 2, 3])).wasCalled); 60014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch})(); 61