Add gaka lib tests

This commit is contained in:
Michiel Borkent 2021-02-03 14:50:58 +01:00
parent d751976e30
commit 2136c0a19b
4 changed files with 235 additions and 1 deletions

View file

@ -69,7 +69,8 @@
honeysql/honeysql {:mvn/version "1.0.444"}
minimallist/minimallist {:mvn/version "0.0.6"}
circleci/bond {:mvn/version "0.4.0"}
version-clj/version-clj {:mvn/version "0.1.2"}}}
version-clj/version-clj {:mvn/version "0.1.2"}
gaka/gaka {:mvn/version "0.3.0"}}}
:clj-nvd
{:extra-deps {clj-nvd/clj-nvd {:git/url "https://github.com/miikka/clj-nvd.git"
:sha "f2ec98699e057a379baf170cb49cf7ad76874a70"}}

View file

@ -399,6 +399,41 @@ Library for managing environment variables in Clojure.
(prn (:path env))
```
### [gaka](https://github.com/cdaddr/gaka)
``` clojure
(ns script
(:require [babashka.deps :as deps]))
(deps/add-deps '{:deps {gaka/gaka {:mvn/version "0.3.0"}}})
(require '[gaka.core :as gaka])
(def rules [:div#foo
:margin "0px"
[:span.bar
:color "black"
:font-weight "bold"
[:a:hover
:text-decoration "none"]]])
(println (gaka/css rules))
```
Output:
``` css
div#foo {
margin: 0px;}
div#foo span.bar {
color: black;
font-weight: bold;}
div#foo span.bar a:hover {
text-decoration: none;}
```
## Pods
[Babashka pods](https://github.com/babashka/babashka.pods) are programs that can

View file

@ -176,6 +176,8 @@
(test-namespaces 'test-check.smoke-test)
(test-namespaces 'gaka.core-test)
;;;; final exit code
(let [{:keys [:test :fail :error] :as m} @status]

View file

@ -0,0 +1,196 @@
(ns gaka.core-test
(:require [clojure.test :refer [deftest is #_are]]
[gaka.core :refer [css compile* inline-css render-rule]]
))
(defmacro =? [& body]
`(clojure.test/are [x# y#] (= x# y#)
~@body))
(deftest test-flatten
(let [flatten-seqs #'gaka.core/flatten-seqs
flatten-maps #'gaka.core/flatten-maps
flatten-keyvals #'gaka.core/flatten-keyvals]
(=? (flatten-seqs [1 '(2 3)])
[1 2 3])
(=? (flatten-seqs [1 '(2 [3 (4)])])
[1 2 [3 '(4)]])
(=? (flatten-seqs [1 '(2 (3 (4)))])
[1 2 3 4])
(=? (flatten-seqs [1 '(2 3 [4])])
[1 2 3 [4]])
(=? (flatten-maps [1 2 {3 4}])
[1 2 3 4])
#_(=? (flatten-maps [1 {2 3 4 5} 6])
[1 2 3 4 5 6])
(=? (flatten-keyvals [1 '(2 {3 4} 5)])
[1 2 3 4 5])
(=? (flatten-keyvals [1 [2 {3 4}]])
[1 [2 {3 4}]])
(=? (flatten-keyvals [1 '([2] 3 [4] {5 6})])
[1 [2] 3 [4] 5 6])
))
(deftest test-compile*
(=? (compile* [] [:a])
[{:selector ["a"]
:keyvals []}]
(compile* [] [:a :color :red])
[{:selector ["a"]
:keyvals [:color :red]}]
(compile* [] [:a {:color :red}])
[{:selector ["a"]
:keyvals [:color :red]}]
(compile* [] [:a :color :blue {:color :red}])
[{:selector ["a"]
:keyvals [:color :blue :color :red]}]
(compile* [] [:a {:color :red} :color :blue])
[{:selector ["a"]
:keyvals [:color :red :color :blue]}]
(compile* [] [:a [:img :border :none]])
[{:selector ["a"]
:keyvals []}
{:selector ["a" "img"]
:keyvals [:border :none]}]
(compile* [] [:div [:a [:img :border :none]]])
[{:selector ["div"]
:keyvals []}
{:selector ["div" "a"]
:keyvals []}
{:selector ["div" "a" "img"]
:keyvals [:border :none]}]
(compile* [] [:div (list :border :none)])
[{:selector ["div"]
:keyvals [:border :none]}]
(compile* [] [:div ["a, img" :border :none]])
[{:selector ["div"]
:keyvals []}
{:selector ["div" "a"]
:keyvals [:border :none]}
{:selector ["div" "img"]
:keyvals [:border :none]}]))
(deftest test-mixins
(=? (let [mixin (list :color :red)]
(compile* [] [:a mixin]))
[{:selector ["a"]
:keyvals [:color :red]}]
(let [a (list [:a :color :red])]
(compile* [] [:div a]))
[{:selector ["div"]
:keyvals []}
{:selector ["div" "a"]
:keyvals [:color :red]}]
(let [mixin {:color :red}]
(compile* [] [:div mixin]))
[{:selector ["div"]
:keyvals [:color :red]}]
(let [mixin {:color :red}]
(compile* [] [:div [:a mixin]]))
[{:selector ["div"]
:keyvals []}
{:selector ["div" "a"]
:keyvals [:color :red]}]
(let [mixin (list :color :red)
els (list [:a mixin] [:span mixin])]
(compile* [] [:div els]))
[{:selector ["div"]
:keyvals []}
{:selector ["div" "a"]
:keyvals [:color :red]}
{:selector ["div" "span"]
:keyvals [:color :red]}]
(let [mixin (list :color :red {:border :none})
els (list [:a mixin] :color :blue [:span mixin])]
(compile* [] [:div els]))
[{:selector ["div"]
:keyvals [:color :blue]}
{:selector ["div" "a"]
:keyvals [:color :red :border :none]}
{:selector ["div" "span"]
:keyvals [:color :red :border :none]}]))
(deftest test-render-rule
(=? (render-rule {:selector ["a"] :keyvals [:color :red]})
"a {\n color: red;}\n\n"
(render-rule {:selector ["a"] :keyvals [:color :red :border :none]})
"a {\n color: red;\n border: none;}\n\n"
(render-rule {:selector ["a" "img"] :keyvals [:border :none]})
" a img {\n border: none;}\n\n"))
(deftest test-css
(=? (css nil)
""
(css [:a :color :red [:img :border :none]])
"a {\n color: red;}\n\n a img {\n border: none;}\n\n"
(css [:a {:color :red} [:img {:border :none}]])
"a {\n color: red;}\n\n a img {\n border: none;}\n\n"
(css [:a :color :red [:img :border :none] :font-style :italic])
"a {\n color: red;\n font-style: italic;}\n\n a img {\n border: none;}\n\n"
(css [:body
:padding 0
[:div#foo
[:a :color :red]]
:margin 0
[:div#bar
[:a :color :blue]]
:border 0])
"body {\n padding: 0;\n margin: 0;\n border: 0;}\n\n body div#foo a {\n color: red;}\n\n body div#bar a {\n color: blue;}\n\n"))
(deftest test-css-no-indent
(binding [gaka.core/*print-indent* false]
(=? (css nil)
""
(css [:a :color :red [:img :border :none]])
"a {\ncolor: red;}\n\na img {\nborder: none;}\n\n"
(css [:a {:color :red} [:img {:border :none}]])
"a {\ncolor: red;}\n\na img {\nborder: none;}\n\n"
(css [:a :color :red [:img :border :none] :font-style :italic])
"a {\ncolor: red;\nfont-style: italic;}\n\na img {\nborder: none;}\n\n"
(css [:body
:padding 0
[:div#foo
[:a :color :red]]
:margin 0
[:div#bar
[:a :color :blue]]
:border 0])
"body {\npadding: 0;\nmargin: 0;\nborder: 0;}\n\nbody div#foo a {\ncolor: red;}\n\nbody div#bar a {\ncolor: blue;}\n\n")))
(deftest test-inline-css
(=? (inline-css :color :red :border 1)
"color: red; border: 1;")
(is
(re-find #"^(color: red; border: 1;|border: 1; color: red;)$"
(inline-css {:color :red :border 1}))))