summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/url/urlsearchparams-foreach.any.js
blob: ff19643ac220d123be45f01af45fedde8d2d05c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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&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");