dataset.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { assert } from "chai";
  2. import { datasetModule, init, h, toVNode } from "../../src/index";
  3. const patch = init([datasetModule]);
  4. describe("dataset", function () {
  5. before(function () {
  6. if (!Object.hasOwnProperty.call(HTMLElement.prototype, "dataset")) {
  7. this.skip();
  8. }
  9. });
  10. let elm: any, vnode0: any;
  11. beforeEach(function () {
  12. elm = document.createElement("div");
  13. vnode0 = elm;
  14. });
  15. it("is set on initial element creation", function () {
  16. elm = patch(vnode0, h("div", { dataset: { foo: "foo" } })).elm;
  17. assert.strictEqual(elm.dataset.foo, "foo");
  18. });
  19. it("toVNode & dataset", function () {
  20. const elem1 = document.createElement("div");
  21. elem1.innerHTML = '<div data-foo="foo"></div>';
  22. const elem2 = document.createElement("div");
  23. elem2.innerHTML = '<div data-foo="foo-new"></div>';
  24. const oldNode = toVNode(elem1);
  25. const newNode = toVNode(elem2);
  26. patch(oldNode, newNode);
  27. assert.strictEqual(elem1.innerHTML, '<div data-foo="foo-new"></div>');
  28. });
  29. it("updates dataset", function () {
  30. const vnode1 = h("i", { dataset: { foo: "foo", bar: "bar" } });
  31. const vnode2 = h("i", { dataset: { baz: "baz" } });
  32. elm = patch(vnode0, vnode1).elm;
  33. assert.strictEqual(elm.dataset.foo, "foo");
  34. assert.strictEqual(elm.dataset.bar, "bar");
  35. elm = patch(vnode1, vnode2).elm;
  36. assert.strictEqual(elm.dataset.baz, "baz");
  37. assert.strictEqual(elm.dataset.foo, undefined);
  38. });
  39. it("can be memoized", function () {
  40. const cachedDataset = { foo: "foo", bar: "bar" };
  41. const vnode1 = h("i", { dataset: cachedDataset });
  42. const vnode2 = h("i", { dataset: cachedDataset });
  43. elm = patch(vnode0, vnode1).elm;
  44. assert.strictEqual(elm.dataset.foo, "foo");
  45. assert.strictEqual(elm.dataset.bar, "bar");
  46. elm = patch(vnode1, vnode2).elm;
  47. assert.strictEqual(elm.dataset.foo, "foo");
  48. assert.strictEqual(elm.dataset.bar, "bar");
  49. });
  50. it("handles string conversions", function () {
  51. const vnode1 = h("i", {
  52. dataset: {
  53. empty: "",
  54. dash: "-",
  55. dashed: "foo-bar",
  56. camel: "fooBar",
  57. integer: 0 as any,
  58. float: 0.1 as any,
  59. },
  60. });
  61. elm = patch(vnode0, vnode1).elm;
  62. assert.strictEqual(elm.dataset.empty, "");
  63. assert.strictEqual(elm.dataset.dash, "-");
  64. assert.strictEqual(elm.dataset.dashed, "foo-bar");
  65. assert.strictEqual(elm.dataset.camel, "fooBar");
  66. assert.strictEqual(elm.dataset.integer, "0");
  67. assert.strictEqual(elm.dataset.float, "0.1");
  68. });
  69. });