Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Coverage: Array.prototype.item, String.prototype.item, TypedArray.prototype.item. Closes gh-2809, gh-2810, gh-2811 #2812

Merged
merged 1 commit into from
Sep 24, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions features.txt
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,12 @@ logical-assignment-operators
# https://github.com/tc39/proposal-atomics-wait-async
Atomics.waitAsync

# Item Method
# https://github.com/tc39/proposal-item-method
Array.prototype.item
String.prototype.item
TypedArray.prototype.item

## Standard language features
#
# Language features that have been included in a published version of the
Expand Down
27 changes: 27 additions & 0 deletions test/built-ins/Array/prototype/item/index-argument-tointeger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-array.prototype.item
description: >
Property type and descriptor.
info: |
Array.prototype.item( index )

Let relativeIndex be ? ToInteger(index).

features: [Array.prototype.item]
---*/
assert.sameValue(typeof Array.prototype.item, 'function');

let valueOfCallCount = 0;
let index = {
valueOf() {
valueOfCallCount++;
return 1;
}
};

let a = [0,1,2,3];

assert.sameValue(a.item(index), 1, 'a.item({valueOf() {valueOfCallCount++; return 1;}}) must return 1');
assert.sameValue(valueOfCallCount, 1, 'The value of `valueOfCallCount` is 1');
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-array.prototype.item
description: >
Property type and descriptor.
info: |
Array.prototype.item( index )

Let relativeIndex be ? ToInteger(index).

features: [Array.prototype.item]
---*/
assert.sameValue(typeof Array.prototype.item, 'function');

let a = [0,1,2,3];

assert.throws(TypeError, () => {
a.item(Symbol());
}, '`a.item(Symbol())` throws TypeError');
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-array.prototype.item
description: >
Property type and descriptor.
info: |
Array.prototype.item( index )

Let relativeIndex be ? ToInteger(index).

features: [Array.prototype.item]
---*/
assert.sameValue(typeof Array.prototype.item, 'function');

let a = [0,1,2,3];

assert.sameValue(a.item(false), 0, 'a.item(false) must return 0');
assert.sameValue(a.item(null), 0, 'a.item(null) must return 0');
assert.sameValue(a.item(undefined), 0, 'a.item(undefined) must return 0');
assert.sameValue(a.item(""), 0, 'a.item("") must return 0');
assert.sameValue(a.item(function() {}), 0, 'a.item(function() {}) must return 0');
assert.sameValue(a.item([]), 0, 'a.item([]) must return 0');

assert.sameValue(a.item(true), 1, 'a.item(true) must return 1');
assert.sameValue(a.item("1"), 1, 'a.item("1") must return 1');
24 changes: 24 additions & 0 deletions test/built-ins/Array/prototype/item/length.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-array.prototype.item
description: >
Array.prototype.item.length value and descriptor.
info: |
Array.prototype.item( index )

17 ECMAScript Standard Built-in Objects

includes: [propertyHelper.js]
features: [Array.prototype.item]
---*/
assert.sameValue(typeof Array.prototype.item, 'function');

assert.sameValue(
Array.prototype.item.length, 1,
'The value of Array.prototype.item.length is 1'
);

verifyNotEnumerable(Array.prototype.item, 'length');
verifyNotWritable(Array.prototype.item, 'length');
verifyConfigurable(Array.prototype.item, 'length');
24 changes: 24 additions & 0 deletions test/built-ins/Array/prototype/item/name.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-array.prototype.item
description: >
Array.prototype.item.name value and descriptor.
info: |
Array.prototype.item( index )

17 ECMAScript Standard Built-in Objects

includes: [propertyHelper.js]
features: [Array.prototype.item]
---*/
assert.sameValue(typeof Array.prototype.item, 'function');

assert.sameValue(
Array.prototype.item.name, 'item',
'The value of Array.prototype.item.name is "item"'
);

