| <!DOCTYPE html> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/test-helper.js"></script> |
| |
| <script> |
| // "bare/..." (i.e. without leading "./") are bare specifiers |
| // (not relative paths). |
| // |
| // Discussions about notations for builtin modules are ongoing, e.g. |
| // https://github.com/tc39/proposal-javascript-standard-library/issues/12 |
| // Currently the tests expects two notations are accepted. |
| // TODO: Once the discussions converge, update the tests. |
| const importMap = ` |
| { |
| "imports": { |
| "bare": "./resources/log.js?pipe=sub&name=bare", |
| |
| "data:text/javascript,log.push('data:foo')": "./resources/log.js?pipe=sub&name=foo", |
| "data:text/javascript,log.push('data:cross-origin-foo')": "https://{{domains[www1]}}:{{ports[https][0]}}/import-maps/resources/log.js?pipe=sub&name=cross-origin-foo", |
| "data:text/javascript,log.push('data:to-data')": "data:text/javascript,log.push('dataURL')", |
| |
| "data:text/javascript,log.push('data:std-blank')": "std:blank", |
| "data:text/javascript,log.push('data:blank')": "@std/blank", |
| "data:text/javascript,log.push('data:std-none')": "std:none", |
| "data:text/javascript,log.push('data:none')": "@std/none", |
| |
| "data:text/javascript,log.push('data:to-bare')": "bare" |
| } |
| } |
| `; |
| |
| const tests = { |
| // Arrays of expected results for: |
| // - <script src type="module">, |
| // - <script src> (classic script), |
| // - static import, and |
| // - dynamic import. |
| |
| // Currently, Chromium's implementation resolves import maps as a part of |
| // specifier resolution, and thus failure in import map resolution causes |
| // a parse error, not fetch error. Therefore, we use Result.PARSE_ERROR |
| // below. https://crbug.com/928435 |
| |
| // data: to HTTP(S). |
| "data:text/javascript,log.push('data:foo')": |
| [Result.URL, Result.URL, "log:foo", "log:foo"], |
| "data:text/javascript,log.push('data:cross-origin-foo')": |
| [Result.URL, Result.URL, "log:cross-origin-foo", "log:cross-origin-foo"], |
| |
| // data: to data: |
| "data:text/javascript,log.push('data:to-data')": |
| [Result.URL, Result.URL, "dataURL", "dataURL"], |
| |
| // data: to built-in. |
| "data:text/javascript,log.push('data:std-blank')": |
| [Result.URL, Result.URL, Result.BUILTIN, Result.BUILTIN], |
| "data:text/javascript,log.push('data:blank')": |
| [Result.URL, Result.URL, Result.BUILTIN, Result.BUILTIN], |
| "data:text/javascript,log.push('data:std-none')": |
| [Result.URL, Result.URL, Result.PARSE_ERROR, Result.PARSE_ERROR], |
| "data:text/javascript,log.push('data:none')": |
| [Result.URL, Result.URL, Result.PARSE_ERROR, Result.PARSE_ERROR], |
| |
| // data: to bare mapping is disabled. |
| "data:text/javascript,log.push('data:to-bare')": |
| [Result.URL, Result.URL, Result.PARSE_ERROR, Result.PARSE_ERROR], |
| }; |
| |
| doTests(importMap, null, tests); |
| </script> |
| <body> |