1package goja 2 3import ( 4 "testing" 5) 6 7func TestWeakSetBasic(t *testing.T) { 8 const SCRIPT = ` 9 var s = new WeakSet(); 10 var o = {}; 11 s.add(o); 12 if (!s.has(o)) { 13 throw new Error("has"); 14 } 15 s.delete(o); 16 if (s.has(o)) { 17 throw new Error("still has"); 18 } 19 ` 20 testScript1(SCRIPT, _undefined, t) 21} 22 23func TestWeakSetArraySimple(t *testing.T) { 24 const SCRIPT = ` 25 var o1 = {}, o2 = {}, o3 = {}; 26 27 var s = new WeakSet([o1, o2, o3]); 28 s.has(o1) && s.has(o2) && s.has(o3); 29 ` 30 testScript1(SCRIPT, valueTrue, t) 31} 32 33func TestWeakSetArrayGeneric(t *testing.T) { 34 const SCRIPT = ` 35 var o1 = {}, o2 = {}, o3 = {}; 36 var a = new Array(); 37 var s; 38 var thrown = false; 39 a[1] = o2; 40 41 try { 42 s = new WeakSet(a); 43 } catch (e) { 44 if (e instanceof TypeError) { 45 thrown = true; 46 } 47 } 48 if (!thrown) { 49 throw new Error("Case 1 does not throw"); 50 } 51 52 Object.defineProperty(a.__proto__, "0", {value: o1, writable: true, enumerable: true, configurable: true}); 53 s = new WeakSet(a); 54 if (!(s.has(o1) && s.has(o2) && !s.has(o3))) { 55 throw new Error("Case 2 failed"); 56 } 57 58 Object.defineProperty(a, "2", {value: o3, configurable: true}); 59 s = new WeakSet(a); 60 s.has(o1) && s.has(o2) && s.has(o3); 61 ` 62 testScript1(SCRIPT, valueTrue, t) 63} 64