verifyNotEnumerable(Array.prototype.item, 'name');
verifyNotWritable(Array.prototype.item, 'name');
verifyConfigurable(Array.prototype.item, 'name');
24 changes: 24 additions & 0 deletions test/built-ins/Array/prototype/item/prop-desc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-array.prototype.item
description: >
Property type and descriptor.
info: |
Array.prototype.item( index )

17 ECMAScript Standard Built-in Objects
includes: [propertyHelper.js]
features: [Array.prototype.item]
---*/
assert.sameValue(typeof Array.prototype.item, 'function');

assert.sameValue(
typeof Array.prototype.item,
'function',
'The value of `typeof Array.prototype.item` is "function"'
);

verifyNotEnumerable(Array.prototype, 'item');
verifyWritable(Array.prototype, 'item');
verifyConfigurable(Array.prototype, 'item');
22 changes: 22 additions & 0 deletions test/built-ins/Array/prototype/item/return-abrupt-from-this.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-array.prototype.item
description: >
Return abrupt from ToObject(this value).
info: |
Array.prototype.item( index )

Let O be ? ToObject(this value).

features: [Array.prototype.item]
---*/
assert.sameValue(typeof Array.prototype.item, 'function');

assert.throws(TypeError, () => {
Array.prototype.item.call(undefined);
}, '`Array.prototype.item.call(undefined)` throws TypeError');

assert.throws(TypeError, () => {
Array.prototype.item.call(null);
}, '`Array.prototype.item.call(null)` throws TypeError');
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-array.prototype.item
description: >
Returns the item value at the specified relative index
info: |
Array.prototypeitem ( )

Let O be ? ToObject(this value).
Let len be ? LengthOfArrayLike(O).
Let relativeIndex be ? ToInteger(index).
If relativeIndex ≥ 0, then
Let k be relativeIndex.
Else,
Let k be len + relativeIndex.
If k < 0 or k ≥ len, then return undefined.
Return ? Get(O, ! ToString(k)).

features: [Array.prototype.item]
---*/
assert.sameValue(typeof Array.prototype.item, 'function');

let a = [1, 2, 3, 4, ,5];

assert.sameValue(a.item(0), 1, 'a.item(0) must return 1');
assert.sameValue(a.item(-1), 5, 'a.item(-1) must return 5');
assert.sameValue(a.item(-2), undefined, 'a.item(-2) must return undefined');
assert.sameValue(a.item(-3), 4, 'a.item(-3) must return 4');
assert.sameValue(a.item(-4), 3, 'a.item(-4) must return 3');
31 changes: 31 additions & 0 deletions test/built-ins/Array/prototype/item/returns-item.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-array.prototype.item
description: >
Returns the item value at the specified index
info: |
Array.prototypeitem ( )

Let O be ? ToObject(this value).
Let len be ? LengthOfArrayLike(O).
Let relativeIndex be ? ToInteger(index).
If relativeIndex ≥ 0, then
Let k be relativeIndex.
Else,
Let k be len + relativeIndex.
If k < 0 or k ≥ len, then return undefined.
Return ? Get(O, ! ToString(k)).

features: [Array.prototype.item]
---*/
assert.sameValue(typeof Array.prototype.item, 'function');

let a = [1, 2, 3, 4,,5];

assert.sameValue(a.item(0), 1, 'a.item(0) must return 1');
assert.sameValue(a.item(1), 2, 'a.item(1) must return 2');
assert.sameValue(a.item(2), 3, 'a.item(2) must return 3');
assert.sameValue(a.item(3), 4, 'a.item(3) must return 4');
assert.sameValue(a.item(4), undefined, 'a.item(4) must return undefined');
assert.sameValue(a.item(5), 5, 'a.item(5) must return 5');
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-array.prototype.item
description: >
Returns the item value at the specified index, respecting holes in sparse arrays.
info: |
Array.prototypeitem ( )

Let O be ? ToObject(this value).
Let len be ? LengthOfArrayLike(O).
Let relativeIndex be ? ToInteger(index).
If relativeIndex ≥ 0, then
Let k be relativeIndex.
Else,
Let k be len + relativeIndex.
If k < 0 or k ≥ len, then return undefined.
Return ? Get(O, ! ToString(k)).

