Title: [269986] trunk/JSTests
Revision
269986
Author
ross.kirsl...@sony.com
Date
2020-11-18 14:26:29 -0800 (Wed, 18 Nov 2020)

Log Message

Update test262 (2020.11.18)
https://bugs.webkit.org/show_bug.cgi?id=219109

Reviewed by Yusuke Suzuki.

* test262/config.yaml:
* test262/expectations.yaml:
* test262/latest-changes-summary.txt:
* test262/test/:
* test262/test262-Revision.txt:

Modified Paths

Added Paths

Removed Paths

  • trunk/JSTests/test262/test/built-ins/Array/prototype/item/
  • trunk/JSTests/test262/test/built-ins/String/prototype/item/
  • trunk/JSTests/test262/test/built-ins/TypedArray/prototype/item/

Diff

Modified: trunk/JSTests/ChangeLog (269985 => 269986)


--- trunk/JSTests/ChangeLog	2020-11-18 22:04:27 UTC (rev 269985)
+++ trunk/JSTests/ChangeLog	2020-11-18 22:26:29 UTC (rev 269986)
@@ -1,3 +1,16 @@
+2020-11-18  Ross Kirsling  <ross.kirsl...@sony.com>
+
+        Update test262 (2020.11.18)
+        https://bugs.webkit.org/show_bug.cgi?id=219109
+
+        Reviewed by Yusuke Suzuki.
+
+        * test262/config.yaml:
+        * test262/expectations.yaml:
+        * test262/latest-changes-summary.txt:
+        * test262/test/:
+        * test262/test262-Revision.txt:
+
 2020-11-18  Yusuke Suzuki  <ysuz...@apple.com>
 
         Unreviewed, relanding r269940

Modified: trunk/JSTests/test262/config.yaml (269985 => 269986)


--- trunk/JSTests/test262/config.yaml	2020-11-18 22:04:27 UTC (rev 269985)
+++ trunk/JSTests/test262/config.yaml	2020-11-18 22:26:29 UTC (rev 269986)
@@ -8,6 +8,8 @@
   Intl.DateTimeFormat-dayPeriod: useIntlDateTimeFormatDayPeriod
   SharedArrayBuffer: useSharedArrayBuffer
   Atomics: useSharedArrayBuffer
+  Array.prototype.at: useAtMethod
+  TypedArray.prototype.at: useAtMethod
 skip:
   features:
     - Atomics.waitAsync
@@ -26,12 +28,7 @@
     - top-level-await
     - Intl.ListFormat
 
-    # remove once it's been renamed in test262
-    - Array.prototype.item
-    - TypedArray.prototype.item
-
-    # remove once it's no longer in test262
-    - String.prototype.item
+    - String.prototype.at
   paths:
     - test/built-ins/DataView/prototype/getBigInt64
     - test/built-ins/DataView/prototype/getBigUint64

Modified: trunk/JSTests/test262/expectations.yaml (269985 => 269986)


--- trunk/JSTests/test262/expectations.yaml	2020-11-18 22:04:27 UTC (rev 269985)
+++ trunk/JSTests/test262/expectations.yaml	2020-11-18 22:26:29 UTC (rev 269986)
@@ -823,6 +823,9 @@
 test/built-ins/RegExp/quantifier-integer-limit.js:
   default: 'SyntaxError: Invalid regular _expression_: number too large in {} quantifier'
   strict mode: 'SyntaxError: Invalid regular _expression_: number too large in {} quantifier'
+test/built-ins/TypedArray/prototype/at/prop-desc.js:
+  default: 'Test262Error: descriptor should be writable'
+  strict mode: 'Test262Error: descriptor should be writable'
 test/built-ins/TypedArray/prototype/includes/detached-buffer-tointeger.js:
   default: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all (Testing with Float64Array.)'
   strict mode: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all (Testing with Float64Array.)'
@@ -892,9 +895,6 @@
 test/built-ins/TypedArrayConstructors/ctors/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js:
   default: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all (Testing with Float64Array.)'
   strict mode: 'Test262Error: Expected a TypeError to be thrown but no exception was thrown at all (Testing with Float64Array.)'
-test/built-ins/TypedArrayConstructors/internals/GetOwnProperty/index-prop-desc.js:
-  default: 'Test262Error: Expected SameValue(«43», «42») to be true (Testing with Float64Array.)'
-  strict mode: 'Test262Error: Expected SameValue(«43», «42») to be true (Testing with Float64Array.)'
 test/built-ins/TypedArrayConstructors/internals/Set/key-is-minus-zero.js:
   default: 'Test262Error: Reflect.set(sample, "-0", 1) must return false Expected SameValue(«true», «false») to be true (Testing with Float64Array.)'
   strict mode: 'Test262Error: Reflect.set(sample, "-0", 1) must return false Expected SameValue(«true», «false») to be true (Testing with Float64Array.)'

Modified: trunk/JSTests/test262/latest-changes-summary.txt (269985 => 269986)


