Add gaka lib tests
This commit is contained in:
parent
d751976e30
commit
2136c0a19b
4 changed files with 235 additions and 1 deletions
3
deps.edn
3
deps.edn
|
|
@ -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"}}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
196
test-resources/lib_tests/gaka/core_test.clj
Normal file
196
test-resources/lib_tests/gaka/core_test.clj
Normal 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}))))
|
||||
Loading…
Reference in a new issue