Skip to content

Commit af7bbeb

Browse files
committed
Add file_packager tests and changelog mention
1 parent 0c302c1 commit af7bbeb

File tree

3 files changed

+40
-5
lines changed

3 files changed

+40
-5
lines changed

ChangeLog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ See docs/process.md for more on how version tagging works.
3434
- emcc will now error if `MINIMAL_RUNTIME_STREAMING_WASM_COMPILATION` or
3535
`MINIMAL_RUNTIME_STREAMING_WASM_INSTANTIATION` are used with `SINGLE_FILE`.
3636
These are fundamentally incompatible but were previously ignored. (#24849)
37+
- `--modularize` flag was added to `file_packager.py` available when run
38+
standalone, to enable ES6 imports of generated JavaScript code
3739

3840
4.0.12 - 08/01/25
3941
-----------------

test/test_other.py

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3804,21 +3804,34 @@ def check(text):
38043804
stderr = self.expect_fail([FILE_PACKAGER, 'test.data', '--quiet', '--preload', '../data1.txt'])
38053805
self.assertContained('which is not contained within the current directory', stderr)
38063806

3807+
stderr = self.expect_fail([FILE_PACKAGER, 'test.data', '--quiet', '--preload', '../data1.txt', '--modularize'])
3808+
self.assertContained('which is not contained within the current directory', stderr)
3809+
38073810
# relative path that ends up under us is cool
38083811
proc = self.run_process([FILE_PACKAGER, 'test.data', '--quiet', '--preload', '../subdir/data2.txt'], stderr=PIPE, stdout=PIPE)
38093812
self.assertEqual(proc.stderr, '')
38103813
check(proc.stdout)
38113814

3812-
# direct path leads to the same code being generated - relative path does not make us do anything different
3813-
proc2 = self.run_process([FILE_PACKAGER, 'test.data', '--quiet', '--preload', 'data2.txt'], stderr=PIPE, stdout=PIPE)
3814-
check(proc2.stdout)
3815-
self.assertEqual(proc2.stderr, '')
3815+
proc = self.run_process([FILE_PACKAGER, 'test.data', '--quiet', '--preload', '../subdir/data2.txt', '--modularize'], stderr=PIPE, stdout=PIPE)
3816+
self.assertEqual(proc.stderr, '')
3817+
check(proc.stdout)
38163818

38173819
def clean(txt):
38183820
lines = txt.splitlines()
38193821
lines = [l for l in lines if 'PACKAGE_UUID' not in l and 'loadPackage({' not in l]
38203822
return ''.join(lines)
38213823

3824+
# direct path leads to the same code being generated - relative path does not make us do anything different
3825+
proc2 = self.run_process([FILE_PACKAGER, 'test.data', '--quiet', '--preload', 'data2.txt'], stderr=PIPE, stdout=PIPE)
3826+
check(proc2.stdout)
3827+
self.assertEqual(proc2.stderr, '')
3828+
3829+
self.assertTextDataIdentical(clean(proc.stdout), clean(proc2.stdout))
3830+
3831+
proc2 = self.run_process([FILE_PACKAGER, 'test.data', '--quiet', '--preload', 'data2.txt', '--modularize'], stderr=PIPE, stdout=PIPE)
3832+
check(proc2.stdout)
3833+
self.assertEqual(proc2.stderr, '')
3834+
38223835
self.assertTextDataIdentical(clean(proc.stdout), clean(proc2.stdout))
38233836

38243837
def test_file_packager_response_file(self):
@@ -3919,6 +3932,11 @@ def test_file_packager_returns_error_if_target_equal_to_jsoutput(self):
39193932
err = self.expect_fail([FILE_PACKAGER, 'test.data', '--js-output=test.data'])
39203933
self.assertContained(MESSAGE, err)
39213934

3935+
def test_file_packager_returns_error_if_emcc_and_modularize(self):
3936+
MESSAGE = 'error: Can\'t use modularize option together with --from-emcc since the code should be embedded within emcc\'s code'
3937+
err = self.expect_fail([FILE_PACKAGER, 'test.data', '--modularize', '--from-emcc'])
3938+
self.assertEqual(MESSAGE, err)
3939+
39223940
def test_file_packager_embed(self):
39233941
create_file('data.txt', 'hello data')
39243942

@@ -3945,6 +3963,21 @@ def test_file_packager_embed(self):
39453963
output = self.run_js('a.out.js')
39463964
self.assertContained('hello data', output)
39473965

3966+
def test_filepackager_standalone_modularize(self):
3967+
MESSAGE = 'Remember to build the main file with `-sFORCE_FILESYSTEM` so that it includes support for loading this file package'
3968+
3969+
create_file('data.txt', 'hello data')
3970+
err = self.run_process([FILE_PACKAGER, 'test.data', '--modularize', '--preload', 'data.txt', '--js-output=data.js'], stderr=PIPE).stderr
3971+
self.assertEqual(MESSAGE, err)
3972+
3973+
generated_content = read_file('data.js')
3974+
3975+
expected_opening = "export default function loadDataFile(Module) {"
3976+
expected_closing = "\n};\n// END the loadDataFile function"
3977+
3978+
self.assertContained(expected_opening, generated_content)
3979+
self.assertContained(expected_closing, generated_content)
3980+
39483981
@crossplatform
39493982
def test_file_packager_depfile(self):
39503983
create_file('data1.txt', 'data1')

tools/file_packager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ def main(): # noqa: C901, PLR0912, PLR0915
492492
return 1
493493

494494
if options.from_emcc and options.modularize:
495-
diagnostics.error('Can\'t use modularize option together with --from-emcc since the code should be embedded'
495+
diagnostics.error('Can\'t use modularize option together with --from-emcc since the code should be embedded '
496496
'within emcc\'s code')
497497
return 1
498498

0 commit comments

Comments
 (0)