diff options
Diffstat (limited to 'deps/v8/test/mjsunit/es6/classes-name-binding.js')
-rw-r--r-- | deps/v8/test/mjsunit/es6/classes-name-binding.js | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/es6/classes-name-binding.js b/deps/v8/test/mjsunit/es6/classes-name-binding.js new file mode 100644 index 0000000000..8dddcd7237 --- /dev/null +++ b/deps/v8/test/mjsunit/es6/classes-name-binding.js @@ -0,0 +1,98 @@ +// Copyright 2014 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: --allow-natives-syntax + +(function TestNameBindingConst() { + assertThrows('class C { constructor() { C = 42; } }; new C();', TypeError); + assertThrows('new (class C { constructor() { C = 42; } })', TypeError); + assertThrows('class C { m() { C = 42; } }; new C().m()', TypeError); + assertThrows('new (class C { m() { C = 42; } }).m()', TypeError); + assertThrows('class C { get x() { C = 42; } }; new C().x', TypeError); + assertThrows('(new (class C { get x() { C = 42; } })).x', TypeError); + assertThrows('class C { set x(_) { C = 42; } }; new C().x = 15;', TypeError); + assertThrows('(new (class C { set x(_) { C = 42; } })).x = 15;', TypeError); +})(); + +(function TestNameBinding() { + var C2; + class C { + constructor() { + C2 = C; + } + m() { + C2 = C; + } + get x() { + C2 = C; + } + set x(_) { + C2 = C; + } + } + new C(); + assertEquals(C, C2); + + C2 = undefined; + new C().m(); + assertEquals(C, C2); + + C2 = undefined; + new C().x; + assertEquals(C, C2); + + C2 = undefined; + new C().x = 1; + assertEquals(C, C2); +})(); + +(function TestNameBindingExpression() { + var C3; + var C = class C2 { + constructor() { + assertEquals(C2, C); + C3 = C2; + } + m() { + assertEquals(C2, C); + C3 = C2; + } + get x() { + assertEquals(C2, C); + C3 = C2; + } + set x(_) { + assertEquals(C2, C); + C3 = C2; + } + } + new C(); + assertEquals(C, C3); + + C3 = undefined; + new C().m(); + assertEquals(C, C3); + + C3 = undefined; + new C().x; + assertEquals(C, C3); + + C3 = undefined; + new C().x = 1; + assertEquals(C, C3); +})(); + +(function TestNameBindingInExtendsExpression() { + assertThrows(function() { + class x extends x {} + }, ReferenceError); + + assertThrows(function() { + (class x extends x {}); + }, ReferenceError); + + assertThrows(function() { + var x = (class x extends x {}); + }, ReferenceError); +})(); |