babashka/test-resources/lib_tests/lambdaisland/regal/spec_gen_test.clj

40 lines
1.4 KiB
Clojure
Raw Permalink Normal View History

(ns lambdaisland.regal.spec-gen-test
(:require [clojure.spec.alpha :as s]
[clojure.spec.gen.alpha :as spec-gen]
[clojure.test :refer [deftest is are testing run-tests]]
[clojure.test.check.clojure-test :refer [defspec]]
[clojure.test.check.generators :as gen]
[clojure.test.check.properties :as prop]
[lambdaisland.regal :as regal]
[lambdaisland.regal.parse :as parse]
[lambdaisland.regal.spec-alpha]))
(def form-gen (s/gen ::regal/form))
(def canonical-form-gen (gen/fmap regal/normalize (s/gen ::regal/form)))
(defspec generated-forms-can-be-converted 100
(prop/for-all [regal form-gen]
(try
(regal/regex regal)
(catch Exception _
false))))
(defn- round-trip? [form]
(try
(= form (parse/parse (regal/regex form)))
(catch Exception _ false)))
(defspec round-trip-property 100
(prop/for-all* [canonical-form-gen] round-trip?))
(deftest round-trip-test
(is (round-trip? [:cat " " [:class "&& "]]))
(is (round-trip? [:class " " [" " "["]]))
(is (round-trip? [:ctrl "A"]))
(is (round-trip? [:class " - "]))
(is (round-trip? [:alt " " [:capture " " :escape]]))
(is (round-trip? :whitespace))
(is (round-trip? [:? [:? "x"]]))
(is (round-trip? [:cat " " [:class " " :non-whitespace]]))
(is (round-trip? [:cat "-" [:repeat [:repeat "x" 0] 0]])))