[Import Maps] Add tests for non-ASCII characters
As the non-bare keys and resolution results of
specifier maps are normalized (i.e. serialized URLs),
raw and percent-encoded non-ASCII strings are
considered equal (as both of them are
percent-encoded after serialization).
This CL tests that raw and percent-encoded versions of
non-ASCII characters are:
- Considered equal in non-bare specifier keys,
- Considered equal in checking backtracking, and
- Not considered equal in bare specifier keys.
For consistency, this CL also adds some backtracking tests
that don't involve non-ASCII characters but use
the same patterns of added non-ASCII tests.
Bug: 848607, https://github.com/WICG/import-maps/issues/207
Change-Id: I6c8ae478da2fcbe0f6df03a608dabdad60644ea1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2573422
Commit-Queue: Hiroshige Hayashizaki <hiroshige@chromium.org>
Reviewed-by: Kouhei Ueno <kouhei@chromium.org>
Reviewed-by: Domenic Denicola <domenic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#835824}
diff --git a/import-maps/data-driven/resources/packages-via-trailing-slashes.json b/import-maps/data-driven/resources/packages-via-trailing-slashes.json
index 6ff330c..9f2ac99 100644
--- a/import-maps/data-driven/resources/packages-via-trailing-slashes.json
+++ b/import-maps/data-driven/resources/packages-via-trailing-slashes.json
@@ -8,7 +8,9 @@
"lodash-dotdot": "../node_modules/lodash-es/lodash.js",
"lodash-dotdot/": "../node_modules/lodash-es/",
"mapped/": "https://example.com/",
- "mapped/path/": "https://github.com/WICG/import-maps/issues/207/"
+ "mapped/path/": "https://github.com/WICG/import-maps/issues/207/",
+ "mapped/non-ascii-1/": "https://example.com/%E3%81%8D%E3%81%A4%E3%81%AD/",
+ "mapped/non-ascii-2/": "https://example.com/きつね/"
}
},
"importMapBaseURL": "https://example.com/app/index.html",
@@ -46,11 +48,23 @@
"mapped/path": "https://example.com/path",
"mapped/path/": "https://github.com/WICG/import-maps/issues/207/",
"mapped/path/..": null,
+ "mapped/path/../path/": null,
+ "mapped/path/../207": null,
+ "mapped/path/../207/": "https://github.com/WICG/import-maps/issues/207/",
+ "mapped/path//": null,
+ "mapped/path/WICG/import-maps/issues/207/": "https://github.com/WICG/import-maps/issues/207/WICG/import-maps/issues/207/",
+ "mapped/path//WICG/import-maps/issues/207/": "https://github.com/WICG/import-maps/issues/207/",
"mapped/path/../backtrack": null,
"mapped/path/../../backtrack": null,
"mapped/path/../../../backtrack": null,
"moment/../backtrack": null,
- "moment/..": null
+ "moment/..": null,
+ "mapped/non-ascii-1/": "https://example.com/%E3%81%8D%E3%81%A4%E3%81%AD/",
+ "mapped/non-ascii-1/../%E3%81%8D%E3%81%A4%E3%81%AD/": "https://example.com/%E3%81%8D%E3%81%A4%E3%81%AD/",
+ "mapped/non-ascii-1/../きつね/": "https://example.com/%E3%81%8D%E3%81%A4%E3%81%AD/",
+ "mapped/non-ascii-2/": "https://example.com/%E3%81%8D%E3%81%A4%E3%81%AD/",
+ "mapped/non-ascii-2/../%E3%81%8D%E3%81%A4%E3%81%AD/": "https://example.com/%E3%81%8D%E3%81%A4%E3%81%AD/",
+ "mapped/non-ascii-2/../きつね/": "https://example.com/%E3%81%8D%E3%81%A4%E3%81%AD/"
}
}
}
diff --git a/import-maps/data-driven/resources/tricky-specifiers.json b/import-maps/data-driven/resources/tricky-specifiers.json
index d9c80c9..998fe7f 100644
--- a/import-maps/data-driven/resources/tricky-specifiers.json
+++ b/import-maps/data-driven/resources/tricky-specifiers.json
@@ -8,7 +8,11 @@
"..": "/lib/dotdot.mjs",
"..\\": "/lib/dotdotbackslash.mjs",
"%2E": "/lib/percent2e.mjs",
- "%2F": "/lib/percent2f.mjs"
+ "%2F": "/lib/percent2f.mjs",
+ "https://map.example/%E3%81%8D%E3%81%A4%E3%81%AD/": "/a/",
+ "https://map.example/きつね/fox/": "/b/",
+ "%E3%81%8D%E3%81%A4%E3%81%AD/": "/c/",
+ "きつね/fox/": "/d/"
}
},
"importMapBaseURL": "https://example.com/app/index.html",
@@ -38,6 +42,30 @@
"expectedResults": {
"only-slash": null
}
+ },
+ "URL-like specifiers are normalized": {
+ "expectedResults": {
+ "https://map.example/%E3%81%8D%E3%81%A4%E3%81%AD/": "https://example.com/a/",
+ "https://map.example/%E3%81%8D%E3%81%A4%E3%81%AD/bar": "https://example.com/a/bar",
+ "https://map.example/%E3%81%8D%E3%81%A4%E3%81%AD/fox/": "https://example.com/b/",
+ "https://map.example/%E3%81%8D%E3%81%A4%E3%81%AD/fox/bar": "https://example.com/b/bar",
+ "https://map.example/きつね/": "https://example.com/a/",
+ "https://map.example/きつね/bar": "https://example.com/a/bar",
+ "https://map.example/きつね/fox/": "https://example.com/b/",
+ "https://map.example/きつね/fox/bar": "https://example.com/b/bar"
+ }
+ },
+ "Bare specifiers are not normalized": {
+ "expectedResults": {
+ "%E3%81%8D%E3%81%A4%E3%81%AD/": "https://example.com/c/",
+ "%E3%81%8D%E3%81%A4%E3%81%AD/bar": "https://example.com/c/bar",
+ "%E3%81%8D%E3%81%A4%E3%81%AD/fox/": "https://example.com/c/fox/",
+ "%E3%81%8D%E3%81%A4%E3%81%AD/fox/bar": "https://example.com/c/fox/bar",
+ "きつね/": null,
+ "きつね/bar": null,
+ "きつね/fox/": "https://example.com/d/",
+ "きつね/fox/bar": "https://example.com/d/bar"
+ }
}
}
}