(ns dompa.nodes-test #?(:clj (:require [clojure.test :refer [deftest is testing]] [clojure.zip :as zip] [dompa.html :as html] [dompa.nodes :as nodes :refer [$ defhtml]])) #?(:cljs (:require [cljs.test :refer-macros [deftest testing is]] [clojure.zip :as zip] [dompa.nodes :as nodes :refer [$] :refer-macros [defhtml]] [dompa.html :as html]))) (defhtml hello [who] ($ :div ($ "hello " who))) (deftest defhtml-test (is (= "
hello world
" (hello "world")))) (defhtml list-items [items] ($ :ul (->> items (map (fn [item] ($ :li item))) (into [])))) (deftest list-items-test (is (= "" (list-items ["one" "two" "three"])))) (deftest $-test (testing "a simple node" (is (= {:node/name :div :node/children [{:node/name :dompa/text :node/value "hello world"}]} ($ :div "hello world")))) (testing "a fragment node" (is (= {:node/name :<> :node/children [{:node/name :span :node/children [{:node/name :dompa/text :node/value "hello"}]} {:node/name :span :node/children [{:node/name :dompa/text :node/value "world"}]}]} ($ :<> ($ :span ($ "hello")) ($ :span ($ "world")))))) (testing "a nil node" (is (= nil ($ nil)))) (testing "a string node" (is (= {:node/name :dompa/text :node/value "hello world"} ($ "hello world")))) (testing "a node of multiple sub-nodes" (is (= {:node/name :<> :node/children [{:node/name :dompa/text :node/value "hello"} {:node/name :dompa/text :node/value "12345"} {:node/name :dompa/text :node/value "123.3"} {:node/name :dompa/text :node/value "world"}]} ($ "hello" 12345 nil 123.3 "world"))) (is (= {:node/name :<> :node/children [{:node/name :dompa/text :node/value "hello"} {:node/name :dompa/text :node/value "12345"} {:node/name :<> :node/children [{:node/name :dompa/text :node/value "w"} {:node/name :dompa/text :node/value "o"} {:node/name :dompa/text :node/value "r"} {:node/name :dompa/text :node/value "l"} {:node/name :dompa/text :node/value "d"}]}]} ($ "hello" 12345 (map #($ %) ["w" "o" "r" "l" "d"])))) (is (= {:node/name :<> :node/children [{:node/name :dompa/text :node/value "hello"} {:node/name :<> :node/children [{:node/name :dompa/text :node/value "w"} {:node/name :<> :node/children [{:node/name :dompa/text :node/value "o"} {:node/name :dompa/text :node/value "r"} {:node/name :<> :node/children [{:node/name :dompa/text :node/value "l"} {:node/name :dompa/text :node/value "d"}]}]}]}]} ($ "hello" (map (fn [x] ($ x)) ["w" (map (fn [x] ($ x)) ["o" "r" (map (fn [x] ($ x)) ["l" "d"])])])))))) (deftest traverse-test (let [traverser-fn (fn [node] (if (= :dompa/text (:node/name node)) (assoc node :node/value "world hello") node))] (is (= "
world hello
" (-> (html/->nodes "
hello world
") (nodes/traverse traverser-fn) nodes/->html))))) (deftest zip-test (let [nodes (html/->nodes "

hello

world

") zipper (nodes/zip (first nodes))] (is (= :div (:node/name (zip/node zipper)))) (is (= "hello" (-> zipper zip/down zip/down zip/node :node/value)))))