// 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({
},
});
+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: () => {
},
});
+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: () => {
},
});
+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 ");