@@ -3788,20 +3788,33 @@ def check(text):
37883788    stderr = self.expect_fail([FILE_PACKAGER, 'test.data', '--quiet', '--preload', '../data1.txt'])
37893789    self.assertContained('which is not contained within the current directory', stderr)
37903790
3791+     stderr = self.expect_fail([FILE_PACKAGER, 'test.data', '--quiet', '--preload', '../data1.txt', '--modularize'])
3792+     self.assertContained('which is not contained within the current directory', stderr)
3793+ 
37913794    # relative path that ends up under us is cool
37923795    proc = self.run_process([FILE_PACKAGER, 'test.data', '--quiet', '--preload', '../subdir/data2.txt'], stderr=PIPE, stdout=PIPE)
37933796    self.assertEqual(proc.stderr, '')
37943797    check(proc.stdout)
37953798
3799+     proc = self.run_process([FILE_PACKAGER, 'test.data', '--quiet', '--preload', '../subdir/data2.txt', '--modularize'], stderr=PIPE, stdout=PIPE)
3800+     self.assertEqual(proc.stderr, '')
3801+     check(proc.stdout)
3802+ 
3803+      def clean(txt):
3804+       lines = txt.splitlines()
3805+       lines = [l for l in lines if 'PACKAGE_UUID' not in l and 'loadPackage({' not in l]
3806+       return ''.join(lines)
3807+ 
37963808    # direct path leads to the same code being generated - relative path does not make us do anything different
37973809    proc2 = self.run_process([FILE_PACKAGER, 'test.data', '--quiet', '--preload', 'data2.txt'], stderr=PIPE, stdout=PIPE)
37983810    check(proc2.stdout)
37993811    self.assertEqual(proc2.stderr, '')
38003812
3801-     def clean(txt):
3802-       lines = txt.splitlines()
3803-       lines = [l for l in lines if 'PACKAGE_UUID' not in l and 'loadPackage({' not in l]
3804-       return ''.join(lines)
3813+     self.assertTextDataIdentical(clean(proc.stdout), clean(proc2.stdout))
3814+ 
3815+     proc2 = self.run_process([FILE_PACKAGER, 'test.data', '--quiet', '--preload', 'data2.txt', '--modularize'], stderr=PIPE, stdout=PIPE)
3816+     check(proc2.stdout)
3817+     self.assertEqual(proc2.stderr, '')
38053818
38063819    self.assertTextDataIdentical(clean(proc.stdout), clean(proc2.stdout))
38073820
@@ -3903,6 +3916,11 @@ def test_file_packager_returns_error_if_target_equal_to_jsoutput(self):
39033916    err = self.expect_fail([FILE_PACKAGER, 'test.data', '--js-output=test.data'])
39043917    self.assertContained(MESSAGE, err)
39053918
3919+   def test_file_packager_returns_error_if_emcc_and_modularize(self):
3920+     MESSAGE = 'error: Can\'t use modularize option together with --from-emcc since the code should be embedded within emcc\'s code'
3921+     err = self.expect_fail([FILE_PACKAGER, 'test.data', '--modularize', '--from-emcc'])
3922+     self.assertEqual(MESSAGE, err)
3923+ 
39063924  def test_file_packager_embed(self):
39073925    create_file('data.txt', 'hello data')
39083926
@@ -3929,6 +3947,21 @@ def test_file_packager_embed(self):
39293947    output = self.run_js('a.out.js')
39303948    self.assertContained('hello data', output)
39313949
3950+   def test_filepackager_standalone_modularize(self):
3951+     MESSAGE = 'Remember to build the main file with `-sFORCE_FILESYSTEM` so that it includes support for loading this file package'
3952+ 
3953+     create_file('data.txt', 'hello data')
3954+     err = self.run_process([FILE_PACKAGER, 'test.data', '--modularize', '--preload', 'data.txt', '--js-output=data.js'], stderr=PIPE).stderr
3955+     self.assertEqual(MESSAGE, err)
3956+ 
3957+     generated_content = read_file('data.js')
3958+ 
3959+     expected_opening = "export default function loadDataFile(Module) {"
3960+     expected_closing = "\n};\n// END the loadDataFile function"
3961+ 
3962+     self.assertContained(expected_opening, generated_content)
3963+     self.assertContained(expected_closing, generated_content)
3964+ 
39323965  @crossplatform
39333966  def test_file_packager_depfile(self):
39343967    create_file('data1.txt', 'data1')
0 commit comments