features: [Array.prototype.item]
---*/
assert.sameValue(
typeof Array.prototype.item,
'function',
'The value of `typeof Array.prototype.item` is "function"'
);

let a = [0, 1, , 3, 4, , 6];

assert.sameValue(a.item(0), 0, 'a.item(0) must return 0');
assert.sameValue(a.item(1), 1, 'a.item(1) must return 1');
assert.sameValue(a.item(2), undefined, 'a.item(2) must return undefined');
assert.sameValue(a.item(3), 3, 'a.item(3) must return 3');
assert.sameValue(a.item(4), 4, 'a.item(4) must return 4');
assert.sameValue(a.item(5), undefined, 'a.item(5) must return undefined');
assert.sameValue(a.item(6), 6, 'a.item(6) must return 6');
assert.sameValue(a.item(-0), 0, 'a.item(-0) must return 0');
assert.sameValue(a.item(-1), 6, 'a.item(-1) must return 6');
assert.sameValue(a.item(-2), undefined, 'a.item(-2) must return undefined');
assert.sameValue(a.item(-3), 4, 'a.item(-3) must return 4');
assert.sameValue(a.item(-4), 3, 'a.item(-4) must return 3');
assert.sameValue(a.item(-5), undefined, 'a.item(-5) must return undefined');
assert.sameValue(a.item(-6), 1, 'a.item(-6) must return 1');
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-array.prototype.item
description: >
Returns undefined if the specified index less than or greater than the available index range.
info: |
Array.prototype.item( index )

If k < 0 or k ≥ len, then return undefined.
features: [Array.prototype.item]
---*/
assert.sameValue(typeof Array.prototype.item, 'function');

let a = [];

assert.sameValue(a.item(-2), undefined, 'a.item(-2) must return undefined'); // wrap around the end
assert.sameValue(a.item(0), undefined, 'a.item(0) must return undefined');
assert.sameValue(a.item(1), undefined, 'a.item(1) must return undefined');

Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-string.prototype.item
description: >
Property type and descriptor.
info: |
String.prototype.item( index )

Let relativeIndex be ? ToInteger(index).

features: [String.prototype.item]
---*/
assert.sameValue(typeof String.prototype.item, 'function');

let valueOfCallCount = 0;
let index = {
valueOf() {
valueOfCallCount++;
return 1;
}
};

let s = "01";

assert.sameValue(s.item(index), '1', 's.item({valueOf() {valueOfCallCount++; return 1;}}) must return 1');
assert.sameValue(valueOfCallCount, 1, 'The value of `valueOfCallCount` is 1');
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-string.prototype.item
description: >
Property type and descriptor.
info: |
String.prototype.item( index )

Let relativeIndex be ? ToInteger(index).

features: [String.prototype.item]
---*/
assert.sameValue(typeof String.prototype.item, 'function');

let s = "01";

assert.throws(TypeError, () => {
s.item(Symbol());
}, '`s.item(Symbol())` throws TypeError');
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-string.prototype.item
description: >
Property type and descriptor.
info: |
String.prototype.item( index )

Let relativeIndex be ? ToInteger(index).

features: [String.prototype.item]
---*/
assert.sameValue(typeof String.prototype.item, 'function');

let s = "01";

assert.sameValue(s.item(false), '0', 's.item(false) must return 0');
assert.sameValue(s.item(null), '0', 's.item(null) must return 0');
assert.sameValue(s.item(undefined), '0', 's.item(undefined) must return 0');
assert.sameValue(s.item(""), '0', 's.item("") must return 0');
assert.sameValue(s.item(function() {}), '0', 's.item(function() {}) must return 0');
assert.sameValue(s.item([]), '0', 's.item([]) must return 0');

assert.sameValue(s.item(true), '1', 's.item(true) must return 1');
assert.sameValue(s.item("1"), '1', 's.item("1") must return 1');
Loading