OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --harmony-classes | 5 // Flags: --harmony-classes |
6 | 6 |
7 (function TestBasics() { | 7 (function TestBasics() { |
8 var C = class C {} | 8 var C = class C {} |
9 assertEquals(typeof C, 'function'); | 9 assertEquals(typeof C, 'function'); |
10 assertEquals(C.__proto__, Function.prototype); | 10 assertEquals(C.__proto__, Function.prototype); |
11 assertEquals(Object.prototype, Object.getPrototypeOf(C.prototype)); | 11 assertEquals(Object.prototype, Object.getPrototypeOf(C.prototype)); |
12 assertEquals(Function.prototype, Object.getPrototypeOf(C)); | 12 assertEquals(Function.prototype, Object.getPrototypeOf(C)); |
13 assertEquals('C', C.name); | 13 assertEquals('C', C.name); |
14 | 14 |
15 class D {} | 15 class D {} |
16 assertEquals(typeof D, 'function'); | 16 assertEquals(typeof D, 'function'); |
17 assertEquals(D.__proto__, Function.prototype); | 17 assertEquals(D.__proto__, Function.prototype); |
18 assertEquals(Object.prototype, Object.getPrototypeOf(D.prototype)); | 18 assertEquals(Object.prototype, Object.getPrototypeOf(D.prototype)); |
19 assertEquals(Function.prototype, Object.getPrototypeOf(D)); | 19 assertEquals(Function.prototype, Object.getPrototypeOf(D)); |
20 assertEquals('D', D.name); | 20 assertEquals('D', D.name); |
21 | 21 |
| 22 class D2 { constructor() {} } |
| 23 assertEquals('D2', D2.name); |
| 24 |
| 25 // TODO(arv): The logic for the name of anonymous functions in ES6 requires |
| 26 // the below to be 'E'; |
22 var E = class {} | 27 var E = class {} |
23 assertEquals('', E.name); | 28 assertEquals('', E.name); // Should be 'E'. |
| 29 |
| 30 var F = class { constructor() {} }; |
| 31 assertEquals('', F.name); // Should be 'F'. |
24 })(); | 32 })(); |
25 | 33 |
26 | 34 |
27 (function TestBasicsExtends() { | 35 (function TestBasicsExtends() { |
28 class C extends null {} | 36 class C extends null {} |
29 assertEquals(typeof C, 'function'); | 37 assertEquals(typeof C, 'function'); |
30 assertEquals(C.__proto__, Function.prototype); | 38 assertEquals(C.__proto__, Function.prototype); |
31 assertEquals(null, Object.getPrototypeOf(C.prototype)); | 39 assertEquals(null, Object.getPrototypeOf(C.prototype)); |
32 | 40 |
33 class D extends C {} | 41 class D extends C {} |
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 static get 5() { return super[5]; } | 590 static get 5() { return super[5]; } |
583 } | 591 } |
584 | 592 |
585 assertEquals(1, new C()[1]()); | 593 assertEquals(1, new C()[1]()); |
586 assertEquals(2, new C()[2]); | 594 assertEquals(2, new C()[2]); |
587 assertEquals(4, C[4]()); | 595 assertEquals(4, C[4]()); |
588 assertEquals(5, C[5]); | 596 assertEquals(5, C[5]); |
589 })(); | 597 })(); |
590 | 598 |
591 | 599 |
| 600 (function TestDefaultConstructorNoCrash() { |
| 601 // Regression test for https://code.google.com/p/v8/issues/detail?id=3661 |
| 602 class C {} |
| 603 assertEquals(undefined, C()); |
| 604 assertEquals(undefined, C(1)); |
| 605 assertTrue(new C() instanceof C); |
| 606 assertTrue(new C(1) instanceof C); |
| 607 })(); |
| 608 |
| 609 |
| 610 (function TestDefaultConstructor() { |
| 611 var calls = 0; |
| 612 class Base { |
| 613 constructor() { |
| 614 calls++; |
| 615 } |
| 616 } |
| 617 class Derived extends Base {} |
| 618 var object = new Derived; |
| 619 assertEquals(1, calls); |
| 620 |
| 621 calls = 0; |
| 622 Derived(); |
| 623 assertEquals(1, calls); |
| 624 })(); |
| 625 |
| 626 |
592 /* TODO(arv): Implement | 627 /* TODO(arv): Implement |
593 (function TestNameBindingInConstructor() { | 628 (function TestNameBindingInConstructor() { |
594 class C { | 629 class C { |
595 constructor() { | 630 constructor() { |
596 assertThrows(function() { | 631 assertThrows(function() { |
597 C = 42; | 632 C = 42; |
598 }, ReferenceError); | 633 }, ReferenceError); |
599 } | 634 } |
600 } | 635 } |
601 new C(); | 636 new C(); |
602 })(); | 637 })(); |
603 */ | 638 */ |
OLD | NEW |