(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 "\n) (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))))