mirror of
https://github.com/tc39/test262.git
synced 2025-07-27 07:54:41 +02:00
Add tests for Subclassing the built-in Array Object
This commit is contained in:
parent
1c1a75eead
commit
7a87731d9c
25
test/language/subclassing/Array/contructor-calls-super.js
Normal file
25
test/language/subclassing/Array/contructor-calls-super.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 22.1.1
|
||||||
|
description: Subclass constructor calling super() creates an Exotic Array object
|
||||||
|
info: >
|
||||||
|
22.1.1 The Array Constructor
|
||||||
|
|
||||||
|
The Array constructor is designed to be subclassable. It may be used as the
|
||||||
|
value of an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the exotic Array behaviour must include a super call to the
|
||||||
|
Array constructor to initialize subclass instances that are exotic Array
|
||||||
|
objects.
|
||||||
|
includes: [compareArray.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Sub extends Array {
|
||||||
|
constructor(a, b) {
|
||||||
|
super(a, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var sub = new Sub(42, 'foo');
|
||||||
|
|
||||||
|
assert(compareArray(sub, [42, 'foo']));
|
37
test/language/subclassing/Array/length.js
Normal file
37
test/language/subclassing/Array/length.js
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 22.1.4.1
|
||||||
|
description: >
|
||||||
|
Instances has the own property length
|
||||||
|
info: >
|
||||||
|
22.1.4.1 length
|
||||||
|
|
||||||
|
The length property of an Array instance is a data property whose value is
|
||||||
|
always numerically greater than the name of every configurable own property
|
||||||
|
whose name is an array index.
|
||||||
|
|
||||||
|
The length property initially has the attributes { [[Writable]]: true,
|
||||||
|
[[Enumerable]]: false, [[Configurable]]: false }.
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Ar extends Array {}
|
||||||
|
|
||||||
|
var arr = new Ar('foo', 'bar');
|
||||||
|
|
||||||
|
assert.sameValue(arr[0], 'foo');
|
||||||
|
assert.sameValue(arr[1], 'bar');
|
||||||
|
|
||||||
|
var arrDesc = Object.getOwnPropertyDescriptor(arr, 'length');
|
||||||
|
|
||||||
|
assert.sameValue(arrDesc.writable, true);
|
||||||
|
assert.sameValue(arrDesc.enumerable, false);
|
||||||
|
assert.sameValue(arrDesc.configurable, false);
|
||||||
|
|
||||||
|
assert.sameValue(arr[1], 'bar');
|
||||||
|
|
||||||
|
arr.length = 1;
|
||||||
|
|
||||||
|
assert.sameValue(arr[0], 'foo');
|
||||||
|
assert.sameValue(arr[1], undefined);
|
33
test/language/subclassing/Array/regular-subclassing.js
Normal file
33
test/language/subclassing/Array/regular-subclassing.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 22.1.1
|
||||||
|
description: Subclassing Array
|
||||||
|
info: >
|
||||||
|
22.1.1 The Array Constructor
|
||||||
|
|
||||||
|
The Array constructor is designed to be subclassable. It may be used as the
|
||||||
|
value of an extends clause of a class definition. (...)
|
||||||
|
includes: [compareArray.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Sub extends Array {}
|
||||||
|
|
||||||
|
var a1 = new Sub(42, 'foo');
|
||||||
|
|
||||||
|
assert.sameValue(a1.length, 2);
|
||||||
|
assert.sameValue(a1[0], 42);
|
||||||
|
assert.sameValue(a1[1], 'foo');
|
||||||
|
|
||||||
|
a1.push(true);
|
||||||
|
assert.sameValue(a1.length, 3, 'Array#push updates the length property');
|
||||||
|
assert.sameValue(a1[0], 42);
|
||||||
|
assert.sameValue(a1[1], 'foo');
|
||||||
|
assert.sameValue(a1[2], true, 'Adds new item');
|
||||||
|
|
||||||
|
var a2 = new Sub(7);
|
||||||
|
assert.sameValue(a2.length, 7);
|
||||||
|
|
||||||
|
var a3 = new Sub();
|
||||||
|
assert(compareArray(a3, []));
|
||||||
|
assert.sameValue(a3.length, 0);
|
32
test/language/subclassing/Array/super-must-be-called.js
Normal file
32
test/language/subclassing/Array/super-must-be-called.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 22.1.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
22.1.1 The Array Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The Array constructor is designed to be subclassable. It may be used as the
|
||||||
|
value of an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the exotic Array behaviour must include a super call to the
|
||||||
|
Array constructor to initialize subclass instances that are exotic Array
|
||||||
|
objects.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class A extends Array {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new A();
|
||||||
|
});
|
||||||
|
|
||||||
|
class A2 extends Array {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new A2();
|
Loading…
x
Reference in New Issue
Block a user