Skip to content

Commit

Permalink
[Import Maps] WPT: Check parsed import maps' scopes
Browse files Browse the repository at this point in the history
Before this CL, only `imports` parts of import maps were tested.

Chromium side:
- This CL makes ImportMap::ToString() to output the whole import map,
  rather than only the `imports` value.
- This CL removes white spaces for pretty printing, to simplify
  the logic.

WPT side:
- This CL checks the whole import maps in `jest-test-helper.js`.
- Reflect the upstream changes in
  WICG/import-maps#190 to
  `builtin-support.tentative/imported/resources/parsing-scope-keys.js`.

Test expectation changes:
- This CL exposes new test failures in
  `parsing-scope-keys.tentative.html` on Chromium
  due to the spec-inconformant behavior of Chromium's URL parser.
- Other test expectation changes are just converting
  `x` to `{imports: x, scopes: {}}`.

Bug: 990561, 927181
Change-Id: Ic6a0171298636170d2fd96db2ac1a8d60e3ff345
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1863854
Reviewed-by: Kouhei Ueno <kouhei@chromium.org>
Commit-Queue: Hiroshige Hayashizaki <hiroshige@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706790}
  • Loading branch information
hiroshige-g authored and chromium-wpt-export-bot committed Oct 17, 2019
1 parent b264879 commit dfaa0ba
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,14 @@ describe('Relative URL scope keys', () => {
});

describe('Absolute URL scope keys', () => {
it('should only accept absolute URL scope keys with fetch schemes', () => {
it('should accept all absolute URL scope keys, with or without fetch schemes', () => {
expectScopes(
[
'about:good',
'blob:good',
'data:good',
'file:///good',
'filesystem:good',
'filesystem:http://example.com/good/',
'http://good/',
'https://good/',
'ftp://good/',
Expand All @@ -84,17 +84,16 @@ describe('Absolute URL scope keys', () => {
'blob:good',
'data:good',
'file:///good',
'filesystem:good',
'filesystem:http://example.com/good/',
'http://good/',
'https://good/',
'ftp://good/'
'ftp://good/',
'import:bad',
'mailto:bad',
'javascript:bad',
'wss://ba/'
],
[
'Invalid scope "import:bad". Scope URLs must have a fetch scheme.',
'Invalid scope "mailto:bad". Scope URLs must have a fetch scheme.',
'Invalid scope "javascript:bad". Scope URLs must have a fetch scheme.',
'Invalid scope "wss://ba/". Scope URLs must have a fetch scheme.'
]
[]
);
});

Expand Down
22 changes: 18 additions & 4 deletions import-maps/resources/jest-test-helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,22 @@ function require(name) {
}, exports);
}

// Sort keys and then stringify for comparison.
function stringifyImportMap(importMap) {
function getKeys(m) {
if (typeof m !== 'object')
return [];

let keys = [];
for (const key in m) {
keys.push(key);
keys = keys.concat(getKeys(m[key]));
}
return keys;
}
return JSON.stringify(importMap, getKeys(importMap).sort());
}

function expect(v) {
return {
toMatchURL: expected => assert_equals(v, expected),
Expand All @@ -34,10 +50,8 @@ function expect(v) {
const actualParsedImportMap = JSON.parse(
internals.getParsedImportMap(v.contentDocument));
assert_equals(
JSON.stringify(actualParsedImportMap,
Object.keys(actualParsedImportMap).sort()),
JSON.stringify(expected.imports,
Object.keys(expected.imports).sort())
stringifyImportMap(actualParsedImportMap),
stringifyImportMap(expected)
);
} else {
assert_object_equals(v, expected);
Expand Down

0 comments on commit dfaa0ba

Please sign in to comment.