Bug 1450258 [wpt PR 10252] - Make URLSearchParamsIterationSource not snapshot, a=testonly

Automatic update from web-platform-testsMake URLSearchParamsIterationSource not snapshot

Previously URLSearchParamsIterationSource iterated over a copy of
URLSearchParams, but it is specified in the standard as iterating over
the live list.

Modify it to reference the original URLSearchParams object instead of
making a copy.

Also add web-platform tests for delete during foreach, and a chromium-
specific test for GC of URLSearchParams during iteration.

Remove failing expectations.

BUG=677322

Change-Id: I8c53fd8dd9863fe1146c5b7849d4f08245b37bc1
Reviewed-on: https://chromium-review.googlesource.com/987839
Reviewed-by: Mike West <mkwst@chromium.org>
Reviewed-by: Yutaka Hirano <yhirano@chromium.org>
Commit-Queue: Adam Rice <ricea@chromium.org>
Cr-Commit-Position: refs/heads/master@{#548363}

wpt-commits: 8fa12a570edc5679b9f28b26585a6bd477f0dc16
wpt-pr: 10252
wpt-commits: 8fa12a570edc5679b9f28b26585a6bd477f0dc16
wpt-pr: 10252
This commit is contained in:
Adam Rice 2018-04-09 22:11:57 +00:00 committed by James Graham
parent 4882957508
commit fecf488c0a
2 changed files with 45 additions and 1 deletions

View File

@ -602158,7 +602158,7 @@
"testharness"
],
"url/urlsearchparams-foreach.html": [
"5bdc17d623884a8916681f19df55c4bef5965ff2",
"604154351de9db97183b3cfc149d3ca6c5132723",
"testharness"
],
"url/urlsearchparams-get.html": [

View File

@ -36,4 +36,48 @@ test(function() {
assert_unreached(i);
}
}, "empty");
test(function() {
const url = new URL("http://localhost/query?param0=0&param1=1&param2=2");
const searchParams = url.searchParams;
const seen = [];
for (const param of searchParams) {
if (param[0] === 'param0') {
searchParams.delete('param1');
}
seen.push(param);
}
assert_array_equals(seen[0], ["param0", "0"]);
assert_array_equals(seen[1], ["param2", "2"]);
}, "delete next param during iteration");
test(function() {
const url = new URL("http://localhost/query?param0=0&param1=1&param2=2");
const searchParams = url.searchParams;
const seen = [];
for (const param of searchParams) {
if (param[0] === 'param0') {
searchParams.delete('param0');
// 'param1=1' is now in the first slot, so the next iteration will see 'param2=2'.
} else {
seen.push(param);
}
}
assert_array_equals(seen[0], ["param2", "2"]);
}, "delete current param during iteration");
test(function() {
const url = new URL("http://localhost/query?param0=0&param1=1&param2=2");
const searchParams = url.searchParams;
const seen = [];
for (const param of searchParams) {
seen.push(param[0]);
searchParams.delete(param[0]);
}
assert_array_equals(seen, ["param0", "param2"], "param1 should not have been seen by the loop");
assert_equals(String(searchParams), "param1=1", "param1 should remain");
}, "delete every param seen during iteration");
</script>