| test(function() { |
| var params = new URLSearchParams('a=1&b=2&c=3'); |
| var keys = []; |
| var values = []; |
| params.forEach(function(value, key) { |
| keys.push(key); |
| values.push(value); |
| }); |
| assert_array_equals(keys, ['a', 'b', 'c']); |
| assert_array_equals(values, ['1', '2', '3']); |
| }, "ForEach Check"); |
| |
| test(function() { |
| let a = new URL("http://a.b/c?a=1&b=2&c=3&d=4"); |
| let b = a.searchParams; |
| var c = []; |
| for (const i of b) { |
| a.search = "x=1&y=2&z=3"; |
| c.push(i); |
| } |
| assert_array_equals(c[0], ["a","1"]); |
| assert_array_equals(c[1], ["y","2"]); |
| assert_array_equals(c[2], ["z","3"]); |
| }, "For-of Check"); |
| |
| test(function() { |
| let a = new URL("http://a.b/c"); |
| let b = a.searchParams; |
| for (const i of b) { |
| assert_unreached(i); |
| } |
| }, "empty"); |
| |
| test(function() { |
| const url = new URL("http://localhost/query?param0=0¶m1=1¶m2=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¶m1=1¶m2=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¶m1=1¶m2=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"); |