Index: test/mjsunit/es6/typedarray-proto.js |
diff --git a/test/mjsunit/es6/typedarray-proto.js b/test/mjsunit/es6/typedarray-proto.js |
index 558cb0ad7a25304b19c8d9fb41e893eba2c6195f..0bd90d13b404ca7befbac7817c8e688addf51f39 100644 |
--- a/test/mjsunit/es6/typedarray-proto.js |
+++ b/test/mjsunit/es6/typedarray-proto.js |
@@ -4,12 +4,10 @@ |
// Test that the methods for different TypedArray types have the same |
// identity. |
-// TODO(dehrenberg): Test that the TypedArray proto hierarchy is set |
-// up properly. |
-// TODO(dehrenberg): subarray is currently left out because that still |
-// uses per-type methods. When that's fixed, stop leaving it out. |
-var typedArrayConstructors = [ |
+'use strict'; |
+ |
+let typedArrayConstructors = [ |
Uint8Array, |
Int8Array, |
Uint16Array, |
@@ -20,6 +18,18 @@ var typedArrayConstructors = [ |
Float32Array, |
Float64Array]; |
+let TypedArray = Uint8Array.__proto__; |
+let TypedArrayPrototype = TypedArray.prototype; |
+ |
+assertEquals(TypedArray.__proto__, Function.prototype); |
+assertEquals(TypedArrayPrototype.__proto__, Object.prototype); |
+ |
+// There are extra own class properties due to it simply being a function |
+let classProperties = new Set([ |
+ "length", "name", "arguments", "caller", "prototype", "BYTES_PER_ELEMENT" |
+]); |
+let instanceProperties = new Set(["BYTES_PER_ELEMENT", "constructor", "prototype"]); |
+ |
function functionProperties(object) { |
return Object.getOwnPropertyNames(object).filter(function(name) { |
return typeof Object.getOwnPropertyDescriptor(object, name).value |
@@ -28,15 +38,33 @@ function functionProperties(object) { |
}); |
} |
-var typedArrayMethods = functionProperties(Uint8Array.prototype); |
-var typedArrayClassMethods = functionProperties(Uint8Array); |
+let typedArrayMethods = functionProperties(Uint8Array.prototype); |
+let typedArrayClassMethods = functionProperties(Uint8Array); |
-for (var constructor of typedArrayConstructors) { |
- for (var method of typedArrayMethods) { |
- assertEquals(constructor.prototype[method], |
- Uint8Array.prototype[method], method); |
+for (let constructor of typedArrayConstructors) { |
+ for (let property of Object.getOwnPropertyNames(constructor.prototype)) { |
+ assertTrue(instanceProperties.has(property), property); |
} |
- for (var classMethod of typedArrayClassMethods) { |
- assertEquals(constructor[method], Uint8Array[method], classMethod); |
+ for (let property of Object.getOwnPropertyNames(constructor)) { |
+ assertTrue(classProperties.has(property), property); |
} |
} |
+ |
+// Abstract %TypedArray% class can't be constructed directly |
+ |
+assertThrows(() => new TypedArray(), TypeError); |
+ |
+// The "prototype" property is nonconfigurable, nonenumerable, nonwritable, |
+// both for %TypedArray% and for all subclasses |
+ |
+let desc = Object.getOwnPropertyDescriptor(TypedArray, "prototype"); |
+assertFalse(desc.writable); |
+assertFalse(desc.configurable); |
+assertFalse(desc.enumerable); |
+ |
+for (let constructor of typedArrayConstructors) { |
+ let desc = Object.getOwnPropertyDescriptor(constructor, "prototype"); |
+ assertFalse(desc.writable); |
+ assertFalse(desc.configurable); |
+ assertFalse(desc.enumerable); |
+} |