builtin_weakset_test.go 1.2 KB

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