This commit is contained in:
60
test/net/deertopia/doerg/render_test.clj
Normal file
60
test/net/deertopia/doerg/render_test.clj
Normal file
@@ -0,0 +1,60 @@
|
||||
(ns net.deertopia.doerg.render-test
|
||||
(:require [net.deertopia.doerg.render :as sut]
|
||||
[net.deertopia.doerg.element :as element]
|
||||
[net.deertopia.doerg.tex.temml :as temml]
|
||||
[net.deertopia.doerg.tex.native :as native]
|
||||
[com.rpl.specter :as sp]
|
||||
[clojure.edn :as edn]
|
||||
[clojure.test :as t]
|
||||
[clojure.java.io :as io]
|
||||
[clojure.string :as str]))
|
||||
|
||||
;; Stupid and hacky.
|
||||
(defn mathml? [s]
|
||||
(str/starts-with? s "<math"))
|
||||
|
||||
;; Also stupid and hacky. }:)
|
||||
(defn svg? [s]
|
||||
(some? (re-matches #"(?s)(<!--.*?-->\n)<svg.*" s)))
|
||||
|
||||
(defn read-resource [s]
|
||||
(let [p (-> (format "net/deertopia/doerg/render_test/%s" s)
|
||||
io/resource slurp)]
|
||||
(cond (str/ends-with? s ".edn") (edn/read-string p)
|
||||
(str/ends-with? s ".org") (element/read-string p))))
|
||||
|
||||
(t/deftest latex-fallbacks
|
||||
(t/testing "LaTeX fallback behaviour"
|
||||
(let [doc (temml/binding-worker
|
||||
(-> "fallbacks.org" read-resource sut/render-tex-snippets))
|
||||
snippets (->> doc
|
||||
(sp/select
|
||||
[element/postorder-walker
|
||||
#(element/of-type?
|
||||
% "latex-fragment" "latex-environment")
|
||||
(sp/view #(-> % ::sut/rendered deref str))]))
|
||||
expectations (-> "fallbacks.edn" read-resource)]
|
||||
(doall (map (fn [s e]
|
||||
(let [mathml (mathml? s)
|
||||
svg (svg? s)]
|
||||
(assert
|
||||
(not= mathml svg)
|
||||
"`mathml?` and `svg?` should be mutually-exclusive.")
|
||||
(case e
|
||||
:mathml (t/is mathml)
|
||||
:svg (t/is svg))))
|
||||
snippets expectations)))))
|
||||
|
||||
(t/deftest latex-laziness
|
||||
(t/testing "LaTeX laziness"
|
||||
(let [ex (Exception. "you're supposed to be lazy!")
|
||||
bad (fn [& _] (throw ex))
|
||||
doc (read-resource "latexless.org")
|
||||
r (try (with-redefs-fn {#'native/render bad
|
||||
#'temml/render bad}
|
||||
#(sut/render-tex-snippets doc))
|
||||
(catch Exception e
|
||||
(if (= e ex)
|
||||
false
|
||||
(throw e))))]
|
||||
(t/is r))))
|
||||
Reference in New Issue
Block a user