babashka/test-resources/lib_tests/gaka/core_test.clj
Gabriel Horner 665ae4dd97
Finish up library tests (#1120)
* Add tests for markdown-clj and tools.namespace

See comment for why only one markdown test could be run.
Closes #1069 and #1064

* Convert 10 test libs using add-libtest

Also improved add-libtest to only require maven artifact
and rely on clojars for getting git-url most of the time

* Convert 8 more test libs using add-libtest

Also updated table and added comment for newline test

* Fix doric test

* Disable tools.namespace test that fails on windows

* Added dozen manual test libs and converted 2 test libs

add-libtest.clj supports manually-added and test-directories options

* Converts last tests to test namespaces and write libraries.csv

* Add a number of library tests from projects.md

Also add more docs around adding test libs and tweak add script

* Use :sha for gitlib and older clojure cli

* Revert "Use :sha for gitlib and older clojure cli"

This reverts commit c663ab8368.

* Fix and disable failing tests

Disabled tests that fail consistently and fixed windows one
2021-12-29 16:35:14 +01:00

196 lines
5.5 KiB
Clojure

(ns gaka.core-test
(:use gaka.core
clojure.test))
(defmacro =? [& body]
`(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}))))