11cb0ef41Sopenharmony_citest(function() {
21cb0ef41Sopenharmony_ci    var params = new URLSearchParams('a=1&b=2&c=3');
31cb0ef41Sopenharmony_ci    var keys = [];
41cb0ef41Sopenharmony_ci    var values = [];
51cb0ef41Sopenharmony_ci    params.forEach(function(value, key) {
61cb0ef41Sopenharmony_ci        keys.push(key);
71cb0ef41Sopenharmony_ci        values.push(value);
81cb0ef41Sopenharmony_ci    });
91cb0ef41Sopenharmony_ci    assert_array_equals(keys, ['a', 'b', 'c']);
101cb0ef41Sopenharmony_ci    assert_array_equals(values, ['1', '2', '3']);
111cb0ef41Sopenharmony_ci}, "ForEach Check");
121cb0ef41Sopenharmony_ci
131cb0ef41Sopenharmony_citest(function() {
141cb0ef41Sopenharmony_ci    let a = new URL("http://a.b/c?a=1&b=2&c=3&d=4");
151cb0ef41Sopenharmony_ci    let b = a.searchParams;
161cb0ef41Sopenharmony_ci    var c = [];
171cb0ef41Sopenharmony_ci    for (const i of b) {
181cb0ef41Sopenharmony_ci        a.search = "x=1&y=2&z=3";
191cb0ef41Sopenharmony_ci        c.push(i);
201cb0ef41Sopenharmony_ci    }
211cb0ef41Sopenharmony_ci    assert_array_equals(c[0], ["a","1"]);
221cb0ef41Sopenharmony_ci    assert_array_equals(c[1], ["y","2"]);
231cb0ef41Sopenharmony_ci    assert_array_equals(c[2], ["z","3"]);
241cb0ef41Sopenharmony_ci}, "For-of Check");
251cb0ef41Sopenharmony_ci
261cb0ef41Sopenharmony_citest(function() {
271cb0ef41Sopenharmony_ci    let a = new URL("http://a.b/c");
281cb0ef41Sopenharmony_ci    let b = a.searchParams;
291cb0ef41Sopenharmony_ci    for (const i of b) {
301cb0ef41Sopenharmony_ci        assert_unreached(i);
311cb0ef41Sopenharmony_ci    }
321cb0ef41Sopenharmony_ci}, "empty");
331cb0ef41Sopenharmony_ci
341cb0ef41Sopenharmony_citest(function() {
351cb0ef41Sopenharmony_ci    const url = new URL("http://localhost/query?param0=0&param1=1&param2=2");
361cb0ef41Sopenharmony_ci    const searchParams = url.searchParams;
371cb0ef41Sopenharmony_ci    const seen = [];
381cb0ef41Sopenharmony_ci    for (const param of searchParams) {
391cb0ef41Sopenharmony_ci        if (param[0] === 'param0') {
401cb0ef41Sopenharmony_ci            searchParams.delete('param1');
411cb0ef41Sopenharmony_ci        }
421cb0ef41Sopenharmony_ci        seen.push(param);
431cb0ef41Sopenharmony_ci    }
441cb0ef41Sopenharmony_ci
451cb0ef41Sopenharmony_ci    assert_array_equals(seen[0], ["param0", "0"]);
461cb0ef41Sopenharmony_ci    assert_array_equals(seen[1], ["param2", "2"]);
471cb0ef41Sopenharmony_ci}, "delete next param during iteration");
481cb0ef41Sopenharmony_ci
491cb0ef41Sopenharmony_citest(function() {
501cb0ef41Sopenharmony_ci    const url = new URL("http://localhost/query?param0=0&param1=1&param2=2");
511cb0ef41Sopenharmony_ci    const searchParams = url.searchParams;
521cb0ef41Sopenharmony_ci    const seen = [];
531cb0ef41Sopenharmony_ci    for (const param of searchParams) {
541cb0ef41Sopenharmony_ci        if (param[0] === 'param0') {
551cb0ef41Sopenharmony_ci            searchParams.delete('param0');
561cb0ef41Sopenharmony_ci            // 'param1=1' is now in the first slot, so the next iteration will see 'param2=2'.
571cb0ef41Sopenharmony_ci        } else {
581cb0ef41Sopenharmony_ci            seen.push(param);
591cb0ef41Sopenharmony_ci        }
601cb0ef41Sopenharmony_ci    }
611cb0ef41Sopenharmony_ci
621cb0ef41Sopenharmony_ci    assert_array_equals(seen[0], ["param2", "2"]);
631cb0ef41Sopenharmony_ci}, "delete current param during iteration");
641cb0ef41Sopenharmony_ci
651cb0ef41Sopenharmony_citest(function() {
661cb0ef41Sopenharmony_ci    const url = new URL("http://localhost/query?param0=0&param1=1&param2=2");
671cb0ef41Sopenharmony_ci    const searchParams = url.searchParams;
681cb0ef41Sopenharmony_ci    const seen = [];
691cb0ef41Sopenharmony_ci    for (const param of searchParams) {
701cb0ef41Sopenharmony_ci        seen.push(param[0]);
711cb0ef41Sopenharmony_ci        searchParams.delete(param[0]);
721cb0ef41Sopenharmony_ci    }
731cb0ef41Sopenharmony_ci
741cb0ef41Sopenharmony_ci    assert_array_equals(seen, ["param0", "param2"], "param1 should not have been seen by the loop");
751cb0ef41Sopenharmony_ci    assert_equals(String(searchParams), "param1=1", "param1 should remain");
761cb0ef41Sopenharmony_ci}, "delete every param seen during iteration");
77