--- trunk/JSTests/test262/latest-changes-summary.txt	2020-11-18 22:04:27 UTC (rev 269985)
+++ trunk/JSTests/test262/latest-changes-summary.txt	2020-11-18 22:26:29 UTC (rev 269986)
@@ -1,73 +1,55 @@
-M harness/atomicsHelper.js
-M test/built-ins/Atomics/waitAsync/bigint/true-for-timeout.js
-M test/built-ins/Atomics/waitAsync/returns-result-object-value-is-promise-resolves-to-timed-out.js
-M test/built-ins/Atomics/waitAsync/true-for-timeout.js
-R100 test/built-ins/Object/seal/object-seal-the-configurable-attribute-of-all-own-properties-of-o-are-set-from-true-to-false-and-other-attributes-of-the-property-are-unaltered.js test/built-ins/Object/seal/configurable-attribute-all-own-properties-set-from-true-to-false-property-are-unaltered.js
-R100 test/built-ins/Object/seal/object-seal-the-configurable-attribute-of-own-accessor-property-of-o-is-set-from-true-to-false-and-other-attributes-of-the-property-are-unaltered.js test/built-ins/Object/seal/configurable-attribute-own-accessor-property-set-from-true-to-false-property-are-unaltered.js
-M test/built-ins/Object/seal/seal-finalizationregistry.js
-M test/built-ins/Object/seal/seal-weakref.js
-D test/built-ins/String/prototype/split/arguments-are-objects-and-instance-is-string-first-object-have-overrided-to-string-function-and-value-of-function-that-throw-exception-second-object-have-overrided-value-of-function-that-throw-exception.js
-R100 test/built-ins/String/prototype/split/arguments-are-objects-and-instance-is-string-first-object-have-overrided-to-string-function-second-object-have-overrided-value-of-function-that-throw-exception.js test/built-ins/String/prototype/split/separator-override-tostring-limit-override-valueof-throws.js
-R100 test/built-ins/String/prototype/split/arguments-are-objects-and-instance-is-string-first-object-have-overrided-to-string-function-second-object-have-overrided-value-of-function-and-to-string-function-that-throw-exception.js test/built-ins/String/prototype/split/separator-override-tostring-limit-override-valueof-tostring-throws.js
-R100 test/built-ins/String/prototype/split/arguments-are-objects-and-instance-is-string-first-object-have-overrided-to-string-function-second-object-have-overrided-value-of-and-to-string-functions.js test/built-ins/String/prototype/split/separator-override-tostring-limit-override-valueof-tostring.js
-R100 test/built-ins/String/prototype/split/arguments-are-objects-and-instance-is-string-first-object-have-overrided-to-string-function-second-object-have-overrided-value-of-function.js test/built-ins/String/prototype/split/separator-override-tostring-limit-override-valueof.js
-R100 test/built-ins/String/prototype/split/arguments-are-objects-and-instance-is-string-first-object-have-overrided-to-string-function-that-throw-exception-second-object-have-overrided-value-of-function-that-throw-exception.js test/built-ins/String/prototype/split/separator-override-tostring-throws-limit-override-valueof-throws.js
-R100 test/built-ins/String/prototype/split/argument-is-function-and-instance-is-string-object-object-have-overrided-to-string-and-value-of-functions.js test/built-ins/String/prototype/split/separator-override-valueof.js
-A test/built-ins/String/prototype/split/transferred-to-custom.js
-R100 test/built-ins/String/prototype/split/argument-is-object-and-instance-is-number-object-have-overrided-to-string-function-that-return-regexp.js test/built-ins/String/prototype/split/transferred-to-number-separator-override-tostring-returns-regexp.js
-A test/built-ins/String/prototype/split/valueOf-is-called-for-limit-argument.js
-M test/built-ins/TypedArray/prototype/every/BigInt/callbackfn-detachbuffer.js
-M test/built-ins/TypedArray/prototype/every/callbackfn-detachbuffer.js
-M test/built-ins/TypedArray/prototype/filter/BigInt/callbackfn-detachbuffer.js
-M test/built-ins/TypedArray/prototype/filter/callbackfn-detachbuffer.js
-M test/built-ins/TypedArray/prototype/find/BigInt/predicate-may-detach-buffer.js
-M test/built-ins/TypedArray/prototype/find/predicate-may-detach-buffer.js
-M test/built-ins/TypedArray/prototype/findIndex/predicate-may-detach-buffer.js
-M test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-detachbuffer.js
-M test/built-ins/TypedArray/prototype/forEach/callbackfn-detachbuffer.js
-M test/built-ins/TypedArray/prototype/map/BigInt/callbackfn-detachbuffer.js
-M test/built-ins/TypedArray/prototype/map/callbackfn-detachbuffer.js
-M test/built-ins/TypedArray/prototype/reduce/BigInt/callbackfn-detachbuffer.js
-M test/built-ins/TypedArray/prototype/reduce/callbackfn-detachbuffer.js
-M test/built-ins/TypedArray/prototype/reduceRight/BigInt/callbackfn-detachbuffer.js
-M test/built-ins/TypedArray/prototype/reduceRight/callbackfn-detachbuffer.js
-M test/built-ins/TypedArray/prototype/slice/BigInt/detached-buffer-custom-ctor-other-targettype.js
-M test/built-ins/TypedArray/prototype/slice/detached-buffer-custom-ctor-other-targettype.js
-M test/built-ins/TypedArray/prototype/some/BigInt/callbackfn-detachbuffer.js
-M test/built-ins/TypedArray/prototype/some/callbackfn-detachbuffer.js
-M test/built-ins/TypedArrayConstructors/internals/DefineOwnProperty/BigInt/detached-buffer-realm.js
-M test/built-ins/TypedArrayConstructors/internals/DefineOwnProperty/BigInt/key-is-numericindex-desc-configurable.js
-M test/built-ins/TypedArrayConstructors/internals/DefineOwnProperty/BigInt/key-is-numericindex.js
-M test/built-ins/TypedArrayConstructors/internals/DefineOwnProperty/key-is-numericindex-desc-configurable.js
-M test/built-ins/TypedArrayConstructors/internals/DefineOwnProperty/key-is-numericindex.js
-M test/built-ins/TypedArrayConstructors/internals/GetOwnProperty/BigInt/index-prop-desc.js
+R062 test/built-ins/Array/prototype/item/index-argument-tointeger.js test/built-ins/Array/prototype/at/index-argument-tointeger.js
+R057 test/built-ins/Array/prototype/item/index-non-numeric-argument-tointeger-invalid.js test/built-ins/Array/prototype/at/index-non-numeric-argument-tointeger-invalid.js
+A test/built-ins/Array/prototype/at/index-non-numeric-argument-tointeger.js
+A test/built-ins/Array/prototype/at/length.js
+A test/built-ins/Array/prototype/at/name.js
+A test/built-ins/Array/prototype/at/prop-desc.js
+A test/built-ins/Array/prototype/at/return-abrupt-from-this.js
+R053 test/built-ins/Array/prototype/item/returns-item-relative-index.js test/built-ins/Array/prototype/at/returns-item-relative-index.js
+R050 test/built-ins/Array/prototype/item/returns-item.js test/built-ins/Array/prototype/at/returns-item.js
+A test/built-ins/Array/prototype/at/returns-undefined-for-holes-in-sparse-arrays.js
+A test/built-ins/Array/prototype/at/returns-undefined-for-out-of-range-index.js
+D test/built-ins/Array/prototype/item/index-non-numeric-argument-tointeger.js
+D test/built-ins/Array/prototype/item/length.js
+D test/built-ins/Array/prototype/item/name.js
+D test/built-ins/Array/prototype/item/prop-desc.js
+D test/built-ins/Array/prototype/item/return-abrupt-from-this.js
+D test/built-ins/Array/prototype/item/returns-undefined-for-holes-in-sparse-arrays.js
+D test/built-ins/Array/prototype/item/returns-undefined-for-out-of-range-index.js
+R062 test/built-ins/String/prototype/item/index-argument-tointeger.js test/built-ins/String/prototype/at/index-argument-tointeger.js
+R056 test/built-ins/String/prototype/item/index-non-numeric-argument-tointeger-invalid.js test/built-ins/String/prototype/at/index-non-numeric-argument-tointeger-invalid.js
+A test/built-ins/String/prototype/at/index-non-numeric-argument-tointeger.js
+A test/built-ins/String/prototype/at/length.js
+A test/built-ins/String/prototype/at/name.js
+A test/built-ins/String/prototype/at/prop-desc.js
+A test/built-ins/String/prototype/at/return-abrupt-from-this.js
+R052 test/built-ins/String/prototype/item/returns-code-unit.js test/built-ins/String/prototype/at/returns-code-unit.js
+R056 test/built-ins/String/prototype/item/returns-item-relative-index.js test/built-ins/String/prototype/at/returns-item-relative-index.js
+R053 test/built-ins/String/prototype/item/returns-item.js test/built-ins/String/prototype/at/returns-item.js
+A test/built-ins/String/prototype/at/returns-undefined-for-out-of-range-index.js
+D test/built-ins/String/prototype/item/index-non-numeric-argument-tointeger.js
+D test/built-ins/String/prototype/item/length.js
+D test/built-ins/String/prototype/item/name.js
+D test/built-ins/String/prototype/item/prop-desc.js
+D test/built-ins/String/prototype/item/return-abrupt-from-this.js
+D test/built-ins/String/prototype/item/returns-undefined-for-out-of-range-index.js
+R056 test/built-ins/TypedArray/prototype/item/index-argument-tointeger.js test/built-ins/TypedArray/prototype/at/index-argument-tointeger.js
+R050 test/built-ins/TypedArray/prototype/item/index-non-numeric-argument-tointeger-invalid.js test/built-ins/TypedArray/prototype/at/index-non-numeric-argument-tointeger-invalid.js
+A test/built-ins/TypedArray/prototype/at/index-non-numeric-argument-tointeger.js
+A test/built-ins/TypedArray/prototype/at/length.js
+A test/built-ins/TypedArray/prototype/at/name.js
+A test/built-ins/TypedArray/prototype/at/prop-desc.js
+A test/built-ins/TypedArray/prototype/at/return-abrupt-from-this.js
+R055 test/built-ins/TypedArray/prototype/item/returns-item-relative-index.js test/built-ins/TypedArray/prototype/at/returns-item-relative-index.js
+R053 test/built-ins/TypedArray/prototype/item/returns-item.js test/built-ins/TypedArray/prototype/at/returns-item.js
+A test/built-ins/TypedArray/prototype/at/returns-undefined-for-holes-in-sparse-arrays.js
+A test/built-ins/TypedArray/prototype/at/returns-undefined-for-out-of-range-index.js
+D test/built-ins/TypedArray/prototype/item/index-non-numeric-argument-tointeger.js
+D test/built-ins/TypedArray/prototype/item/length.js
+D test/built-ins/TypedArray/prototype/item/name.js
+D test/built-ins/TypedArray/prototype/item/prop-desc.js
+D test/built-ins/TypedArray/prototype/item/return-abrupt-from-this.js
+D test/built-ins/TypedArray/prototype/item/returns-undefined-for-holes-in-sparse-arrays.js
+D test/built-ins/TypedArray/prototype/item/returns-undefined-for-out-of-range-index.js
 M test/built-ins/TypedArrayConstructors/internals/GetOwnProperty/index-prop-desc.js
