sci: defprotocol and defrecord
This commit is contained in:
parent
cfc5eda725
commit
14cd18f50f
5 changed files with 91 additions and 2 deletions
2
sci
2
sci
|
|
@ -1 +1 @@
|
||||||
Subproject commit 4f4a8714f52aec3991203646f3244db1e9b074d2
|
Subproject commit 10e84c06138fea189aaace21acc52b73069179fc
|
||||||
21
script/lib_tests/camel_snake_kebab_test
Executable file
21
script/lib_tests/camel_snake_kebab_test
Executable file
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
|
||||||
|
BB_CMD="./bb"
|
||||||
|
else
|
||||||
|
BB_CMD="lein bb"
|
||||||
|
fi
|
||||||
|
|
||||||
|
export BABASHKA_CLASSPATH
|
||||||
|
BABASHKA_CLASSPATH=$(clojure -Sdeps '{:deps {camel-snake-kebab {:mvn/version "0.4.1"}}}' -Spath)
|
||||||
|
|
||||||
|
$BB_CMD -cp "$BABASHKA_CLASSPATH:test-resources/lib_tests" -e "
|
||||||
|
(require '[camel-snake-kebab.core-test])
|
||||||
|
(require '[clojure.test :as t])
|
||||||
|
(let [{:keys [:test :pass :fail :error]} (t/run-tests 'camel-snake-kebab.core-test)]
|
||||||
|
(when-not (pos? test)
|
||||||
|
(System/exit 1))
|
||||||
|
(System/exit (+ fail error)))
|
||||||
|
"
|
||||||
|
|
@ -24,3 +24,4 @@ script/lib_tests/combinatorics_test
|
||||||
script/lib_tests/doric_test
|
script/lib_tests/doric_test
|
||||||
script/lib_tests/clojure_data_zip_test
|
script/lib_tests/clojure_data_zip_test
|
||||||
script/lib_tests/cljc_java_time_test
|
script/lib_tests/cljc_java_time_test
|
||||||
|
script/lib_tests/camel_snake_kebab_test
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,13 @@
|
||||||
]
|
]
|
||||||
:fields [clojure.lang.PersistentQueue]
|
:fields [clojure.lang.PersistentQueue]
|
||||||
:instance-checks [clojure.lang.IObj
|
:instance-checks [clojure.lang.IObj
|
||||||
clojure.lang.IEditableCollection]
|
clojure.lang.IEditableCollection
|
||||||
|
clojure.lang.IPersistentMap
|
||||||
|
clojure.lang.IPersistentVector
|
||||||
|
clojure.lang.ISeq
|
||||||
|
clojure.lang.Named
|
||||||
|
clojure.lang.Keyword
|
||||||
|
clojure.lang.Symbol]
|
||||||
:custom ~custom-map})
|
:custom ~custom-map})
|
||||||
|
|
||||||
(defmacro gen-class-map []
|
(defmacro gen-class-map []
|
||||||
|
|
|
||||||
61
test-resources/lib_tests/camel_snake_kebab/core_test.cljc
Normal file
61
test-resources/lib_tests/camel_snake_kebab/core_test.cljc
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
(ns camel-snake-kebab.core-test
|
||||||
|
(:require [camel-snake-kebab.core :as csk]
|
||||||
|
#?(:clj [clojure.test :refer :all]
|
||||||
|
:cljs [cljs.test :refer-macros [deftest testing is are]]))
|
||||||
|
#?(:clj (:import (clojure.lang ExceptionInfo))))
|
||||||
|
|
||||||
|
(def zip (partial map vector))
|
||||||
|
|
||||||
|
(deftest format-case-test
|
||||||
|
(testing "examples"
|
||||||
|
(are [x y] (= x y)
|
||||||
|
'fluxCapacitor (csk/->camelCase 'flux-capacitor)
|
||||||
|
"I_AM_CONSTANT" (csk/->SCREAMING_SNAKE_CASE "I am constant")
|
||||||
|
:object-id (csk/->kebab-case :object_id)
|
||||||
|
"X-SSL-Cipher" (csk/->HTTP-Header-Case "x-ssl-cipher")
|
||||||
|
:object-id (csk/->kebab-case-keyword "object_id"))
|
||||||
|
:s3_key (csk/->snake_case :s3-key :separator \-))
|
||||||
|
|
||||||
|
(testing "rejection of namespaced keywords and symbols"
|
||||||
|
(is (thrown? ExceptionInfo (csk/->PascalCase (keyword "a" "b"))))
|
||||||
|
(is (thrown? ExceptionInfo (csk/->PascalCase (symbol "a" "b")))))
|
||||||
|
|
||||||
|
(testing "all the type preserving functions"
|
||||||
|
(let
|
||||||
|
[inputs ["FooBar"
|
||||||
|
"fooBar"
|
||||||
|
"FOO_BAR"
|
||||||
|
"foo_bar"
|
||||||
|
"foo-bar"
|
||||||
|
"Foo_Bar"]
|
||||||
|
functions [csk/->PascalCase
|
||||||
|
csk/->camelCase
|
||||||
|
csk/->SCREAMING_SNAKE_CASE
|
||||||
|
csk/->snake_case
|
||||||
|
csk/->kebab-case
|
||||||
|
csk/->Camel_Snake_Case]
|
||||||
|
formats [identity keyword symbol]]
|
||||||
|
|
||||||
|
(doseq [input inputs, format formats, [output function] (zip inputs functions)]
|
||||||
|
(is (= (format output) (function (format input)))))))
|
||||||
|
|
||||||
|
(testing "some of the type converting functions"
|
||||||
|
(are [x y] (= x y)
|
||||||
|
:FooBar (csk/->PascalCaseKeyword 'foo-bar)
|
||||||
|
"FOO_BAR" (csk/->SCREAMING_SNAKE_CASE_STRING :foo-bar)
|
||||||
|
'foo-bar (csk/->kebab-case-symbol "foo bar")))
|
||||||
|
|
||||||
|
(testing "handling of blank input string"
|
||||||
|
(is (= "" (csk/->kebab-case "")))
|
||||||
|
(is (= "" (csk/->kebab-case " ")))))
|
||||||
|
|
||||||
|
(deftest http-header-case-test
|
||||||
|
(are [x y] (= x (csk/->HTTP-Header-Case y))
|
||||||
|
"User-Agent" "user-agent"
|
||||||
|
"DNT" "dnt"
|
||||||
|
"Remote-IP" "remote-ip"
|
||||||
|
"TE" "te"
|
||||||
|
"UA-CPU" "ua-cpu"
|
||||||
|
"X-SSL-Cipher" "x-ssl-cipher"
|
||||||
|
"X-WAP-Profile" "x-wap-profile"
|
||||||
|
"X-XSS-Protection" "x-xss-protection"))
|
||||||
Loading…
Reference in a new issue