From 91e21836f667c784a8a63ab1f18d81f553e679cb Mon Sep 17 00:00:00 2001 From: Gildardo Adrian Maravilla Jacome Date: Mon, 4 Jan 2021 20:28:01 -0600 Subject: Fixed #32319 -- Added ES module support to ManifestStaticFilesStorage. --- .../project/documents/absolute_root.js | 2 + .../project/documents/cached/module.js | 22 +++++++++++ .../project/documents/cached/module_test.js | 5 +++ .../project/documents/nested/js/nested.js | 1 + tests/staticfiles_tests/test_storage.py | 46 ++++++++++++++++++++++ 5 files changed, 76 insertions(+) create mode 100644 tests/staticfiles_tests/project/documents/absolute_root.js create mode 100644 tests/staticfiles_tests/project/documents/cached/module.js create mode 100644 tests/staticfiles_tests/project/documents/cached/module_test.js create mode 100644 tests/staticfiles_tests/project/documents/nested/js/nested.js (limited to 'tests/staticfiles_tests') diff --git a/tests/staticfiles_tests/project/documents/absolute_root.js b/tests/staticfiles_tests/project/documents/absolute_root.js new file mode 100644 index 0000000000..4561b0389b --- /dev/null +++ b/tests/staticfiles_tests/project/documents/absolute_root.js @@ -0,0 +1,2 @@ +const rootConst = "root"; +export default rootConst; diff --git a/tests/staticfiles_tests/project/documents/cached/module.js b/tests/staticfiles_tests/project/documents/cached/module.js new file mode 100644 index 0000000000..7380ad7856 --- /dev/null +++ b/tests/staticfiles_tests/project/documents/cached/module.js @@ -0,0 +1,22 @@ +// Static imports. +import rootConst from "/static/absolute_root.js"; +import testConst from "./module_test.js"; +import * as NewModule from "./module_test.js"; +import { testConst as alias } from "./module_test.js"; +import { firstConst, secondConst } from "./module_test.js"; +import { + firstVar as firstVarAlias, + secondVar as secondVarAlias +} from "./module_test.js"; +import relativeModule from "../nested/js/nested.js"; + +// Dynamic imports. +const dynamicModule = import("./module_test.js"); + +// Modules exports to aggregate modules. +export * from "./module_test.js"; +export { testConst } from "./module_test.js"; +export { + firstVar as firstVarAlias, + secondVar as secondVarAlias +} from "./module_test.js"; diff --git a/tests/staticfiles_tests/project/documents/cached/module_test.js b/tests/staticfiles_tests/project/documents/cached/module_test.js new file mode 100644 index 0000000000..b832b4e8a7 --- /dev/null +++ b/tests/staticfiles_tests/project/documents/cached/module_test.js @@ -0,0 +1,5 @@ +export const testConst = "test"; +export const firstConst = "first"; +export const secondConst = "second"; +export var firstVar = "test_1"; +export var SecondVar = "test_2"; diff --git a/tests/staticfiles_tests/project/documents/nested/js/nested.js b/tests/staticfiles_tests/project/documents/nested/js/nested.js new file mode 100644 index 0000000000..7646bbd17d --- /dev/null +++ b/tests/staticfiles_tests/project/documents/nested/js/nested.js @@ -0,0 +1 @@ +export default null; diff --git a/tests/staticfiles_tests/test_storage.py b/tests/staticfiles_tests/test_storage.py index 6c877a271a..db655f2453 100644 --- a/tests/staticfiles_tests/test_storage.py +++ b/tests/staticfiles_tests/test_storage.py @@ -159,6 +159,52 @@ class TestHashedFiles: self.assertIn(b"https://", relfile.read()) self.assertPostCondition() + def test_module_import(self): + relpath = self.hashed_file_path('cached/module.js') + self.assertEqual(relpath, 'cached/module.91b9cf9935da.js') + tests = [ + # Relative imports. + b'import testConst from "./module_test.d489af3cf882.js";', + b'import relativeModule from "../nested/js/nested.866475c46bb4.js";', + b'import { firstConst, secondConst } from "./module_test.d489af3cf882.js";', + # Absolute import. + b'import rootConst from "/static/absolute_root.5586327fe78c.js";', + # Dynamic import. + b'const dynamicModule = import("./module_test.d489af3cf882.js");', + # Creating a module object. + b'import * as NewModule from "./module_test.d489af3cf882.js";', + # Aliases. + b'import { testConst as alias } from "./module_test.d489af3cf882.js";', + b'import {\n' + b' firstVar as firstVarAlias,\n' + b' secondVar as secondVarAlias\n' + b'} from "./module_test.d489af3cf882.js";', + ] + with storage.staticfiles_storage.open(relpath) as relfile: + content = relfile.read() + for module_import in tests: + with self.subTest(module_import=module_import): + self.assertIn(module_import, content) + self.assertPostCondition() + + def test_aggregating_modules(self): + relpath = self.hashed_file_path('cached/module.js') + self.assertEqual(relpath, 'cached/module.91b9cf9935da.js') + tests = [ + b'export * from "./module_test.d489af3cf882.js";', + b'export { testConst } from "./module_test.d489af3cf882.js";', + b'export {\n' + b' firstVar as firstVarAlias,\n' + b' secondVar as secondVarAlias\n' + b'} from "./module_test.d489af3cf882.js";', + ] + with storage.staticfiles_storage.open(relpath) as relfile: + content = relfile.read() + for module_import in tests: + with self.subTest(module_import=module_import): + self.assertIn(module_import, content) + self.assertPostCondition() + @override_settings( STATICFILES_DIRS=[os.path.join(TEST_ROOT, 'project', 'loop')], STATICFILES_FINDERS=['django.contrib.staticfiles.finders.FileSystemFinder'], -- cgit v1.2.1