diff --git a/src/org/mozilla/javascript/typedarrays/NativeArrayBufferView.java b/src/org/mozilla/javascript/typedarrays/NativeArrayBufferView.java index 2dd6285d47..c7377c164b 100644 --- a/src/org/mozilla/javascript/typedarrays/NativeArrayBufferView.java +++ b/src/org/mozilla/javascript/typedarrays/NativeArrayBufferView.java @@ -9,6 +9,9 @@ import org.mozilla.javascript.Context; import org.mozilla.javascript.IdScriptableObject; import org.mozilla.javascript.ScriptRuntime; +import org.mozilla.javascript.Scriptable; +import org.mozilla.javascript.Symbol; +import org.mozilla.javascript.SymbolKey; import org.mozilla.javascript.Undefined; /** @@ -129,7 +132,18 @@ protected int findInstanceIdInfo(String s) { return instanceIdInfo(READONLY | PERMANENT, id); } - private static final int Id_buffer = 1, Id_byteOffset = 2, Id_byteLength = 3; + @Override + public Object get(Symbol key, Scriptable start) { + if (SymbolKey.TO_STRING_TAG.equals(key)) { + return getClassName(); + } + return super.get(key, start); + } + + private static final int + Id_buffer = 1, + Id_byteOffset = 2, + Id_byteLength = 3; // to be visible by subclasses protected static final int MAX_INSTANCE_ID = Id_byteLength; diff --git a/testsrc/jstests/es6/dataview.js b/testsrc/jstests/es6/dataview.js new file mode 100644 index 0000000000..3257640e49 --- /dev/null +++ b/testsrc/jstests/es6/dataview.js @@ -0,0 +1,22 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +load("testsrc/assert.js"); + +(function TestSymbolSpecies() { + var symbolSpeciesValue = DataView[Symbol.species]; + assertEquals(undefined, symbolSpeciesValue); +})(); + +(function TestSymbolToString() { + var ab = new ArrayBuffer(256); + var d = new DataView(ab, 1, 255);; + + assertEquals('DataView', d[Symbol.toStringTag]); + assertEquals(false, d.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, DataView.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, DataView.prototype.hasOwnProperty(Symbol.toStringTag)); +})(); + +"success"; diff --git a/testsrc/jstests/es6/float32array.js b/testsrc/jstests/es6/float32array.js index 7d73093e5d..c6d7c508e7 100644 --- a/testsrc/jstests/es6/float32array.js +++ b/testsrc/jstests/es6/float32array.js @@ -5,8 +5,16 @@ load("testsrc/assert.js"); (function TestSymbolSpecies() { - var symbolSpeciesValue = Float32Array[Symbol.species]; - assertEquals(Float32Array, symbolSpeciesValue); + var symbolSpeciesValue = Float32Array[Symbol.species]; + assertEquals(Float32Array, symbolSpeciesValue); +})(); + +(function TestSymbolToString() { + var a = new Float32Array(4); + assertEquals('Float32Array', a[Symbol.toStringTag]); + assertEquals(false, a.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Float32Array.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Float32Array.prototype.hasOwnProperty(Symbol.toStringTag)); })(); "success"; diff --git a/testsrc/jstests/es6/float64array.js b/testsrc/jstests/es6/float64array.js index 151c058087..6c40852fcc 100644 --- a/testsrc/jstests/es6/float64array.js +++ b/testsrc/jstests/es6/float64array.js @@ -5,8 +5,16 @@ load("testsrc/assert.js"); (function TestSymbolSpecies() { - var symbolSpeciesValue = Float64Array[Symbol.species]; - assertEquals(Float64Array, symbolSpeciesValue); + var symbolSpeciesValue = Float64Array[Symbol.species]; + assertEquals(Float64Array, symbolSpeciesValue); +})(); + +(function TestSymbolToString() { + var a = new Float64Array(4); + assertEquals('Float64Array', a[Symbol.toStringTag]); + assertEquals(false, a.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Float64Array.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Float64Array.prototype.hasOwnProperty(Symbol.toStringTag)); })(); "success"; diff --git a/testsrc/jstests/es6/int16array.js b/testsrc/jstests/es6/int16array.js index b0b9492859..c26300cba8 100644 --- a/testsrc/jstests/es6/int16array.js +++ b/testsrc/jstests/es6/int16array.js @@ -5,8 +5,16 @@ load("testsrc/assert.js"); (function TestSymbolSpecies() { - var symbolSpeciesValue = Int16Array[Symbol.species]; - assertEquals(Int16Array, symbolSpeciesValue); + var symbolSpeciesValue = Int16Array[Symbol.species]; + assertEquals(Int16Array, symbolSpeciesValue); +})(); + +(function TestSymbolToString() { + var a = new Int16Array(4); + assertEquals('Int16Array', a[Symbol.toStringTag]); + assertEquals(false, a.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Int16Array.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Int16Array.prototype.hasOwnProperty(Symbol.toStringTag)); })(); "success"; diff --git a/testsrc/jstests/es6/int32array.js b/testsrc/jstests/es6/int32array.js index 823a96e943..92b18f115f 100644 --- a/testsrc/jstests/es6/int32array.js +++ b/testsrc/jstests/es6/int32array.js @@ -5,8 +5,16 @@ load("testsrc/assert.js"); (function TestSymbolSpecies() { - var symbolSpeciesValue = Int32Array[Symbol.species]; - assertEquals(Int32Array, symbolSpeciesValue); + var symbolSpeciesValue = Int32Array[Symbol.species]; + assertEquals(Int32Array, symbolSpeciesValue); +})(); + +(function TestSymbolToString() { + var a = new Int32Array(4); + assertEquals('Int32Array', a[Symbol.toStringTag]); + assertEquals(false, a.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Int32Array.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Int32Array.prototype.hasOwnProperty(Symbol.toStringTag)); })(); "success"; diff --git a/testsrc/jstests/es6/int8array.js b/testsrc/jstests/es6/int8array.js index 96dbce3fb4..219b17017a 100644 --- a/testsrc/jstests/es6/int8array.js +++ b/testsrc/jstests/es6/int8array.js @@ -5,8 +5,16 @@ load("testsrc/assert.js"); (function TestSymbolSpecies() { - var symbolSpeciesValue = Int8Array[Symbol.species]; - assertEquals(Int8Array, symbolSpeciesValue); + var symbolSpeciesValue = Int8Array[Symbol.species]; + assertEquals(Int8Array, symbolSpeciesValue); +})(); + +(function TestSymbolToString() { + var a = new Int8Array(4); + assertEquals('Int8Array', a[Symbol.toStringTag]); + assertEquals(false, a.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Int8Array.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Int8Array.prototype.hasOwnProperty(Symbol.toStringTag)); })(); "success"; diff --git a/testsrc/jstests/es6/uint16array.js b/testsrc/jstests/es6/uint16array.js index 0aacfcb43a..fe3a1eb213 100644 --- a/testsrc/jstests/es6/uint16array.js +++ b/testsrc/jstests/es6/uint16array.js @@ -5,8 +5,16 @@ load("testsrc/assert.js"); (function TestSymbolSpecies() { - var symbolSpeciesValue = Uint16Array[Symbol.species]; - assertEquals(Uint16Array, symbolSpeciesValue); + var symbolSpeciesValue = Uint16Array[Symbol.species]; + assertEquals(Uint16Array, symbolSpeciesValue); +})(); + +(function TestSymbolToString() { + var a = new Uint16Array(4); + assertEquals('Uint16Array', a[Symbol.toStringTag]); + assertEquals(false, a.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Uint16Array.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Uint16Array.prototype.hasOwnProperty(Symbol.toStringTag)); })(); "success"; diff --git a/testsrc/jstests/es6/uint32array.js b/testsrc/jstests/es6/uint32array.js index 6d064a52dc..5bbce3d682 100644 --- a/testsrc/jstests/es6/uint32array.js +++ b/testsrc/jstests/es6/uint32array.js @@ -5,8 +5,16 @@ load("testsrc/assert.js"); (function TestSymbolSpecies() { - var symbolSpeciesValue = Uint32Array[Symbol.species]; - assertEquals(Uint32Array, symbolSpeciesValue); + var symbolSpeciesValue = Uint32Array[Symbol.species]; + assertEquals(Uint32Array, symbolSpeciesValue); +})(); + +(function TestSymbolToString() { + var a = new Uint32Array(4); + assertEquals('Uint32Array', a[Symbol.toStringTag]); + assertEquals(false, a.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Uint32Array.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Uint32Array.prototype.hasOwnProperty(Symbol.toStringTag)); })(); "success"; diff --git a/testsrc/jstests/es6/uint8array.js b/testsrc/jstests/es6/uint8array.js index b8d284d62a..3e5e3496ca 100644 --- a/testsrc/jstests/es6/uint8array.js +++ b/testsrc/jstests/es6/uint8array.js @@ -5,8 +5,16 @@ load("testsrc/assert.js"); (function TestSymbolSpecies() { - var symbolSpeciesValue = Uint8Array[Symbol.species]; - assertEquals(Uint8Array, symbolSpeciesValue); + var symbolSpeciesValue = Uint8Array[Symbol.species]; + assertEquals(Uint8Array, symbolSpeciesValue); +})(); + +(function TestSymbolToString() { + var a = new Uint8Array(4); + assertEquals('Uint8Array', a[Symbol.toStringTag]); + assertEquals(false, a.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Uint8Array.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Uint8Array.prototype.hasOwnProperty(Symbol.toStringTag)); })(); "success"; diff --git a/testsrc/jstests/es6/uint8clampedarray.js b/testsrc/jstests/es6/uint8clampedarray.js index c3bca97103..50fd255ca3 100644 --- a/testsrc/jstests/es6/uint8clampedarray.js +++ b/testsrc/jstests/es6/uint8clampedarray.js @@ -5,8 +5,16 @@ load("testsrc/assert.js"); (function TestSymbolSpecies() { - var symbolSpeciesValue = Uint8ClampedArray[Symbol.species]; - assertEquals(Uint8ClampedArray, symbolSpeciesValue); + var symbolSpeciesValue = Uint8ClampedArray[Symbol.species]; + assertEquals(Uint8ClampedArray, symbolSpeciesValue); +})(); + +(function TestSymbolToString() { + var a = new Uint8ClampedArray(4); + assertEquals('Uint8ClampedArray', a[Symbol.toStringTag]); + assertEquals(false, a.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Uint8ClampedArray.hasOwnProperty(Symbol.toStringTag)); + assertEquals(false, Uint8ClampedArray.prototype.hasOwnProperty(Symbol.toStringTag)); })(); "success"; diff --git a/testsrc/org/mozilla/javascript/tests/es6/NativeDataViewTest.java b/testsrc/org/mozilla/javascript/tests/es6/NativeDataViewTest.java new file mode 100644 index 0000000000..ce09cca8ac --- /dev/null +++ b/testsrc/org/mozilla/javascript/tests/es6/NativeDataViewTest.java @@ -0,0 +1,14 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.javascript.tests.es6; + +import org.mozilla.javascript.Context; +import org.mozilla.javascript.drivers.LanguageVersion; +import org.mozilla.javascript.drivers.RhinoTest; +import org.mozilla.javascript.drivers.ScriptTestsBase; + +@RhinoTest("testsrc/jstests/es6/dataview.js") +@LanguageVersion(Context.VERSION_ES6) +public class NativeDataViewTest extends ScriptTestsBase {} diff --git a/testsrc/test262.properties b/testsrc/test262.properties index 69c4df3f3d..35502d398c 100644 --- a/testsrc/test262.properties +++ b/testsrc/test262.properties @@ -1643,7 +1643,7 @@ built-ins/ThrowTypeError 7/13 (53.85%) unique-per-realm-non-simple.js unique-per-realm-unmapped-args.js -built-ins/TypedArray 979/1070 (91.5%) +built-ins/TypedArray 978/1070 (91.4%) from/arylk-get-length-error.js from/arylk-to-length-error.js from/iter-access-error.js @@ -2160,7 +2160,14 @@ built-ins/TypedArray 979/1070 (91.5%) prototype/subarray/this-is-not-object.js prototype/subarray/this-is-not-typedarray-instance.js prototype/Symbol.toStringTag/BigInt 9/9 (100.0%) - prototype/Symbol.toStringTag 9/9 (100.0%) + prototype/Symbol.toStringTag/detached-buffer.js + prototype/Symbol.toStringTag/invoked-as-accessor.js + prototype/Symbol.toStringTag/invoked-as-func.js + prototype/Symbol.toStringTag/length.js + prototype/Symbol.toStringTag/name.js + prototype/Symbol.toStringTag/prop-desc.js + prototype/Symbol.toStringTag/this-has-no-typedarrayname-internal.js + prototype/Symbol.toStringTag/this-is-not-object.js prototype/toLocaleString/BigInt 13/13 (100.0%) prototype/toLocaleString/calls-tolocalestring-from-each-value.js prototype/toLocaleString/calls-tostring-from-each-value.js