-M test/built-ins/TypedArrayConstructors/internals/Set/BigInt/detached-buffer-realm.js
-M test/built-ins/TypedArrayConstructors/internals/Set/BigInt/detached-buffer.js
-M test/built-ins/TypedArrayConstructors/internals/Set/BigInt/tonumber-value-detached-buffer.js
-M test/built-ins/TypedArrayConstructors/internals/Set/detached-buffer-realm.js
-M test/built-ins/TypedArrayConstructors/internals/Set/detached-buffer.js
-M test/built-ins/TypedArrayConstructors/internals/Set/tonumber-value-detached-buffer.js
-A test/intl402/DateTimeFormat/intl-legacy-constructed-symbol-on-unwrap.js
-A test/intl402/DateTimeFormat/intl-legacy-constructed-symbol.js
-A test/intl402/NumberFormat/intl-legacy-constructed-symbol-on-unwrap.js
-A test/intl402/NumberFormat/intl-legacy-constructed-symbol.js
-D test/language/eval-code/direct/arrow-fn-body-cntns-arguments-fn-decl-params-cntns-dflt-assignment-arrow-func-declare-arguments-assign-incl-def-param-arrow-arguments.js
-D test/language/eval-code/direct/arrow-fn-body-cntns-arguments-fn-decl-params-cntns-dflt-assignment-arrow-func-declare-arguments-assign.js
-A test/language/literals/string/legacy-non-octal-escape-sequence-1-strict-explicit-pragma.js
-A test/language/literals/string/legacy-non-octal-escape-sequence-2-strict-explicit-pragma.js
-A test/language/literals/string/legacy-non-octal-escape-sequence-3-strict-explicit-pragma.js
-A test/language/literals/string/legacy-non-octal-escape-sequence-4-strict-explicit-pragma.js
-A test/language/literals/string/legacy-non-octal-escape-sequence-5-strict-explicit-pragma.js
-A test/language/literals/string/legacy-non-octal-escape-sequence-6-strict-explicit-pragma.js
-A test/language/literals/string/legacy-non-octal-escape-sequence-7-strict-explicit-pragma.js
-A test/language/literals/string/legacy-non-octal-escape-sequence-8-strict-explicit-pragma.js
-A test/language/literals/string/legacy-non-octal-escape-sequence-9-strict-explicit-pragma.js
-M test/language/module-code/export-expname-binding-string.js
-A test/language/module-code/export-expname-from-as-unpaired-surrogate.js
-A test/language/module-code/export-expname-from-star-unpaired-surrogate.js
-A test/language/module-code/export-expname-from-unpaired-surrogate.js
-A test/language/module-code/export-expname-import-unpaired-surrogate.js
-A test/language/module-code/export-expname-string-binding.js
-A test/language/module-code/export-expname-unpaired-surrogate.js
-M test/language/module-code/export-expname_FIXTURE.js
\ No newline at end of file
+M test/language/global-code/decl-lex-configurable-global.js
\ No newline at end of file

