Index: test/mjsunit/harmony/classes-maps.js |
diff --git a/test/mjsunit/harmony/classes-maps.js b/test/mjsunit/harmony/classes-maps.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c82fc52d8d343f96bba78dd9de92aa5ef784f1e0 |
--- /dev/null |
+++ b/test/mjsunit/harmony/classes-maps.js |
@@ -0,0 +1,68 @@ |
+// 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: --harmony-classes --allow-natives-syntax |
+'use strict'; |
+ |
+(function TestMaps() { |
+ class Base {} |
+ class Derived extends Base {} |
+ |
+ let d1 = new Derived(); |
+ let d2 = new Derived(); |
+ |
+ assertTrue(%HaveSameMap(d1, d2)); |
+}()); |
+ |
+ |
+(function TestProtoModificationArray() { |
+ let called = 0; |
+ function F() { |
+ called++; |
+ assertFalse(Array.isArray(this)); |
+ } |
+ class Derived extends Array {} |
+ assertSame(Derived.__proto__, Array); |
+ |
+ let d1 = new Derived(); |
+ assertTrue(Array.isArray(d1)); |
+ |
+ Derived.__proto__ = F; |
+ called = 0; |
+ let d2 = new Derived(); |
+ assertSame(1, called); |
+ assertFalse(Array.isArray(d2)); |
+ |
+ assertFalse(%HaveSameMap(d1, d2)); |
+}()); |
+ |
+ |
+(function TestProtoModification() { |
+ let called = 0; |
+ function F() { |
+ called++; |
+ let exn = null; |
+ try { |
+ this.byteLength; |
+ } catch (e) { |
+ exn = e; |
+ } |
+ assertTrue(exn instanceof TypeError); |
+ } |
+ class Derived extends Uint8Array { |
+ constructor() { super(10); } |
+ } |
+ assertSame(Derived.__proto__, Uint8Array); |
+ |
+ let d1 = new Derived(); |
+ assertSame(10, d1.byteLength); |
+ |
+ Derived.__proto__ = F; |
+ called = 0; |
+ let d2 = new Derived(); |
+ assertSame(1, called); |
+ assertThrows(function() { d2.byteLength; }, TypeError); |
+ |
+ assertFalse(%HaveSameMap(d1, d2)); |
+}()); |