Index: test/mjsunit/harmony/new-target.js |
diff --git a/test/mjsunit/harmony/new-target.js b/test/mjsunit/harmony/new-target.js |
deleted file mode 100644 |
index 6e7cdcca0ebf5ba829d5c283fce65208b96ee7bb..0000000000000000000000000000000000000000 |
--- a/test/mjsunit/harmony/new-target.js |
+++ /dev/null |
@@ -1,398 +0,0 @@ |
-// 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. |
- |
-// Flags: --harmony-new-target --harmony-reflect --harmony-destructuring |
-// Flags: --harmony-rest-parameters |
- |
- |
-(function TestClass() { |
- 'use strict'; |
- |
- var calls = 0; |
- class Base { |
- constructor(_) { |
- assertEquals(Base, new.target); |
- calls++; |
- } |
- } |
- assertInstanceof(new Base(1), Base); |
- assertInstanceof(new Base(1, 2), Base); |
- assertInstanceof(new Base(), Base); |
- assertEquals(3, calls); |
-})(); |
- |
- |
-(function TestDerivedClass() { |
- 'use strict'; |
- |
- var calls = 0; |
- class Base { |
- constructor(expected) { |
- assertEquals(expected, new.target); |
- } |
- } |
- class Derived extends Base { |
- constructor(expected) { |
- super(expected); |
- assertEquals(expected, new.target); |
- calls++; |
- } |
- } |
- new Derived(Derived, 'extra'); |
- new Derived(Derived); |
- assertEquals(2, calls); |
- |
- class Derived2 extends Derived {} |
- calls = 0; |
- new Derived2(Derived2); |
- new Derived2(Derived2, 'extra'); |
- assertEquals(2, calls); |
-})(); |
- |
- |
-(function TestFunctionCall() { |
- var calls; |
- function f(expected) { |
- calls++; |
- assertEquals(expected, new.target); |
- } |
- |
- calls = 0; |
- f(undefined); |
- f(undefined, 'extra'); |
- f(); |
- assertEquals(3, calls); |
- |
- calls = 0; |
- f.call({}, undefined); |
- f.call({}, undefined, 'extra'); |
- f.call({}); |
- assertEquals(3, calls); |
- |
- calls = 0; |
- f.apply({}, [undefined]); |
- f.apply({}, [undefined, 'extra']); |
- f.apply({}, []); |
- assertEquals(3, calls); |
-})(); |
- |
- |
-(function TestFunctionConstruct() { |
- var calls; |
- function f(expected) { |
- calls++; |
- assertEquals(expected, new.target); |
- } |
- |
- calls = 0; |
- new f(f); |
- new f(f, 'extra'); |
- assertEquals(2, calls); |
-})(); |
- |
- |
-(function TestClassExtendsFunction() { |
- 'use strict'; |
- |
- var calls = 0; |
- function f(expected) { |
- assertEquals(expected, new.target); |
- } |
- class Derived extends f { |
- constructor(expected) { |
- super(expected); |
- assertEquals(expected, new.target); |
- calls++; |
- } |
- } |
- |
- new Derived(Derived); |
- new Derived(Derived, 'extra'); |
- assertEquals(2, calls); |
-})(); |
- |
- |
-(function TestFunctionReturnObject() { |
- function f(expected) { |
- assertEquals(expected, new.target); |
- return /abc/; |
- } |
- |
- assertInstanceof(new f(f), RegExp); |
- assertInstanceof(new f(f, 'extra'), RegExp); |
- |
- assertInstanceof(f(undefined), RegExp); |
- assertInstanceof(f(), RegExp); |
- assertInstanceof(f(undefined, 'extra'), RegExp); |
-})(); |
- |
- |
-(function TestClassReturnObject() { |
- 'use strict'; |
- |
- class Base { |
- constructor(expected) { |
- assertEquals(expected, new.target); |
- return /abc/; |
- } |
- } |
- |
- assertInstanceof(new Base(Base), RegExp); |
- assertInstanceof(new Base(Base, 'extra'), RegExp); |
- |
- class Derived extends Base {} |
- assertInstanceof(new Derived(Derived), RegExp); |
- assertInstanceof(new Derived(Derived, 'extra'), RegExp); |
- |
- class Derived2 extends Base { |
- constructor(expected) { |
- super(expected); |
- assertInstanceof(this, RegExp); |
- } |
- } |
- assertInstanceof(new Derived2(Derived2), RegExp); |
- assertInstanceof(new Derived2(Derived2, 'extra'), RegExp); |
-})(); |
- |
- |
-(function TestReflectConstruct() { |
- var calls = 0; |
- function f(expected) { |
- calls++; |
- assertEquals(expected, new.target); |
- } |
- |
- var o = Reflect.construct(f, [f]); |
- assertEquals(Object.getPrototypeOf(o), f.prototype); |
- o = Reflect.construct(f, [f, 'extra']); |
- assertEquals(Object.getPrototypeOf(o), f.prototype); |
- assertEquals(2, calls); |
- |
- calls = 0; |
- o = Reflect.construct(f, [f], f); |
- assertEquals(Object.getPrototypeOf(o), f.prototype); |
- o = Reflect.construct(f, [f, 'extra'], f); |
- assertEquals(Object.getPrototypeOf(o), f.prototype); |
- assertEquals(2, calls); |
- |
- |
- function g() {} |
- calls = 0; |
- o = Reflect.construct(f, [g], g); |
- assertEquals(Object.getPrototypeOf(o), g.prototype); |
- o = Reflect.construct(f, [g, 'extra'], g); |
- assertEquals(Object.getPrototypeOf(o), g.prototype); |
- assertEquals(2, calls); |
-})(); |
- |
- |
-(function TestRestParametersFunction() { |
- function f(...rest) { |
- assertEquals(rest[0], new.target); |
- } |
- |
- assertInstanceof(new f(f), f); |
- assertInstanceof(new f(f, 'extra'), f); |
-})(); |
- |
- |
-(function TestRestParametersClass() { |
- 'use strict'; |
- |
- class Base { |
- constructor(...rest) { |
- assertEquals(rest[0], new.target); |
- } |
- } |
- |
- assertInstanceof(new Base(Base), Base); |
- assertInstanceof(new Base(Base, 'extra'), Base); |
- |
- class Derived extends Base {} |
- |
- assertInstanceof(new Derived(Derived), Derived); |
- assertInstanceof(new Derived(Derived, 'extra'), Derived); |
-})(); |
- |
- |
-(function TestArrowFunction() { |
- function f(expected) { |
- (() => { |
- assertEquals(expected, new.target); |
- })(); |
- } |
- |
- assertInstanceof(new f(f), f); |
- assertInstanceof(new f(f, 'extra'), f); |
-})(); |
- |
- |
-(function TestRestParametersClass() { |
- 'use strict'; |
- |
- class Base { |
- constructor(expected) { |
- (() => { |
- assertEquals(expected, new.target); |
- })(); |
- } |
- } |
- |
- assertInstanceof(new Base(Base), Base); |
- assertInstanceof(new Base(Base, 'extra'), Base); |
- |
- class Derived extends Base {} |
- |
- assertInstanceof(new Derived(Derived), Derived); |
- assertInstanceof(new Derived(Derived, 'extra'), Derived); |
-})(); |
- |
- |
-(function TestSloppyArguments() { |
- var length, a0, a1, a2, nt; |
- function f(x) { |
- assertEquals(length, arguments.length); |
- assertEquals(a0, arguments[0]); |
- assertEquals(a1, arguments[1]); |
- assertEquals(a2, arguments[2]); |
- assertEquals(nt, new.target); |
- |
- if (length > 0) { |
- x = 42; |
- assertEquals(42, x); |
- assertEquals(42, arguments[0]); |
- |
- arguments[0] = 33; |
- assertEquals(33, x); |
- assertEquals(33, arguments[0]); |
- } |
- } |
- |
- nt = f; |
- length = 0; |
- new f(); |
- |
- length = 1; |
- a0 = 1; |
- new f(1); |
- |
- length = 2; |
- a0 = 1; |
- a1 = 2; |
- new f(1, 2); |
- |
- length = 3; |
- a0 = 1; |
- a1 = 2; |
- a2 = 3; |
- new f(1, 2, 3); |
- |
- nt = undefined; |
- a0 = a1 = a2 = undefined; |
- length = 0; |
- f(); |
- |
- length = 1; |
- a0 = 1; |
- f(1); |
- |
- length = 2; |
- a0 = 1; |
- a1 = 2; |
- f(1, 2); |
- |
- length = 3; |
- a0 = 1; |
- a1 = 2; |
- a2 = 3; |
- f(1, 2, 3); |
-})(); |
- |
- |
-(function TestStrictArguments() { |
- var length, a0, a1, a2, nt; |
- function f(x) { |
- 'use strict'; |
- assertEquals(length, arguments.length); |
- assertEquals(a0, arguments[0]); |
- assertEquals(a1, arguments[1]); |
- assertEquals(a2, arguments[2]); |
- assertEquals(nt, new.target); |
- |
- if (length > 0) { |
- x = 42; |
- assertEquals(a0, arguments[0]); |
- |
- arguments[0] = 33; |
- assertEquals(33, arguments[0]); |
- } |
- } |
- |
- nt = f; |
- length = 0; |
- new f(); |
- |
- length = 1; |
- a0 = 1; |
- new f(1); |
- |
- length = 2; |
- a0 = 1; |
- a1 = 2; |
- new f(1, 2); |
- |
- length = 3; |
- a0 = 1; |
- a1 = 2; |
- a2 = 3; |
- new f(1, 2, 3); |
- |
- nt = undefined; |
- a0 = a1 = a2 = undefined; |
- length = 0; |
- f(); |
- |
- length = 1; |
- a0 = 1; |
- f(1); |
- |
- length = 2; |
- a0 = 1; |
- a1 = 2; |
- f(1, 2); |
- |
- length = 3; |
- a0 = 1; |
- a1 = 2; |
- a2 = 3; |
- f(1, 2, 3); |
-})(); |
- |
- |
-(function TestOtherScopes() { |
- function f1() { return eval("'use strict'; new.target") } |
- assertSame(f1, new f1); |
- function f2() { with ({}) return new.target } |
- assertSame(f2, new f2); |
- function f3({a}) { return new.target } |
- assertSame(f3, new f3({})); |
- function f4(...a) { return new.target } |
- assertSame(f4, new f4); |
- function f5() { 'use strict'; { let x; return new.target } } |
- assertSame(f5, new f5); |
- function f6() { with ({'new.target': 42}) return new.target } |
- assertSame(f6, new f6); |
-})(); |
- |
- |
-(function TestEarlyErrors() { |
- assertThrows(function() { Function("new.target = 42"); }, ReferenceError); |
- assertThrows(function() { Function("var foo = 1; new.target = foo = 42"); }, ReferenceError); |
- assertThrows(function() { Function("var foo = 1; foo = new.target = 42"); }, ReferenceError); |
- assertThrows(function() { Function("new.target--"); }, ReferenceError); |
- assertThrows(function() { Function("--new.target"); }, ReferenceError); |
- assertThrows(function() { Function("(new.target)++"); }, ReferenceError); |
- assertThrows(function() { Function("++(new.target)"); }, ReferenceError); |
- assertThrows(function() { Function("for (new.target of {});"); }, SyntaxError); |
-})(); |