builtin_weakmap_test.go 1.3 KB

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