File: storage_enumerate.html

package info (click to toggle)
firefox-esr 78.15.0esr-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 3,301,156 kB
  • sloc: cpp: 5,665,905; javascript: 4,798,386; ansic: 2,878,233; python: 977,004; asm: 270,347; xml: 181,456; java: 111,756; sh: 72,926; makefile: 21,819; perl: 13,380; cs: 4,725; yacc: 4,565; objc: 3,026; pascal: 1,787; lex: 1,720; ada: 1,681; exp: 505; php: 436; lisp: 260; awk: 152; ruby: 103; csh: 80; sed: 53; sql: 45
file content (69 lines) | stat: -rw-r--r-- 2,441 bytes parent folder | download | duplicates (8)
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
<!DOCTYPE HTML>
<html>
<head>
<title>WebStorage Test: Storage - enumerate and built-in properties</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id="log"></div>
<script>
["localStorage", "sessionStorage"].forEach(function(name) {
    test(function() {
        assert_true(name in window, name + " exist");

        var storage = window[name];
        storage.clear();

        Storage.prototype.prototypeTestKey = "prototypeTestValue";
        storage.foo = "bar";
        storage.fu = "baz";
        storage.batman = "bin suparman";
        storage.bar = "foo";
        storage.alpha = "beta";
        storage.zeta = "gamma";

        const enumeratedArray = Object.keys(storage);
        enumeratedArray.sort();  // Storage order is implementation-defined.

        const expectArray = ["alpha", "bar", "batman", "foo", "fu", "zeta"];
        assert_array_equals(enumeratedArray, expectArray);

        // 'prototypeTestKey' is not an actual storage key, it is just a
        // property set on Storage's prototype object.
        assert_equals(storage.length, 6);
        assert_equals(storage.getItem("prototypeTestKey"), null);
        assert_equals(storage.prototypeTestKey, "prototypeTestValue");
    }, name + ": enumerate a Storage object and get only the keys as a result and the built-in properties of the Storage object should be ignored");

    test(function() {
        const storage = window[name];
        storage.clear();

        storage.setItem("foo", "bar");
        storage.baz = "quux";
        storage.setItem(0, "alpha");
        storage[42] = "beta";

        for (let prop in storage) {
            if (!storage.hasOwnProperty(prop))
                continue;
            const desc = Object.getOwnPropertyDescriptor(storage, prop);
            assert_true(desc.configurable);
            assert_true(desc.enumerable);
            assert_true(desc.writable);
        }

        const keys = Object.keys(storage);
        keys.sort();  // Storage order is implementation-defined.
        assert_array_equals(keys, ["0", "42", "baz", "foo"]);

        const values = Object.values(storage);
        values.sort();  // Storage order is implementation-defined.
        assert_array_equals(values, ["alpha", "bar", "beta", "quux"]);
    }, name + ": test enumeration of numeric and non-numeric keys");
});
</script>
</body>
</html>