Copied: trunk/JSTests/test262/test/built-ins/Array/prototype/at/index-argument-tointeger.js (from rev 269985, trunk/JSTests/test262/test/built-ins/Array/prototype/item/index-argument-tointeger.js) (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/Array/prototype/at/index-argument-tointeger.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Array/prototype/at/index-argument-tointeger.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Property type and descriptor.
+info: |
+  Array.prototype.at( index )
+
+  Let relativeIndex be ? ToInteger(index).
+
+features: [Array.prototype.at]
+---*/
+assert.sameValue(typeof Array.prototype.at, 'function');
+
+let valueOfCallCount = 0;
+let index = {
+  valueOf() {
+    valueOfCallCount++;
+    return 1;
+  }
+};
+
+let a = [0,1,2,3];
+
+assert.sameValue(a.at(index), 1, 'a.at({valueOf() {valueOfCallCount++; return 1;}}) must return 1');
+assert.sameValue(valueOfCallCount, 1, 'The value of `valueOfCallCount` is 1');

Copied: trunk/JSTests/test262/test/built-ins/Array/prototype/at/index-non-numeric-argument-tointeger-invalid.js (from rev 269985, trunk/JSTests/test262/test/built-ins/Array/prototype/item/index-non-numeric-argument-tointeger-invalid.js) (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/Array/prototype/at/index-non-numeric-argument-tointeger-invalid.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Array/prototype/at/index-non-numeric-argument-tointeger-invalid.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Property type and descriptor.
+info: |
+  Array.prototype.at( index )
+
+  Let relativeIndex be ? ToInteger(index).
+
+features: [Array.prototype.at]
+---*/
+assert.sameValue(typeof Array.prototype.at, 'function');
+
+let a = [0,1,2,3];
+
+assert.throws(TypeError, () => {
+  a.at(Symbol());
+}, '`a.at(Symbol())` throws TypeError');

Added: trunk/JSTests/test262/test/built-ins/Array/prototype/at/index-non-numeric-argument-tointeger.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/Array/prototype/at/index-non-numeric-argument-tointeger.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Array/prototype/at/index-non-numeric-argument-tointeger.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Property type and descriptor.
+info: |
+  Array.prototype.at( index )
+
+  Let relativeIndex be ? ToInteger(index).
+
+features: [Array.prototype.at]
+---*/
+assert.sameValue(typeof Array.prototype.at, 'function');
+
+let a = [0,1,2,3];
+
+assert.sameValue(a.at(false), 0, 'a.at(false) must return 0');
+assert.sameValue(a.at(null), 0, 'a.at(null) must return 0');
+assert.sameValue(a.at(undefined), 0, 'a.at(undefined) must return 0');
+assert.sameValue(a.at(""), 0, 'a.at("") must return 0');
+assert.sameValue(a.at(function() {}), 0, 'a.at(function() {}) must return 0');
+assert.sameValue(a.at([]), 0, 'a.at([]) must return 0');
+
+assert.sameValue(a.at(true), 1, 'a.at(true) must return 1');
+assert.sameValue(a.at("1"), 1, 'a.at("1") must return 1');

Added: trunk/JSTests/test262/test/built-ins/Array/prototype/at/length.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/Array/prototype/at/length.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Array/prototype/at/length.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Array.prototype.at.length value and descriptor.
+info: |
+  Array.prototype.at( index )
+
+  17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+features: [Array.prototype.at]
+---*/
+assert.sameValue(typeof Array.prototype.at, 'function');
+
+assert.sameValue(
+  Array.prototype.at.length, 1,
+  'The value of Array.prototype.at.length is 1'
+);
+
+verifyNotEnumerable(Array.prototype.at, 'length');
+verifyNotWritable(Array.prototype.at, 'length');
+verifyConfigurable(Array.prototype.at, 'length');

Added: trunk/JSTests/test262/test/built-ins/Array/prototype/at/name.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/Array/prototype/at/name.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Array/prototype/at/name.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Array.prototype.at.name value and descriptor.
+info: |
+  Array.prototype.at( index )
+
+  17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+features: [Array.prototype.at]
+---*/
+assert.sameValue(typeof Array.prototype.at, 'function');
+
+assert.sameValue(
+  Array.prototype.at.name, 'at',
+  'The value of Array.prototype.at.name is "at"'
+);
+
+verifyProperty(Array.prototype.at, 'name', {
+  enumerable: false,
+  writable: false,
+  configurable: true
+});

Added: trunk/JSTests/test262/test/built-ins/Array/prototype/at/prop-desc.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/Array/prototype/at/prop-desc.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Array/prototype/at/prop-desc.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Property type and descriptor.
+info: |
+  Array.prototype.at( index )
+
+  17 ECMAScript Standard Built-in Objects
+includes: [propertyHelper.js]
+features: [Array.prototype.at]
+---*/
+assert.sameValue(typeof Array.prototype.at, 'function');
+
+assert.sameValue(
+  typeof Array.prototype.at,
+  'function',
+  'The value of `typeof Array.prototype.at` is "function"'
+);
+
+verifyProperty(Array.prototype, 'at', {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});

Added: trunk/JSTests/test262/test/built-ins/Array/prototype/at/return-abrupt-from-this.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/Array/prototype/at/return-abrupt-from-this.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Array/prototype/at/return-abrupt-from-this.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Return abrupt from ToObject(this value).
+info: |
+  Array.prototype.at( index )
+
+  Let O be ? ToObject(this value).
+
+features: [Array.prototype.at]
+---*/
+assert.sameValue(typeof Array.prototype.at, 'function');
+
+assert.throws(TypeError, () => {
+  Array.prototype.at.call(undefined);
+}, '`Array.prototype.at.call(undefined)` throws TypeError');
+
+assert.throws(TypeError, () => {
+  Array.prototype.at.call(null);
+}, '`Array.prototype.at.call(null)` throws TypeError');

Copied: trunk/JSTests/test262/test/built-ins/Array/prototype/at/returns-item-relative-index.js (from rev 269985, trunk/JSTests/test262/test/built-ins/Array/prototype/item/returns-item-relative-index.js) (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/Array/prototype/at/returns-item-relative-index.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Array/prototype/at/returns-item-relative-index.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Returns the item value at the specified relative index
+info: |
+  Array.prototype.at ( )
+
+  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.at]
+---*/
+assert.sameValue(typeof Array.prototype.at, 'function');
+
+let a = [1, 2, 3, 4, ,5];
+
+assert.sameValue(a.at(0), 1, 'a.at(0) must return 1');
+assert.sameValue(a.at(-1), 5, 'a.at(-1) must return 5');
+assert.sameValue(a.at(-2), undefined, 'a.at(-2) must return undefined');
+assert.sameValue(a.at(-3), 4, 'a.at(-3) must return 4');
+assert.sameValue(a.at(-4), 3, 'a.at(-4) must return 3');

Copied: trunk/JSTests/test262/test/built-ins/Array/prototype/at/returns-item.js (from rev 269985, trunk/JSTests/test262/test/built-ins/Array/prototype/item/returns-item.js) (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/Array/prototype/at/returns-item.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Array/prototype/at/returns-item.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Returns the item value at the specified index
+info: |
+  Array.prototype.at ( )
+
+  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.at]
+---*/
+assert.sameValue(typeof Array.prototype.at, 'function');
+
+let a = [1, 2, 3, 4,,5];
+
+assert.sameValue(a.at(0), 1, 'a.at(0) must return 1');
+assert.sameValue(a.at(1), 2, 'a.at(1) must return 2');
+assert.sameValue(a.at(2), 3, 'a.at(2) must return 3');
+assert.sameValue(a.at(3), 4, 'a.at(3) must return 4');
+assert.sameValue(a.at(4), undefined, 'a.at(4) must return undefined');
+assert.sameValue(a.at(5), 5, 'a.at(5) must return 5');

Added: trunk/JSTests/test262/test/built-ins/Array/prototype/at/returns-undefined-for-holes-in-sparse-arrays.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/Array/prototype/at/returns-undefined-for-holes-in-sparse-arrays.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Array/prototype/at/returns-undefined-for-holes-in-sparse-arrays.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Returns the item value at the specified index, respecting holes in sparse arrays.
+info: |
+  Array.prototype.at ( )
+
+  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.at]
+---*/
+assert.sameValue(
+  typeof Array.prototype.at,
+  'function',
+  'The value of `typeof Array.prototype.at` is "function"'
+);
+
+let a = [0, 1, , 3, 4, , 6];
+
+assert.sameValue(a.at(0), 0, 'a.at(0) must return 0');
+assert.sameValue(a.at(1), 1, 'a.at(1) must return 1');
+assert.sameValue(a.at(2), undefined, 'a.at(2) must return undefined');
+assert.sameValue(a.at(3), 3, 'a.at(3) must return 3');
+assert.sameValue(a.at(4), 4, 'a.at(4) must return 4');
+assert.sameValue(a.at(5), undefined, 'a.at(5) must return undefined');
+assert.sameValue(a.at(6), 6, 'a.at(6) must return 6');
+assert.sameValue(a.at(-0), 0, 'a.at(-0) must return 0');
+assert.sameValue(a.at(-1), 6, 'a.at(-1) must return 6');
+assert.sameValue(a.at(-2), undefined, 'a.at(-2) must return undefined');
+assert.sameValue(a.at(-3), 4, 'a.at(-3) must return 4');
+assert.sameValue(a.at(-4), 3, 'a.at(-4) must return 3');
+assert.sameValue(a.at(-5), undefined, 'a.at(-5) must return undefined');
+assert.sameValue(a.at(-6), 1, 'a.at(-6) must return 1');

Added: trunk/JSTests/test262/test/built-ins/Array/prototype/at/returns-undefined-for-out-of-range-index.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/Array/prototype/at/returns-undefined-for-out-of-range-index.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Array/prototype/at/returns-undefined-for-out-of-range-index.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Returns undefined if the specified index less than or greater than the available index range.
+info: |
+  Array.prototype.at( index )
+
+  If k < 0 or k ≥ len, then return undefined.
+features: [Array.prototype.at]
+---*/
+assert.sameValue(typeof Array.prototype.at, 'function');
+
+let a = [];
+
+assert.sameValue(a.at(-2), undefined, 'a.at(-2) must return undefined'); // wrap around the end
+assert.sameValue(a.at(0), undefined, 'a.at(0) must return undefined');
+assert.sameValue(a.at(1), undefined, 'a.at(1) must return undefined');
+

Copied: trunk/JSTests/test262/test/built-ins/String/prototype/at/index-argument-tointeger.js (from rev 269985, trunk/JSTests/test262/test/built-ins/String/prototype/item/index-argument-tointeger.js) (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/String/prototype/at/index-argument-tointeger.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/String/prototype/at/index-argument-tointeger.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Property type and descriptor.
+info: |
+  String.prototype.at( index )
+
+  Let relativeIndex be ? ToInteger(index).
+
+features: [String.prototype.at]
+---*/
+assert.sameValue(typeof String.prototype.at, 'function');
+
+let valueOfCallCount = 0;
+let index = {
+  valueOf() {
+    valueOfCallCount++;
+    return 1;
+  }
+};
+
+let s = "01";
+
+assert.sameValue(s.at(index), '1', 's.at({valueOf() {valueOfCallCount++; return 1;}}) must return 1');
+assert.sameValue(valueOfCallCount, 1, 'The value of `valueOfCallCount` is 1');

Copied: trunk/JSTests/test262/test/built-ins/String/prototype/at/index-non-numeric-argument-tointeger-invalid.js (from rev 269985, trunk/JSTests/test262/test/built-ins/String/prototype/item/index-non-numeric-argument-tointeger-invalid.js) (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/String/prototype/at/index-non-numeric-argument-tointeger-invalid.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/String/prototype/at/index-non-numeric-argument-tointeger-invalid.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Property type and descriptor.
+info: |
+  String.prototype.at( index )
+
+  Let relativeIndex be ? ToInteger(index).
+
+features: [String.prototype.at]
+---*/
+assert.sameValue(typeof String.prototype.at, 'function');
+
+let s = "01";
+
+assert.throws(TypeError, () => {
+  s.at(Symbol());
+}, '`s.at(Symbol())` throws TypeError');

Added: trunk/JSTests/test262/test/built-ins/String/prototype/at/index-non-numeric-argument-tointeger.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/String/prototype/at/index-non-numeric-argument-tointeger.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/String/prototype/at/index-non-numeric-argument-tointeger.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Property type and descriptor.
+info: |
+  String.prototype.at( index )
+
+  Let relativeIndex be ? ToInteger(index).
+
+features: [String.prototype.at]
+---*/
+assert.sameValue(typeof String.prototype.at, 'function');
+
+let s = "01";
+
+assert.sameValue(s.at(false), '0', 's.at(false) must return 0');
+assert.sameValue(s.at(null), '0', 's.at(null) must return 0');
+assert.sameValue(s.at(undefined), '0', 's.at(undefined) must return 0');
+assert.sameValue(s.at(""), '0', 's.at("") must return 0');
+assert.sameValue(s.at(function() {}), '0', 's.at(function() {}) must return 0');
+assert.sameValue(s.at([]), '0', 's.at([]) must return 0');
+
+assert.sameValue(s.at(true), '1', 's.at(true) must return 1');
+assert.sameValue(s.at("1"), '1', 's.at("1") must return 1');

Added: trunk/JSTests/test262/test/built-ins/String/prototype/at/length.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/String/prototype/at/length.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/String/prototype/at/length.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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-string.prototype.at
+description: >
+  String.prototype.at.length value and descriptor.
+info: |
+  String.prototype.at( index )
+
+  17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+features: [String.prototype.at]
+---*/
+assert.sameValue(typeof String.prototype.at, 'function');
+
+assert.sameValue(
+  String.prototype.at.length, 1,
+  'The value of String.prototype.at.length is 1'
+);
+
+verifyNotEnumerable(String.prototype.at, 'length');
+verifyNotWritable(String.prototype.at, 'length');
+verifyConfigurable(String.prototype.at, 'length');

Added: trunk/JSTests/test262/test/built-ins/String/prototype/at/name.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/String/prototype/at/name.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/String/prototype/at/name.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  String.prototype.at.name value and descriptor.
+info: |
+  String.prototype.at( index )
+
+  17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+features: [String.prototype.at]
+---*/
+assert.sameValue(typeof String.prototype.at, 'function');
+
+assert.sameValue(
+  String.prototype.at.name, 'at',
+  'The value of String.prototype.at.name is "at"'
+);
+
+verifyProperty(String.prototype.at, 'name', {
+  enumerable: false,
+  writable: false,
+  configurable: true
+});

Added: trunk/JSTests/test262/test/built-ins/String/prototype/at/prop-desc.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/String/prototype/at/prop-desc.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/String/prototype/at/prop-desc.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Property type and descriptor.
+info: |
+  String.prototype.at( index )
+
+  17 ECMAScript Standard Built-in Objects
+includes: [propertyHelper.js]
+features: [String.prototype.at]
+---*/
+assert.sameValue(typeof String.prototype.at, 'function');
+
+assert.sameValue(
+  typeof String.prototype.at,
+  'function',
+  'The value of `typeof String.prototype.at` is "function"'
+);
+
+verifyProperty(String.prototype.at, 'name', {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});

Added: trunk/JSTests/test262/test/built-ins/String/prototype/at/return-abrupt-from-this.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/String/prototype/at/return-abrupt-from-this.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/String/prototype/at/return-abrupt-from-this.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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-string.prototype.at
+description: >
+  Return abrupt from RequireObjectCoercible(this value).
+info: |
+  String.prototype.at( index )
+
+  Let O be ? RequireObjectCoercible(this value).
+
+features: [String.prototype.at]
+---*/
+assert.sameValue(typeof String.prototype.at, 'function');
+
+assert.throws(TypeError, () => {
+  String.prototype.at.call(undefined);
+}, '`String.prototype.at.call(undefined)` throws TypeError');
+
+assert.throws(TypeError, () => {
+  String.prototype.at.call(null);
+}, '`String.prototype.at.call(null)` throws TypeError');

Copied: trunk/JSTests/test262/test/built-ins/String/prototype/at/returns-code-unit.js (from rev 269985, trunk/JSTests/test262/test/built-ins/String/prototype/item/returns-code-unit.js) (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/String/prototype/at/returns-code-unit.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/String/prototype/at/returns-code-unit.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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-String.prototype.at
+description: >
+  The method should return an Iterator instance.
+info: |
+  String.prototype.at ( )
+
+  Let O be ? ToObject(this value).
+  Let len be ? LengthOfStringLike(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: [String.prototype.at]
+---*/
+assert.sameValue(typeof String.prototype.at, 'function');
+
+let s = "12\uD80034";
+
+assert.sameValue(s.at(0), "1", 's.at(0) must return "1"');
+assert.sameValue(s.at(1), "2", 's.at(1) must return "2"');
+assert.sameValue(s.at(2), "\uD800", 's.at(2) must return "\\uD800"');
+assert.sameValue(s.at(3), "3", 's.at(3) must return "3"');
+assert.sameValue(s.at(4), "4", 's.at(4) must return "4"');

Copied: trunk/JSTests/test262/test/built-ins/String/prototype/at/returns-item-relative-index.js (from rev 269985, trunk/JSTests/test262/test/built-ins/String/prototype/item/returns-item-relative-index.js) (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/String/prototype/at/returns-item-relative-index.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/String/prototype/at/returns-item-relative-index.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -0,0 +1,29 @@
+// 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.at
+description: >
+  Returns the item value at the specified relative index
+info: |
+  String.prototype.at ( )
+
+  Let O be ? ToObject(this value).
+  Let len be ? LengthOfStringLike(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: [String.prototype.at]
+---*/
+assert.sameValue(typeof String.prototype.at, 'function');
+
+let s = "12345";
+
+assert.sameValue(s.at(0), "1", 's.at(0) must return "1"');
+assert.sameValue(s.at(-1), "5", 's.at(-1) must return "5"');
+assert.sameValue(s.at(-3), "3", 's.at(-3) must return "3"');
+assert.sameValue(s.at(-4), "2", 's.at(-4) must return "2"');

Copied: trunk/JSTests/test262/test/built-ins/String/prototype/at/returns-item.js (from rev 269985, trunk/JSTests/test262/test/built-ins/String/prototype/item/returns-item.js) (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/String/prototype/at/returns-item.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/String/prototype/at/returns-item.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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-String.prototype.at
+description: >
+  Returns the item value at the specified index
+info: |
+  String.prototype.at ( )
+
+  Let O be ? ToObject(this value).
+  Let len be ? LengthOfStringLike(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: [String.prototype.at]
+---*/
+assert.sameValue(typeof String.prototype.at, 'function');
+
+let s = "12345";
+
+assert.sameValue(s.at(0), "1", 's.at(0) must return "1"');
+assert.sameValue(s.at(1), "2", 's.at(1) must return "2"');
+assert.sameValue(s.at(2), "3", 's.at(2) must return "3"');
+assert.sameValue(s.at(3), "4", 's.at(3) must return "4"');
+assert.sameValue(s.at(4), "5", 's.at(4) must return "5"');

Added: trunk/JSTests/test262/test/built-ins/String/prototype/at/returns-undefined-for-out-of-range-index.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/String/prototype/at/returns-undefined-for-out-of-range-index.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/String/prototype/at/returns-undefined-for-out-of-range-index.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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.at
+description: >
+  Creates an iterator from a custom object.
+info: |
+  String.prototype.at( index )
+
+  If k < 0 or k ≥ len, then return undefined.
+features: [String.prototype.at]
+---*/
+assert.sameValue(typeof String.prototype.at, 'function');
+
+let s = "";
+
+assert.sameValue(s.at(-2), undefined, 's.at(-2) must return undefined'); // wrap around the end
+assert.sameValue(s.at(0), undefined, 's.at(0) must return undefined');
+assert.sameValue(s.at(1), undefined, 's.at(1) must return undefined');
+

Copied: trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/index-argument-tointeger.js (from rev 269985, trunk/JSTests/test262/test/built-ins/TypedArray/prototype/item/index-argument-tointeger.js) (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/index-argument-tointeger.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/index-argument-tointeger.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.at
+description: >
+  Property type and descriptor.
+info: |
+  %TypedArray%.prototype.at( index )
+
+  Let relativeIndex be ? ToInteger(index).
+
+includes: [testTypedArray.js]
+features: [TypedArray, TypedArray.prototype.at]
+---*/
+assert.sameValue(
+  typeof TypedArray.prototype.at,
+  'function',
+  'The value of `typeof TypedArray.prototype.at` is "function"'
+);
+
+testWithTypedArrayConstructors(TA => {
+  assert.sameValue(typeof TA.prototype.at, 'function', 'The value of `typeof TA.prototype.at` is "function"');
+  let valueOfCallCount = 0;
+  let index = {
+    valueOf() {
+      valueOfCallCount++;
+      return 1;
+    }
+  };
+
+  let a = new TA([0,1,2,3]);
+
+  assert.sameValue(a.at(index), 1, 'a.at({valueOf() {valueOfCallCount++; return 1;}}) must return 1');
+  assert.sameValue(valueOfCallCount, 1, 'The value of `valueOfCallCount` is 1');
+});

Copied: trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/index-non-numeric-argument-tointeger-invalid.js (from rev 269985, trunk/JSTests/test262/test/built-ins/TypedArray/prototype/item/index-non-numeric-argument-tointeger-invalid.js) (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/index-non-numeric-argument-tointeger-invalid.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/index-non-numeric-argument-tointeger-invalid.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.at
+description: >
+  Property type and descriptor.
+info: |
+  %TypedArray%.prototype.at( index )
+
+  Let relativeIndex be ? ToInteger(index).
+
+includes: [testTypedArray.js]
+features: [TypedArray, TypedArray.prototype.at]
+---*/
+assert.sameValue(
+  typeof TypedArray.prototype.at,
+  'function',
+  'The value of `typeof TypedArray.prototype.at` is "function"'
+);
+
+testWithTypedArrayConstructors(TA => {
+  assert.sameValue(typeof TA.prototype.at, 'function', 'The value of `typeof TA.prototype.at` is "function"');
+  let a = new TA([0,1,2,3]);
+
+  assert.throws(TypeError, () => {
+    a.at(Symbol());
+  }, '`a.at(Symbol())` throws TypeError');
+});

Added: trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/index-non-numeric-argument-tointeger.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/index-non-numeric-argument-tointeger.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/index-non-numeric-argument-tointeger.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.at
+description: >
+  Property type and descriptor.
+info: |
+  %TypedArray%.prototype.at( index )
+
+  Let relativeIndex be ? ToInteger(index).
+
+includes: [testTypedArray.js]
+features: [TypedArray, TypedArray.prototype.at]
+---*/
+assert.sameValue(
+  typeof TypedArray.prototype.at,
+  'function',
+  'The value of `typeof TypedArray.prototype.at` is "function"'
+);
+
+testWithTypedArrayConstructors(TA => {
+  assert.sameValue(typeof TA.prototype.at, 'function', 'The value of `typeof TA.prototype.at` is "function"');
+
+  let a = new TA([0,1,2,3]);
+
+  assert.sameValue(a.at(false), 0, 'a.at(false) must return 0');
+  assert.sameValue(a.at(null), 0, 'a.at(null) must return 0');
+  assert.sameValue(a.at(undefined), 0, 'a.at(undefined) must return 0');
+  assert.sameValue(a.at(""), 0, 'a.at("") must return 0');
+  assert.sameValue(a.at(function() {}), 0, 'a.at(function() {}) must return 0');
+  assert.sameValue(a.at([]), 0, 'a.at([]) must return 0');
+
+  assert.sameValue(a.at(true), 1, 'a.at(true) must return 1');
+  assert.sameValue(a.at("1"), 1, 'a.at("1") must return 1');
+});

Added: trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/length.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/length.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/length.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.at
+description: >
+  TypedArray.prototype.at.length value and descriptor.
+info: |
+  %TypedArray%.prototype.at( index )
+
+  17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js, testTypedArray.js]
+features: [TypedArray.prototype.at]
+---*/
+assert.sameValue(
+  typeof TypedArray.prototype.at,
+  'function',
+  'The value of `typeof TypedArray.prototype.at` is "function"'
+);
+
+assert.sameValue(
+  TypedArray.prototype.at.length, 1,
+  'The value of TypedArray.prototype.at.length is 1'
+);
+
+verifyNotEnumerable(TypedArray.prototype.at, 'length');
+verifyNotWritable(TypedArray.prototype.at, 'length');
+verifyConfigurable(TypedArray.prototype.at, 'length');

Added: trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/name.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/name.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/name.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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-%typedarray%.prototype.at
+description: >
+  %TypedArray%.prototype.at.name value and descriptor.
+info: |
+  %TypedArray%.prototype.at( index )
+
+  17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js, testTypedArray.js]
+features: [TypedArray.prototype.at]
+---*/
+assert.sameValue(
+  typeof TypedArray.prototype.at,
+  'function',
+  'The value of `typeof TypedArray.prototype.at` is "function"'
+);
+
+assert.sameValue(
+  TypedArray.prototype.at.name, 'at',
+  'The value of TypedArray.prototype.at.name is "at"'
+);
+
+verifyProperty(TypedArray.prototype.at, 'name', {
+  enumerable: false,
+  writable: false,
+  configurable: true
+});

Added: trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/prop-desc.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/prop-desc.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/prop-desc.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -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-%typedarray%.prototype.at
+description: >
+  Property type and descriptor.
+info: |
+  %TypedArray%.prototype.at( index )
+
+  17 ECMAScript Standard Built-in Objects
+includes: [propertyHelper.js, testTypedArray.js]
+features: [TypedArray.prototype.at]
+---*/
+assert.sameValue(
+  typeof TypedArray.prototype.at,
+  'function',
+  'The value of `typeof TypedArray.prototype.at` is "function"'
+);
+
+verifyProperty(TypedArray.prototype.at, 'name', {
+  enumerable: false,
+  writable: true,
+  configurable: true
+});

Added: trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/return-abrupt-from-this.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/return-abrupt-from-this.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/return-abrupt-from-this.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -0,0 +1,40 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.at
+description: >
+  Return abrupt from ToObject(this value).
+info: |
+  %TypedArray%.prototype.at( index )
+
+  Let O be the this value.
+  Perform ? ValidateTypedArray(O).
+
+includes: [testTypedArray.js]
+features: [TypedArray,TypedArray.prototype.at]
+---*/
+assert.sameValue(
+  typeof TypedArray.prototype.at,
+  'function',
+  'The value of `typeof TypedArray.prototype.at` is "function"'
+);
+
+assert.throws(TypeError, () => {
+  TypedArray.prototype.at.call(undefined);
+}, '`TypedArray.prototype.at.call(undefined)` throws TypeError');
+
+assert.throws(TypeError, () => {
+  TypedArray.prototype.at.call(null);
+}, '`TypedArray.prototype.at.call(null)` throws TypeError');
+
+testWithTypedArrayConstructors(TA => {
+  assert.sameValue(typeof TA.prototype.at, 'function', 'The value of `typeof TA.prototype.at` is "function"');
+
+  assert.throws(TypeError, () => {
+    TA.prototype.at.call(undefined);
+  }, '`TA.prototype.at.call(undefined)` throws TypeError');
+
+  assert.throws(TypeError, () => {
+    TA.prototype.at.call(null);
+  }, '`TA.prototype.at.call(null)` throws TypeError');
+});

Copied: trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/returns-item-relative-index.js (from rev 269985, trunk/JSTests/test262/test/built-ins/TypedArray/prototype/item/returns-item-relative-index.js) (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/returns-item-relative-index.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/returns-item-relative-index.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -0,0 +1,37 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.at
+description: >
+  Returns the item value at the specified relative index
+info: |
+  %TypedArray%.prototype.at( index )
+
+  Let O be the this value.
+  Perform ? ValidateTypedArray(O).
+  Let len be O.[[ArrayLength]].
+  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)).
+
+includes: [testTypedArray.js]
+features: [TypedArray,TypedArray.prototype.at]
+---*/
+assert.sameValue(
+  typeof TypedArray.prototype.at,
+  'function',
+  'The value of `typeof TypedArray.prototype.at` is "function"'
+);
+
+testWithTypedArrayConstructors(TA => {
+  let a = new TA([1, 2, 3, 4, 5]);
+  assert.sameValue(a.at(0), 1, 'a.at(0) must return 1');
+  assert.sameValue(a.at(-1), 5, 'a.at(-1) must return 5');
+  assert.sameValue(a.at(-2), 4, 'a.at(-2) must return 4');
+  assert.sameValue(a.at(-3), 3, 'a.at(-3) must return 3');
+  assert.sameValue(a.at(-4), 2, 'a.at(-4) must return 2');
+});

Copied: trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/returns-item.js (from rev 269985, trunk/JSTests/test262/test/built-ins/TypedArray/prototype/item/returns-item.js) (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/returns-item.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/returns-item.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.at
+description: >
+  Returns the item value at the specified index
+info: |
+  %TypedArray%.prototype.at( index )
+
+  Let O be the this value.
+  Perform ? ValidateTypedArray(O).
+  Let len be O.[[ArrayLength]].
+  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)).
+
+includes: [testTypedArray.js]
+features: [TypedArray,TypedArray.prototype.at]
+---*/
+assert.sameValue(
+  typeof TypedArray.prototype.at,
+  'function',
+  'The value of `typeof TypedArray.prototype.at` is "function"'
+);
+
+testWithTypedArrayConstructors(TA => {
+  assert.sameValue(typeof TA.prototype.at, 'function', 'The value of `typeof TA.prototype.at` is "function"');
+  let a = new TA([1, 2, 3, 4]);
+
+  assert.sameValue(a.at(0), 1, 'a.at(0) must return 1');
+  assert.sameValue(a.at(1), 2, 'a.at(1) must return 2');
+  assert.sameValue(a.at(2), 3, 'a.at(2) must return 3');
+  assert.sameValue(a.at(3), 4, 'a.at(3) must return 4');
+});

Added: trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/returns-undefined-for-holes-in-sparse-arrays.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/returns-undefined-for-holes-in-sparse-arrays.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/returns-undefined-for-holes-in-sparse-arrays.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -0,0 +1,50 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.at
+description: >
+  Returns the item value at the specified index, holes are filled in sparse arrays.
+info: |
+  %TypedArray%.prototype.at( index )
+
+  Let O be the this value.
+  Perform ? ValidateTypedArray(O).
+  Let len be O.[[ArrayLength]].
+  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)).
+
+includes: [testTypedArray.js]
+features: [TypedArray, TypedArray.prototype.at]
+---*/
+assert.sameValue(
+  typeof TypedArray.prototype.at,
+  'function',
+  'The value of `typeof TypedArray.prototype.at` is "function"'
+);
+
+testWithTypedArrayConstructors(TA => {
+  let a = new TA([0, 1, , 3, 4, , 6]);
+  let filler = 0;
+  if (TA.name.startsWith('Float')) {
+    filler = NaN;
+  }
+  assert.sameValue(a.at(0), 0, 'a.at(0) must return 0');
+  assert.sameValue(a.at(1), 1, 'a.at(1) must return 1');
+  assert.sameValue(a.at(2), filler, 'a.at(2) must return the value of filler');
+  assert.sameValue(a.at(3), 3, 'a.at(3) must return 3');
+  assert.sameValue(a.at(4), 4, 'a.at(4) must return 4');
+  assert.sameValue(a.at(5), filler, 'a.at(5) must return the value of filler');
+  assert.sameValue(a.at(6), 6, 'a.at(6) must return 6');
+  assert.sameValue(a.at(-0), 0, 'a.at(-0) must return 0');
+  assert.sameValue(a.at(-1), 6, 'a.at(-1) must return 6');
+  assert.sameValue(a.at(-2), filler, 'a.at(-2) must return the value of filler');
+  assert.sameValue(a.at(-3), 4, 'a.at(-3) must return 4');
+  assert.sameValue(a.at(-4), 3, 'a.at(-4) must return 3');
+  assert.sameValue(a.at(-5), filler, 'a.at(-5) must return the value of filler');
+  assert.sameValue(a.at(-6), 1, 'a.at(-6) must return 1');
+});

Added: trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/returns-undefined-for-out-of-range-index.js (0 => 269986)


--- trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/returns-undefined-for-out-of-range-index.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/TypedArray/prototype/at/returns-undefined-for-out-of-range-index.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.at
+description: >
+  Returns undefined if the specified index less than or greater than the available index range.
+info: |
+  %TypedArray%.prototype.at( index )
+
+  If k < 0 or k ≥ len, then return undefined.
+
+includes: [testTypedArray.js]
+features: [TypedArray,TypedArray.prototype.at]
+---*/
+assert.sameValue(
+  typeof TypedArray.prototype.at,
+  'function',
+  'The value of `typeof TypedArray.prototype.at` is "function"'
+);
+
+testWithTypedArrayConstructors(TA => {
+  assert.sameValue(typeof TA.prototype.at, 'function', 'The value of `typeof TA.prototype.at` is "function"');
+  let a = new TA([]);
+
+  assert.sameValue(a.at(-2), undefined, 'a.at(-2) must return undefined'); // wrap around the end
+  assert.sameValue(a.at(0), undefined, 'a.at(0) must return undefined');
+  assert.sameValue(a.at(1), undefined, 'a.at(1) must return undefined');
+});

Modified: trunk/JSTests/test262/test/built-ins/TypedArrayConstructors/internals/GetOwnProperty/index-prop-desc.js (269985 => 269986)


--- trunk/JSTests/test262/test/built-ins/TypedArrayConstructors/internals/GetOwnProperty/index-prop-desc.js	2020-11-18 22:04:27 UTC (rev 269985)
+++ trunk/JSTests/test262/test/built-ins/TypedArrayConstructors/internals/GetOwnProperty/index-prop-desc.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -1,4 +1,5 @@
 // Copyright (C) 2016 the V8 project authors. All rights reserved.
+// Copyright (C) 2020 Apple Inc. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-integer-indexed-exotic-objects-getownproperty-p
@@ -30,7 +31,7 @@
   assert.sameValue(descriptor0.enumerable, true);
   assert.sameValue(descriptor0.writable, true);
 
-  assert.sameValue(descriptor1.value, 42);
+  assert.sameValue(descriptor1.value, 43);
   assert.sameValue(descriptor1.configurable, true);
   assert.sameValue(descriptor1.enumerable, true);
   assert.sameValue(descriptor1.writable, true);

Modified: trunk/JSTests/test262/test/language/global-code/decl-lex-configurable-global.js (269985 => 269986)


--- trunk/JSTests/test262/test/language/global-code/decl-lex-configurable-global.js	2020-11-18 22:04:27 UTC (rev 269985)
+++ trunk/JSTests/test262/test/language/global-code/decl-lex-configurable-global.js	2020-11-18 22:26:29 UTC (rev 269986)
@@ -19,14 +19,15 @@
             1. Perform ? envRec.CreateImmutableBinding(dn, true).
          ii. Else,
              1. Perform ? envRec.CreateMutableBinding(dn, false).
-includes: [propertyHelper.js]
 ---*/
 
 let Array;
 
 assert.sameValue(Array, undefined);
+assert.sameValue(typeof this.Array, 'function');
 
-assert.sameValue(typeof this.Array, 'function');
-verifyNotEnumerable(this, 'Array');
-verifyWritable(this, 'Array');
-verifyConfigurable(this, 'Array');
+// DO NOT USE propertyHelper API!
+let descriptor = Object.getOwnPropertyDescriptor(this, 'Array');
+assert.sameValue(descriptor.configurable, true);
+assert.sameValue(descriptor.enumerable, false);
+assert.sameValue(descriptor.writable, true);

Modified: trunk/JSTests/test262/test262-Revision.txt (269985 => 269986)


--- trunk/JSTests/test262/test262-Revision.txt	2020-11-18 22:04:27 UTC (rev 269985)
+++ trunk/JSTests/test262/test262-Revision.txt	2020-11-18 22:26:29 UTC (rev 269986)
@@ -1,2 +1,2 @@
-test262 remote url: g...@github.com:tc39/test262.git
-test262 revision: 1c33fdb0ca60fb9d7392403be769ed0d26209132
+test262 remote url: https://github.com/tc39/test262.git
+test262 revision: 2e5ff2461b63119ace0d8643f5c09fd4f3930906
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to