summaryrefslogtreecommitdiff
path: root/tests/unit/webstorage_test.ts
blob: aa832b1c4b2e379d77c3f84e62fcd603b0b3ef3c (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
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
// deno-lint-ignore-file no-explicit-any

import { assert, assertEquals, assertThrows } from "./test_util.ts";

Deno.test({ permissions: "none" }, function webStoragesReassignable() {
  // Can reassign to web storages
  globalThis.localStorage = 1 as any;
  globalThis.sessionStorage = 1 as any;
  // The actual values don't change
  assert(globalThis.localStorage instanceof globalThis.Storage);
  assert(globalThis.sessionStorage instanceof globalThis.Storage);
});

Deno.test(function webstorageSizeLimit() {
  localStorage.clear();
  assertThrows(
    () => {
      localStorage.setItem("k", "v".repeat(15 * 1024 * 1024));
    },
    Error,
    "Exceeded maximum storage size",
  );
  assertEquals(localStorage.getItem("k"), null);
  assertThrows(
    () => {
      localStorage.setItem("k".repeat(15 * 1024 * 1024), "v");
    },
    Error,
    "Exceeded maximum storage size",
  );
  assertThrows(
    () => {
      localStorage.setItem(
        "k".repeat(5 * 1024 * 1024),
        "v".repeat(5 * 1024 * 1024),
      );
    },
    Error,
    "Exceeded maximum storage size",
  );
});

Deno.test(function webstorageProxy() {
  localStorage.clear();
  localStorage.foo = "foo";
  assertEquals(localStorage.foo, "foo");
  const symbol = Symbol("bar");
  localStorage[symbol as any] = "bar";
  assertEquals(localStorage[symbol as any], "bar");
  assertEquals(symbol in localStorage, true);
});

Deno.test(function webstorageGetOwnPropertyDescriptorSymbol() {
  localStorage.clear();
  Object.getOwnPropertyDescriptor(localStorage, Symbol("foo"));
});