...
1 package goja
2
3 import (
4 "testing"
5 )
6
7 func TestWeakMap(t *testing.T) {
8 vm := New()
9 _, err := vm.RunString(`
10 var m = new WeakMap();
11 var m1 = new WeakMap();
12 var key = {};
13 m.set(key, true);
14 m1.set(key, false);
15 if (!m.has(key)) {
16 throw new Error("has");
17 }
18 if (m.get(key) !== true) {
19 throw new Error("value does not match");
20 }
21 if (!m1.has(key)) {
22 throw new Error("has (m1)");
23 }
24 if (m1.get(key) !== false) {
25 throw new Error("m1 value does not match");
26 }
27 m.delete(key);
28 if (m.has(key)) {
29 throw new Error("m still has after delete");
30 }
31 if (!m1.has(key)) {
32 throw new Error("m1 does not have after delete from m");
33 }
34 `)
35 if err != nil {
36 t.Fatal(err)
37 }
38 }
39
40 func TestWeakMapGetAdderGetIteratorOrder(t *testing.T) {
41 const SCRIPT = `
42 let getterCalled = 0;
43
44 class M extends WeakMap {
45 get set() {
46 getterCalled++;
47 return null;
48 }
49 }
50
51 let getIteratorCalled = 0;
52
53 let iterable = {};
54 iterable[Symbol.iterator] = () => {
55 getIteratorCalled++
56 return {
57 next: 1
58 };
59 }
60
61 let thrown = false;
62
63 try {
64 new M(iterable);
65 } catch (e) {
66 if (e instanceof TypeError) {
67 thrown = true;
68 } else {
69 throw e;
70 }
71 }
72
73 thrown && getterCalled === 1 && getIteratorCalled === 0;
74 `
75 testScript(SCRIPT, valueTrue, t)
76 }
77
View as plain text