From bdf83571ba63313336cf7d9854f3db5acc92a4ff Mon Sep 17 00:00:00 2001 From: Steven Date: Sun, 9 Nov 2025 15:52:32 -0500 Subject: [PATCH 01/17] [import-bytes] add initial tests for import bytes proposal --- features.txt | 4 + .../import-bytes/bytes-from-empty-FIXTURE.bin | 0 .../import/import-bytes/bytes-from-empty.js | 27 +++++ .../import-bytes/bytes-from-png-FIXTURE.png | Bin 0 -> 67 bytes .../import/import-bytes/bytes-from-png.js | 98 ++++++++++++++++++ .../import-bytes/bytes-from-txt-FIXTURE.txt | 1 + .../import/import-bytes/bytes-from-txt.js | 44 ++++++++ 7 files changed, 174 insertions(+) create mode 100644 test/language/import/import-bytes/bytes-from-empty-FIXTURE.bin create mode 100644 test/language/import/import-bytes/bytes-from-empty.js create mode 100644 test/language/import/import-bytes/bytes-from-png-FIXTURE.png create mode 100644 test/language/import/import-bytes/bytes-from-png.js create mode 100644 test/language/import/import-bytes/bytes-from-txt-FIXTURE.txt create mode 100644 test/language/import/import-bytes/bytes-from-txt.js diff --git a/features.txt b/features.txt index 065eb259c80..d49512cc0b6 100644 --- a/features.txt +++ b/features.txt @@ -84,6 +84,10 @@ upsert # https://github.com/tc39/proposal-immutable-arraybuffer immutable-arraybuffer +# Import Bytes +# https://github.com/tc39/proposal-import-bytes +import-bytes + # Non-extensible Applies to Private # https://github.com/tc39/proposal-nonextensible-applies-to-private nonextensible-applies-to-private diff --git a/test/language/import/import-bytes/bytes-from-empty-FIXTURE.bin b/test/language/import/import-bytes/bytes-from-empty-FIXTURE.bin new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/language/import/import-bytes/bytes-from-empty.js b/test/language/import/import-bytes/bytes-from-empty.js new file mode 100644 index 00000000000..61c61438991 --- /dev/null +++ b/test/language/import/import-bytes/bytes-from-empty.js @@ -0,0 +1,27 @@ +// Copyright (C) 2021 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-create-bytes-module +description: Creates bytes module from txt file +flags: [module] +features: [import-attributes, immutable-arraybuffer, import-bytes] +includes: [compareArray.js] +---*/ + +import value from './bytes-from-empty-FIXTURE.bin' with { type: 'bytes' }; + +assert(value instanceof Uint8Array); +assert(value.buffer instanceof ArrayBuffer); + +assert.sameValue(value.length, 0); +assert.sameValue(value.buffer.byteLength, 0); + +assert.compareArray(Array.from(value), []); + +assert.throws(TypeError, function() { + value.buffer.resize(0); +}); + +assert.throws(TypeError, function() { + value.buffer.transfer(); +}); diff --git a/test/language/import/import-bytes/bytes-from-png-FIXTURE.png b/test/language/import/import-bytes/bytes-from-png-FIXTURE.png new file mode 100644 index 0000000000000000000000000000000000000000..252d9502d8573d033e633f5e377d81bebf8afd36 GIT binary patch literal 67 zcmeAS@N?(olHy`uVBq!ia0vp^j35jm7|ip2ssJf2PZ!6K3dZCFAe)JSvAC2`0?1 Date: Sat, 20 Dec 2025 15:53:15 -0500 Subject: [PATCH 02/17] rename -FIXTURE to _FIXTURE --- .../import/import-bytes/bytes-from-empty.js | 2 +- ...pty-FIXTURE.bin => bytes-from-empty_FIXTURE.bin} | 0 test/language/import/import-bytes/bytes-from-png.js | 2 +- ...m-png-FIXTURE.png => bytes-from-png_FIXTURE.png} | Bin test/language/import/import-bytes/bytes-from-txt.js | 2 +- ...m-txt-FIXTURE.txt => bytes-from-txt_FIXTURE.txt} | 0 6 files changed, 3 insertions(+), 3 deletions(-) rename test/language/import/import-bytes/{bytes-from-empty-FIXTURE.bin => bytes-from-empty_FIXTURE.bin} (100%) rename test/language/import/import-bytes/{bytes-from-png-FIXTURE.png => bytes-from-png_FIXTURE.png} (100%) rename test/language/import/import-bytes/{bytes-from-txt-FIXTURE.txt => bytes-from-txt_FIXTURE.txt} (100%) diff --git a/test/language/import/import-bytes/bytes-from-empty.js b/test/language/import/import-bytes/bytes-from-empty.js index 61c61438991..87ad8ce882c 100644 --- a/test/language/import/import-bytes/bytes-from-empty.js +++ b/test/language/import/import-bytes/bytes-from-empty.js @@ -8,7 +8,7 @@ features: [import-attributes, immutable-arraybuffer, import-bytes] includes: [compareArray.js] ---*/ -import value from './bytes-from-empty-FIXTURE.bin' with { type: 'bytes' }; +import value from './bytes-from-empty_FIXTURE.bin' with { type: 'bytes' }; assert(value instanceof Uint8Array); assert(value.buffer instanceof ArrayBuffer); diff --git a/test/language/import/import-bytes/bytes-from-empty-FIXTURE.bin b/test/language/import/import-bytes/bytes-from-empty_FIXTURE.bin similarity index 100% rename from test/language/import/import-bytes/bytes-from-empty-FIXTURE.bin rename to test/language/import/import-bytes/bytes-from-empty_FIXTURE.bin diff --git a/test/language/import/import-bytes/bytes-from-png.js b/test/language/import/import-bytes/bytes-from-png.js index d9ef9890a58..2828a6503b3 100644 --- a/test/language/import/import-bytes/bytes-from-png.js +++ b/test/language/import/import-bytes/bytes-from-png.js @@ -8,7 +8,7 @@ features: [import-attributes, immutable-arraybuffer, import-bytes] includes: [compareArray.js] ---*/ -import value from './bytes-from-png-FIXTURE.png' with { type: 'bytes' }; +import value from './bytes-from-png_FIXTURE.png' with { type: 'bytes' }; assert(value instanceof Uint8Array); assert(value.buffer instanceof ArrayBuffer); diff --git a/test/language/import/import-bytes/bytes-from-png-FIXTURE.png b/test/language/import/import-bytes/bytes-from-png_FIXTURE.png similarity index 100% rename from test/language/import/import-bytes/bytes-from-png-FIXTURE.png rename to test/language/import/import-bytes/bytes-from-png_FIXTURE.png diff --git a/test/language/import/import-bytes/bytes-from-txt.js b/test/language/import/import-bytes/bytes-from-txt.js index a1285936ae9..cadd26e7866 100644 --- a/test/language/import/import-bytes/bytes-from-txt.js +++ b/test/language/import/import-bytes/bytes-from-txt.js @@ -8,7 +8,7 @@ features: [import-attributes, immutable-arraybuffer, import-bytes] includes: [compareArray.js] ---*/ -import value from './bytes-from-txt-FIXTURE.txt' with { type: 'bytes' }; +import value from './bytes-from-txt_FIXTURE.txt' with { type: 'bytes' }; assert(value instanceof Uint8Array); assert(value.buffer instanceof ArrayBuffer); diff --git a/test/language/import/import-bytes/bytes-from-txt-FIXTURE.txt b/test/language/import/import-bytes/bytes-from-txt_FIXTURE.txt similarity index 100% rename from test/language/import/import-bytes/bytes-from-txt-FIXTURE.txt rename to test/language/import/import-bytes/bytes-from-txt_FIXTURE.txt From c73efc748e769f42975bec543b8d52c72b8f29f7 Mon Sep 17 00:00:00 2001 From: Steven Date: Sat, 20 Dec 2025 16:10:00 -0500 Subject: [PATCH 03/17] add tests for json and js --- .../import/import-bytes/bytes-from-js.js | 47 +++++++++++++++++++ .../import-bytes/bytes-from-js_FIXTURE.js | 1 + .../import/import-bytes/bytes-from-json.js | 43 +++++++++++++++++ .../import-bytes/bytes-from-json_FIXTURE.json | 1 + 4 files changed, 92 insertions(+) create mode 100644 test/language/import/import-bytes/bytes-from-js.js create mode 100644 test/language/import/import-bytes/bytes-from-js_FIXTURE.js create mode 100644 test/language/import/import-bytes/bytes-from-json.js create mode 100644 test/language/import/import-bytes/bytes-from-json_FIXTURE.json diff --git a/test/language/import/import-bytes/bytes-from-js.js b/test/language/import/import-bytes/bytes-from-js.js new file mode 100644 index 00000000000..9747d860a9e --- /dev/null +++ b/test/language/import/import-bytes/bytes-from-js.js @@ -0,0 +1,47 @@ +// Copyright (C) 2021 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-create-bytes-module +description: Creates bytes module from js file +flags: [module] +features: [import-attributes, immutable-arraybuffer, import-bytes] +includes: [compareArray.js] +---*/ + +import value from './bytes-from-js_FIXTURE.js' with { type: 'bytes' }; + +assert(value instanceof Uint8Array); +assert(value.buffer instanceof ArrayBuffer); + +assert.sameValue(value.length, 16); +assert.sameValue(value.buffer.byteLength, 16); + +assert.compareArray( + Array.from(value), + [ + 0x76, // v + 0x61, // a + 0x72, // r + 0x20, // (space) + 0x66, // f + 0x6f, // o + 0x6f, // o + 0x20, // (space) + 0x3d, // = + 0x20, // (space) + 0x27, // ' + 0x62, // b + 0x61, // a + 0x72, // r + 0x27, // ' + 0x0a, // (newline) + ] +); + +assert.throws(TypeError, function() { + value.buffer.resize(0); +}); + +assert.throws(TypeError, function() { + value.buffer.transfer(); +}); diff --git a/test/language/import/import-bytes/bytes-from-js_FIXTURE.js b/test/language/import/import-bytes/bytes-from-js_FIXTURE.js new file mode 100644 index 00000000000..8375fcb4376 --- /dev/null +++ b/test/language/import/import-bytes/bytes-from-js_FIXTURE.js @@ -0,0 +1 @@ +var foo = 'bar' diff --git a/test/language/import/import-bytes/bytes-from-json.js b/test/language/import/import-bytes/bytes-from-json.js new file mode 100644 index 00000000000..b8f4252d125 --- /dev/null +++ b/test/language/import/import-bytes/bytes-from-json.js @@ -0,0 +1,43 @@ +// Copyright (C) 2021 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-create-bytes-module +description: Creates bytes module from json file +flags: [module] +features: [import-attributes, immutable-arraybuffer, import-bytes] +includes: [compareArray.js] +---*/ + +import value from './bytes-from-js_FIXTURE.json' with { type: 'bytes' }; + +assert(value instanceof Uint8Array); +assert(value.buffer instanceof ArrayBuffer); + +assert.sameValue(value.length, 12); +assert.sameValue(value.buffer.byteLength, 12); + +assert.compareArray( + Array.from(value), + [ + 0x7b, // { + 0x20, // (space) + 0x22, // " + 0x61, // a + 0x22, // " + 0x3a, // : + 0x20, // (space) + 0x34, // 4 + 0x32, // 2 + 0x20, // (space) + 0x7d, // } + 0x0a, // (newline) + ] +); + +assert.throws(TypeError, function() { + value.buffer.resize(0); +}); + +assert.throws(TypeError, function() { + value.buffer.transfer(); +}); diff --git a/test/language/import/import-bytes/bytes-from-json_FIXTURE.json b/test/language/import/import-bytes/bytes-from-json_FIXTURE.json new file mode 100644 index 00000000000..5886c6f613f --- /dev/null +++ b/test/language/import/import-bytes/bytes-from-json_FIXTURE.json @@ -0,0 +1 @@ +{ "a": 42 } From 035f2a8ad35ce84043a34d2916411ac62f474f3d Mon Sep 17 00:00:00 2001 From: Steven Date: Sat, 20 Dec 2025 16:11:03 -0500 Subject: [PATCH 04/17] fix copyright --- test/language/import/import-bytes/bytes-from-empty.js | 2 +- test/language/import/import-bytes/bytes-from-js.js | 2 +- test/language/import/import-bytes/bytes-from-json.js | 2 +- test/language/import/import-bytes/bytes-from-png.js | 2 +- test/language/import/import-bytes/bytes-from-txt.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/language/import/import-bytes/bytes-from-empty.js b/test/language/import/import-bytes/bytes-from-empty.js index 87ad8ce882c..3fcb90fa360 100644 --- a/test/language/import/import-bytes/bytes-from-empty.js +++ b/test/language/import/import-bytes/bytes-from-empty.js @@ -1,4 +1,4 @@ -// Copyright (C) 2021 the V8 project authors. All rights reserved. +// Copyright (C) 2025 @styfle. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-create-bytes-module diff --git a/test/language/import/import-bytes/bytes-from-js.js b/test/language/import/import-bytes/bytes-from-js.js index 9747d860a9e..45a74c19196 100644 --- a/test/language/import/import-bytes/bytes-from-js.js +++ b/test/language/import/import-bytes/bytes-from-js.js @@ -1,4 +1,4 @@ -// Copyright (C) 2021 the V8 project authors. All rights reserved. +// Copyright (C) 2025 @styfle. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-create-bytes-module diff --git a/test/language/import/import-bytes/bytes-from-json.js b/test/language/import/import-bytes/bytes-from-json.js index b8f4252d125..a0f0c76f4c7 100644 --- a/test/language/import/import-bytes/bytes-from-json.js +++ b/test/language/import/import-bytes/bytes-from-json.js @@ -1,4 +1,4 @@ -// Copyright (C) 2021 the V8 project authors. All rights reserved. +// Copyright (C) 2025 @styfle. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-create-bytes-module diff --git a/test/language/import/import-bytes/bytes-from-png.js b/test/language/import/import-bytes/bytes-from-png.js index 2828a6503b3..a227218ff3d 100644 --- a/test/language/import/import-bytes/bytes-from-png.js +++ b/test/language/import/import-bytes/bytes-from-png.js @@ -1,4 +1,4 @@ -// Copyright (C) 2021 the V8 project authors. All rights reserved. +// Copyright (C) 2025 @styfle. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-create-bytes-module diff --git a/test/language/import/import-bytes/bytes-from-txt.js b/test/language/import/import-bytes/bytes-from-txt.js index cadd26e7866..c4ebec8263a 100644 --- a/test/language/import/import-bytes/bytes-from-txt.js +++ b/test/language/import/import-bytes/bytes-from-txt.js @@ -1,4 +1,4 @@ -// Copyright (C) 2021 the V8 project authors. All rights reserved. +// Copyright (C) 2025 @styfle. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-create-bytes-module From 339abeee60c73d08351f6021f288a7b3837043ff Mon Sep 17 00:00:00 2001 From: Steven Date: Sat, 20 Dec 2025 16:11:23 -0500 Subject: [PATCH 05/17] fix typo --- test/language/import/import-bytes/bytes-from-json.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/language/import/import-bytes/bytes-from-json.js b/test/language/import/import-bytes/bytes-from-json.js index a0f0c76f4c7..1a1490dbacf 100644 --- a/test/language/import/import-bytes/bytes-from-json.js +++ b/test/language/import/import-bytes/bytes-from-json.js @@ -8,7 +8,7 @@ features: [import-attributes, immutable-arraybuffer, import-bytes] includes: [compareArray.js] ---*/ -import value from './bytes-from-js_FIXTURE.json' with { type: 'bytes' }; +import value from './bytes-from-json_FIXTURE.json' with { type: 'bytes' }; assert(value instanceof Uint8Array); assert(value.buffer instanceof ArrayBuffer); From 35d9bd48626719bf288fc486dd542f952f3b62aa Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 22 Dec 2025 08:57:53 -0500 Subject: [PATCH 06/17] add missing copyright --- test/language/import/import-bytes/bytes-from-js_FIXTURE.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/language/import/import-bytes/bytes-from-js_FIXTURE.js b/test/language/import/import-bytes/bytes-from-js_FIXTURE.js index 8375fcb4376..09665a839be 100644 --- a/test/language/import/import-bytes/bytes-from-js_FIXTURE.js +++ b/test/language/import/import-bytes/bytes-from-js_FIXTURE.js @@ -1 +1,3 @@ +// Copyright (C) 2025 @styfle. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. var foo = 'bar' From 67ef9e51788600d6ac9516b839c462f4a83bd47a Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 22 Dec 2025 09:38:21 -0500 Subject: [PATCH 07/17] fix: ignore binary files in python generator --- tools/generation/generator.py | 5 +++++ tools/generation/lib/test.py | 14 +++++++++++--- tools/generation/test/run.py | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/tools/generation/generator.py b/tools/generation/generator.py index 030a9491ff2..e70ec37b006 100755 --- a/tools/generation/generator.py +++ b/tools/generation/generator.py @@ -42,6 +42,11 @@ def clean(args): for fileName in map(lambda x: os.path.join(subdir, x), fileNames): if os.path.basename(fileName) in ignored_files: continue + # Test directories may contain binary fixtures which + # cannot be decoded as UTF-8, so we must skip them. + ext = os.path.splitext(fileName)[1].lower() + if ext == '.bin' or ext == '.png' or ext == '.jpg': + continue test = Test(fileName) test.load() if test.is_generated(): diff --git a/tools/generation/lib/test.py b/tools/generation/lib/test.py index 824d64ea0d9..f2b3005174a 100644 --- a/tools/generation/lib/test.py +++ b/tools/generation/lib/test.py @@ -10,6 +10,8 @@ def after_parse(fn): def wrapper(self, *args, **kwargs): if self.source is None and self.dynamic_source is not None: self.source = self.dynamic_source() + if isinstance(self.source, bytes): + self.source = self.source.decode('utf-8') self._parse() return fn(self, *args, **kwargs) return wrapper @@ -25,7 +27,7 @@ def __init__(self, file_name, dynamic_source=None, source_file_names=None): self.attribs = dict(meta=None) def load(self): - with open(self.file_name, 'r') as handle: + with open(self.file_name, 'r', encoding='utf-8') as handle: self.source = handle.read() self._parse() @@ -49,13 +51,16 @@ def is_generated(self): @after_parse def to_string(self): + source = self.source + if isinstance(source, bytes): + source = source.decode('utf-8') return '\n'.join([ '/**', ' * ----------------------------------------------------------------', ' * ' + self.file_name, ' * ----------------------------------------------------------------', ' */', - self.source.decode('utf-8'), + source, '\n']) @after_parse @@ -69,4 +74,7 @@ def write(self, prefix, parents=False): raise Exception('Directory does not exist: ' + path) with open(location, 'wb') as handle: - handle.write(self.source) + data = self.source + if isinstance(data, str): + data = data.encode('utf-8') + handle.write(data) diff --git a/tools/generation/test/run.py b/tools/generation/test/run.py index 98af0aba99d..d7259fa4728 100755 --- a/tools/generation/test/run.py +++ b/tools/generation/test/run.py @@ -49,6 +49,39 @@ def compareTrees(self, targetName): def tearDown(self): shutil.rmtree(OUT_DIR, ignore_errors=True) + def test_clean_ignores_binary_fixtures(self): + os.makedirs(OUT_DIR, exist_ok=True) + + png_path = os.path.join(OUT_DIR, 'example_FIXTURE.png') + with open(png_path, 'wb') as handle: + handle.write(b'\x89PNG\r\nSomeMoreBytesHere') + + generated_path = os.path.join(OUT_DIR, 'generated-test.js') + with open(generated_path, 'w', encoding='utf-8') as handle: + handle.write( + '/*---\n' + 'description: generated test\n' + 'flags: [generated]\n' + '---*/\n' + '\n' + '"hello";\n' + ) + + sp = subprocess.Popen( + [ex, 'clean', OUT_DIR], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + stdout, stderr = sp.communicate() + + self.assertEqual( + sp.returncode, + 0, + msg='clean failed\nstdout:\n' + stdout.decode('utf-8', errors='replace') + + '\nstderr:\n' + stderr.decode('utf-8', errors='replace')) + + self.assertTrue(os.path.exists(png_path)) + self.assertFalse(os.path.exists(generated_path)) + def test_glob(self): result = self.fixture('glob.case') self.assertEqual(result['returncode'], 0) From 648c67513c9b9fa88eb7b69a58a5b7616d1524f8 Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 22 Dec 2025 09:58:35 -0500 Subject: [PATCH 08/17] chore: revert test.py since its no longer instatiated --- tools/generation/lib/test.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/tools/generation/lib/test.py b/tools/generation/lib/test.py index f2b3005174a..824d64ea0d9 100644 --- a/tools/generation/lib/test.py +++ b/tools/generation/lib/test.py @@ -10,8 +10,6 @@ def after_parse(fn): def wrapper(self, *args, **kwargs): if self.source is None and self.dynamic_source is not None: self.source = self.dynamic_source() - if isinstance(self.source, bytes): - self.source = self.source.decode('utf-8') self._parse() return fn(self, *args, **kwargs) return wrapper @@ -27,7 +25,7 @@ def __init__(self, file_name, dynamic_source=None, source_file_names=None): self.attribs = dict(meta=None) def load(self): - with open(self.file_name, 'r', encoding='utf-8') as handle: + with open(self.file_name, 'r') as handle: self.source = handle.read() self._parse() @@ -51,16 +49,13 @@ def is_generated(self): @after_parse def to_string(self): - source = self.source - if isinstance(source, bytes): - source = source.decode('utf-8') return '\n'.join([ '/**', ' * ----------------------------------------------------------------', ' * ' + self.file_name, ' * ----------------------------------------------------------------', ' */', - source, + self.source.decode('utf-8'), '\n']) @after_parse @@ -74,7 +69,4 @@ def write(self, prefix, parents=False): raise Exception('Directory does not exist: ' + path) with open(location, 'wb') as handle: - data = self.source - if isinstance(data, str): - data = data.encode('utf-8') - handle.write(data) + handle.write(self.source) From 8d5e13cd0d71f637e244c015efd173c7fca4986c Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 26 Dec 2025 16:21:59 -0500 Subject: [PATCH 09/17] add assertion for `value.buffer.immutable` --- test/language/import/import-bytes/bytes-from-empty.js | 1 + test/language/import/import-bytes/bytes-from-js.js | 1 + test/language/import/import-bytes/bytes-from-json.js | 1 + test/language/import/import-bytes/bytes-from-png.js | 1 + test/language/import/import-bytes/bytes-from-txt.js | 1 + 5 files changed, 5 insertions(+) diff --git a/test/language/import/import-bytes/bytes-from-empty.js b/test/language/import/import-bytes/bytes-from-empty.js index 3fcb90fa360..48705f5f60e 100644 --- a/test/language/import/import-bytes/bytes-from-empty.js +++ b/test/language/import/import-bytes/bytes-from-empty.js @@ -15,6 +15,7 @@ assert(value.buffer instanceof ArrayBuffer); assert.sameValue(value.length, 0); assert.sameValue(value.buffer.byteLength, 0); +assert.sameValue(value.buffer.immutable, true); assert.compareArray(Array.from(value), []); diff --git a/test/language/import/import-bytes/bytes-from-js.js b/test/language/import/import-bytes/bytes-from-js.js index 45a74c19196..4eecd321cf0 100644 --- a/test/language/import/import-bytes/bytes-from-js.js +++ b/test/language/import/import-bytes/bytes-from-js.js @@ -15,6 +15,7 @@ assert(value.buffer instanceof ArrayBuffer); assert.sameValue(value.length, 16); assert.sameValue(value.buffer.byteLength, 16); +assert.sameValue(value.buffer.immutable, true); assert.compareArray( Array.from(value), diff --git a/test/language/import/import-bytes/bytes-from-json.js b/test/language/import/import-bytes/bytes-from-json.js index 1a1490dbacf..cde5595e6e3 100644 --- a/test/language/import/import-bytes/bytes-from-json.js +++ b/test/language/import/import-bytes/bytes-from-json.js @@ -15,6 +15,7 @@ assert(value.buffer instanceof ArrayBuffer); assert.sameValue(value.length, 12); assert.sameValue(value.buffer.byteLength, 12); +assert.sameValue(value.buffer.immutable, true); assert.compareArray( Array.from(value), diff --git a/test/language/import/import-bytes/bytes-from-png.js b/test/language/import/import-bytes/bytes-from-png.js index a227218ff3d..c37764978a9 100644 --- a/test/language/import/import-bytes/bytes-from-png.js +++ b/test/language/import/import-bytes/bytes-from-png.js @@ -15,6 +15,7 @@ assert(value.buffer instanceof ArrayBuffer); assert.sameValue(value.length, 67); assert.sameValue(value.buffer.byteLength, 67); +assert.sameValue(value.buffer.immutable, true); assert.compareArray( Array.from(value), diff --git a/test/language/import/import-bytes/bytes-from-txt.js b/test/language/import/import-bytes/bytes-from-txt.js index c4ebec8263a..d332e10b065 100644 --- a/test/language/import/import-bytes/bytes-from-txt.js +++ b/test/language/import/import-bytes/bytes-from-txt.js @@ -15,6 +15,7 @@ assert(value.buffer instanceof ArrayBuffer); assert.sameValue(value.length, 13); assert.sameValue(value.buffer.byteLength, 13); +assert.sameValue(value.buffer.immutable, true); assert.compareArray( Array.from(value), From cecb53e98abc5682d8394573dedf48a686e40079 Mon Sep 17 00:00:00 2001 From: Steven Date: Wed, 21 Jan 2026 21:55:48 -0500 Subject: [PATCH 10/17] skip clean for files containing `_FIXTURE` --- tools/generation/generator.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tools/generation/generator.py b/tools/generation/generator.py index e70ec37b006..ed6116f886f 100755 --- a/tools/generation/generator.py +++ b/tools/generation/generator.py @@ -40,12 +40,8 @@ def find_cases(location): def clean(args): for (subdir, _, fileNames) in os.walk(args.directory): for fileName in map(lambda x: os.path.join(subdir, x), fileNames): - if os.path.basename(fileName) in ignored_files: - continue - # Test directories may contain binary fixtures which - # cannot be decoded as UTF-8, so we must skip them. - ext = os.path.splitext(fileName)[1].lower() - if ext == '.bin' or ext == '.png' or ext == '.jpg': + basename = os.path.basename(fileName) + if basename in ignored_files or '_FIXTURE' in basename: continue test = Test(fileName) test.load() From e49c3e976c72995c245cb3719e153acf45105dae Mon Sep 17 00:00:00 2001 From: Steven Date: Sun, 25 Jan 2026 14:33:04 -0500 Subject: [PATCH 11/17] fix: remove unnecessary comment --- test/language/import/import-bytes/bytes-from-js_FIXTURE.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/language/import/import-bytes/bytes-from-js_FIXTURE.js b/test/language/import/import-bytes/bytes-from-js_FIXTURE.js index 09665a839be..8375fcb4376 100644 --- a/test/language/import/import-bytes/bytes-from-js_FIXTURE.js +++ b/test/language/import/import-bytes/bytes-from-js_FIXTURE.js @@ -1,3 +1 @@ -// Copyright (C) 2025 @styfle. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. var foo = 'bar' From 78ca6eb717aa097b0d17a35f7f02d9dc316ea60b Mon Sep 17 00:00:00 2001 From: Steven Date: Sun, 25 Jan 2026 14:37:54 -0500 Subject: [PATCH 12/17] fix: disable check license for _FIXTURE --- tools/lint/lib/checks/license.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/lint/lib/checks/license.py b/tools/lint/lib/checks/license.py index f7e1c94b823..6e30769923c 100644 --- a/tools/lint/lib/checks/license.py +++ b/tools/lint/lib/checks/license.py @@ -35,6 +35,9 @@ def run(self, name, meta, source): if name.endswith('.json'): return + if '_FIXTURE' in name: + return + if meta and 'flags' in meta and 'generated' in meta['flags']: return From bc2cf980797ba9f8bddee19d0f2d427c6788e9e8 Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 26 Jan 2026 23:00:18 -0500 Subject: [PATCH 13/17] Revert "fix: disable check license for _FIXTURE" This reverts commit ac5338b5168eaadc24d368a144630199801926f4. --- tools/lint/lib/checks/license.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools/lint/lib/checks/license.py b/tools/lint/lib/checks/license.py index 6e30769923c..f7e1c94b823 100644 --- a/tools/lint/lib/checks/license.py +++ b/tools/lint/lib/checks/license.py @@ -35,9 +35,6 @@ def run(self, name, meta, source): if name.endswith('.json'): return - if '_FIXTURE' in name: - return - if meta and 'flags' in meta and 'generated' in meta['flags']: return From 0f7ab154314998a64dd48bdc064b656db7b692c1 Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 26 Jan 2026 23:00:27 -0500 Subject: [PATCH 14/17] Revert "fix: remove unnecessary comment" This reverts commit fdc288ccd065fd52e4dd7356107836fe4bdabe7d. --- test/language/import/import-bytes/bytes-from-js_FIXTURE.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/language/import/import-bytes/bytes-from-js_FIXTURE.js b/test/language/import/import-bytes/bytes-from-js_FIXTURE.js index 8375fcb4376..09665a839be 100644 --- a/test/language/import/import-bytes/bytes-from-js_FIXTURE.js +++ b/test/language/import/import-bytes/bytes-from-js_FIXTURE.js @@ -1 +1,3 @@ +// Copyright (C) 2025 @styfle. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. var foo = 'bar' From 965e2198daf03634998a659b9c2544e7dc6e0e4a Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 26 Jan 2026 23:03:45 -0500 Subject: [PATCH 15/17] update bytes to match js code including comments --- .../import/import-bytes/bytes-from-js.js | 155 ++++++++++++++++-- 1 file changed, 139 insertions(+), 16 deletions(-) diff --git a/test/language/import/import-bytes/bytes-from-js.js b/test/language/import/import-bytes/bytes-from-js.js index 4eecd321cf0..b3ffe294be9 100644 --- a/test/language/import/import-bytes/bytes-from-js.js +++ b/test/language/import/import-bytes/bytes-from-js.js @@ -20,22 +20,145 @@ assert.sameValue(value.buffer.immutable, true); assert.compareArray( Array.from(value), [ - 0x76, // v - 0x61, // a - 0x72, // r - 0x20, // (space) - 0x66, // f - 0x6f, // o - 0x6f, // o - 0x20, // (space) - 0x3d, // = - 0x20, // (space) - 0x27, // ' - 0x62, // b - 0x61, // a - 0x72, // r - 0x27, // ' - 0x0a, // (newline) + 47, + 47, + 32, + 67, + 111, + 112, + 121, + 114, + 105, + 103, + 104, + 116, + 32, + 40, + 67, + 41, + 32, + 50, + 48, + 50, + 53, + 32, + 64, + 115, + 116, + 121, + 102, + 108, + 101, + 46, + 32, + 65, + 108, + 108, + 32, + 114, + 105, + 103, + 104, + 116, + 115, + 32, + 114, + 101, + 115, + 101, + 114, + 118, + 101, + 100, + 46, + 10, + 47, + 47, + 32, + 84, + 104, + 105, + 115, + 32, + 99, + 111, + 100, + 101, + 32, + 105, + 115, + 32, + 103, + 111, + 118, + 101, + 114, + 110, + 101, + 100, + 32, + 98, + 121, + 32, + 116, + 104, + 101, + 32, + 66, + 83, + 68, + 32, + 108, + 105, + 99, + 101, + 110, + 115, + 101, + 32, + 102, + 111, + 117, + 110, + 100, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 76, + 73, + 67, + 69, + 78, + 83, + 69, + 32, + 102, + 105, + 108, + 101, + 46, + 10, + 118, + 97, + 114, + 32, + 102, + 111, + 111, + 32, + 61, + 32, + 39, + 98, + 97, + 114, + 39, + 10 ] ); From 746ebbc6829568cdb75dd69ef3abba91e5b3dbb7 Mon Sep 17 00:00:00 2001 From: Steven Date: Wed, 28 Jan 2026 16:38:49 -0500 Subject: [PATCH 16/17] add windows caveat to interpreting.md --- INTERPRETING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/INTERPRETING.md b/INTERPRETING.md index 5a76859655f..b5cb6de4462 100644 --- a/INTERPRETING.md +++ b/INTERPRETING.md @@ -10,6 +10,8 @@ property of the JSON-formatted `package.json` file will be incremented. In this way, consumers who are transitioning between revisions of Test262 can more easily determine the cause of new test failures. +**Note** Some tests are sensitive to line endings. On Windows, a Git configuration of `core.autocrlf = true` may cause unexpected test failures. It is advised to set `core.autocrlf = false` before cloning this repository. + ## Test Execution Test262 tests are only valid under the runtime environment conditions described From d98d096dbaf8a0ab68a3167c57dcd0397f4218b9 Mon Sep 17 00:00:00 2001 From: Steven Date: Sat, 14 Feb 2026 10:15:01 -0500 Subject: [PATCH 17/17] fix: assert proper length --- test/language/import/import-bytes/bytes-from-js.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/language/import/import-bytes/bytes-from-js.js b/test/language/import/import-bytes/bytes-from-js.js index b3ffe294be9..946cfd7a279 100644 --- a/test/language/import/import-bytes/bytes-from-js.js +++ b/test/language/import/import-bytes/bytes-from-js.js @@ -13,8 +13,8 @@ import value from './bytes-from-js_FIXTURE.js' with { type: 'bytes' }; assert(value instanceof Uint8Array); assert(value.buffer instanceof ArrayBuffer); -assert.sameValue(value.length, 16); -assert.sameValue(value.buffer.byteLength, 16); +assert.sameValue(value.length, 139); +assert.sameValue(value.buffer.byteLength, 139); assert.sameValue(value.buffer.immutable, true); assert.compareArray(