]> Lady’s Gitweb - Lemon/blobdiff - mod.test.js
[window] Polyfill top‐level D·O·M interfaces
[Lemon] / mod.test.js
index 1c950ab19b47075b49c9a57186a3414c99d14ef9..44e2b9e150704aed359f2c97decc43955b214118 100644 (file)
@@ -7,7 +7,11 @@
 // License, v. 2.0. If a copy of the MPL was not distributed with this
 // file, You can obtain one at <https://mozilla.org/MPL/2.0/>.
 
-import { assertStrictEquals } from "./dev-deps.js";
+import {
+  assertEquals,
+  assertStrictEquals,
+  DOMImplementation,
+} from "./dev-deps.js";
 import Lemon from "./mod.js";
 
 Deno.test({
@@ -19,6 +23,20 @@ Deno.test({
   },
 });
 
+Deno.test({
+  name:
+    "Lemon can be used to make a new element in a specified document.",
+  fn: () => {
+    const doc = new DOMImplementation().createDocument(
+      null,
+      "福",
+      null,
+    );
+    const elt = Lemon.call({ document: doc }, "xxx")({})``;
+    assertStrictEquals(elt.ownerDocument, doc);
+  },
+});
+
 Deno.test({
   name: "Lemon uses X·H·T·M·L as the default namespace.",
   fn: () => {
@@ -58,6 +76,22 @@ Deno.test({
   },
 });
 
+Deno.test({
+  name: "Bound Lemons are also proxied.",
+  fn: () => {
+    const doc = new DOMImplementation().createDocument(
+      null,
+      "福",
+      null,
+    );
+    const myLemon = Lemon.bind({ document: doc });
+    const elt = myLemon.creamPie({})``;
+    assertStrictEquals(typeof elt, "object");
+    assertStrictEquals(elt.localName, "cream-pie");
+    assertStrictEquals(elt.ownerDocument, doc);
+  },
+});
+
 Deno.test({
   name: "Lemon tags can be destructured.",
   fn: () => {
@@ -87,11 +121,77 @@ Deno.test({
   },
 });
 
+Deno.test({
+  name: "Lemon tags can assign attributes with property chaining.",
+  fn: () => {
+    const elt = (
+      Lemon.xxx
+        .class("abc")
+        .class("def")
+        .dataWet("💦")
+        .dataFalse("failure")
+        .dataTrue()
+        .hidden
+        .hidden
+        .dataName("data-name")
+        .dataName("data-name")
+        .dataFalse(false)
+    )``;
+    assertStrictEquals(elt.getAttribute("class"), "abc def");
+    assertStrictEquals(elt.getAttribute("data-wet"), "💦");
+    assertStrictEquals(elt.getAttribute("data-true"), "");
+    assertStrictEquals(elt.getAttribute("data-hidden"), "");
+    assertStrictEquals(elt.getAttribute("data-name"), "data-name");
+    assertStrictEquals(elt.hasAttribute("data-false"), false);
+  },
+});
+
+Deno.test({
+  name: "Lemon tags expose their internal state.",
+  fn: () => {
+    const eltTag = (
+      Lemon("xxx:yyy", "example:xxx")
+        .class("abc")
+        .class("def")
+        .dataWet("💦")
+        .dataFalse("failure")
+        .dataTrue()
+        .hidden
+        .hidden
+        .dataName("data-name")
+        .dataName("data-name")
+        .dataFalse(false)
+        .dataExtra
+    );
+    assertEquals(eltTag.attributes, {
+      class: "abc def",
+      "data-wet": "💦",
+      "data-true": "",
+      hidden: "",
+      "data-name": "data-name",
+      "data-extra": "",
+    });
+    assertStrictEquals(eltTag.localName, "yyy");
+    assertStrictEquals(eltTag.namespaceURI, "example:xxx");
+    assertStrictEquals(eltTag.qualifiedName, "xxx:yyy");
+    assertStrictEquals(eltTag.ownerDocument, document);
+    assertStrictEquals(
+      eltTag.name,
+      '<xxx:yyy xmlns:xxx="example:xxx" class="abc def" data-wet="💦" data-true="" hidden="" data-name="data-name" data-extra=""> /* pending data-extra */',
+    );
+    assertStrictEquals(
+      eltTag().name,
+      '<xxx:yyy xmlns:xxx="example:xxx" class="abc def" data-wet="💦" data-true="" hidden="" data-name="data-name" data-extra="">',
+    );
+  },
+});
+
 Deno.test({
   name: "Lemon tags support all kinds of expression.",
   fn: () => {
-    const elt = Lemon.xxx({})` a ${null} b ${Lemon.creamPie({})
-      `\t`}${" c "}`;
+    const elt = Lemon.xxx({})` a ${null} b ${Lemon.creamPie(
+      {},
+    )`\t`}${" c "}`;
     assertStrictEquals(elt.childNodes.length, 3);
     assertStrictEquals(elt.childNodes[0].nodeType, 3);
     assertStrictEquals(elt.childNodes[0].textContent, " a  b ");
This page took 0.021308 seconds and 4 git commands to generate.