babashka/test/babashka/logging_test.clj
2021-09-11 18:13:12 +02:00

112 lines
4 KiB
Clojure

(ns babashka.logging-test
(:require [babashka.fs :as fs]
[babashka.test-utils :as tu]
[clojure.edn :as edn]
[clojure.string :as str]
[clojure.test :as t :refer [deftest is testing]]))
(def program
'(do
(ns dude)
(require '[clojure.tools.logging :as log])
(require '[taoensso.timbre :as timbre])
(defn test-fn
[]
(log/debug "test ctl debug level")
(log/info "test ctl info")
(timbre/debug "test timbre debug level")
(timbre/info "test timbre info"))
(println "before setting log level")
(test-fn)
(def old-config timbre/*config*)
(alter-var-root #'timbre/*config* #(assoc %1 :min-level :info))
(println "after setting log level to :info")
(test-fn)
(println "with-level :debug")
(timbre/with-level :debug
(test-fn))
(timbre/set-level! :debug)
(println "after setting log level to :debug")
(test-fn)
(timbre/infof "Hello %s" 123)
(log/infof "Hello %s" 123)
(timbre/swap-config! assoc-in [:appenders :spit] (timbre/spit-appender {:fname "/tmp/timbre.log"}))
(log/infof "Hello %s" 123)
(timbre/swap-config! (constantly old-config))))
(deftest logging-test
(let [res (tu/bb nil (pr-str program))]
(is (= 17 (count (re-seq #"\[dude:.\]" res))))
(is (= 6 (count (re-seq #"DEBUG" res))))
(is (= 11 (count (re-seq #"INFO" res)))))
(testing "println appender works with with-out-str"
(let [res (tu/bb
nil
(pr-str '(do
(require '[taoensso.timbre :as timbre]
'[clojure.string :as str])
(str/includes? (with-out-str (timbre/info "hello")) "hello"))))
res (edn/read-string res)]
(is (true? res))))
(testing "spit-appender"
(let [temp-file (-> (fs/create-temp-dir)
(fs/file "log.txt"))
program (pr-str '(do
(require '[taoensso.timbre :as timbre]
'[clojure.string :as str])
(def appender (timbre/spit-appender {:fname :fname-placeholder}))
(def old-config timbre/*config*)
(timbre/swap-config! assoc-in [:appenders :spit] appender)
(str/includes? (with-out-str (timbre/info "hello")) "hello")
(timbre/swap-config! (constantly old-config))))
program (str/replace program ":fname-placeholder" (pr-str (.getPath temp-file)))
_ (tu/bb
nil
program)
res (slurp temp-file)]
(is (str/includes? res "hello")))))
(def readable-prog
'(do
(ns readble-test)
(require '[clojure.tools.logging.readable :as logr])
(require '[taoensso.timbre :as timbre])
(defn test-fn []
(logr/trace (ex-info "trace exception" {}))
(logr/debugf "%s" {"abc" 123 "def" 789})
(logr/info (list \a \b))
(logr/warnf "%s" "test warn")
(let [g (logr/spyf "%s" (apply str (interpose "," ["abc" "def" "ghi"])))]
(println g)))
(println "before setting anything")
(test-fn)
(println "with print-readably set to nil (overridden by log macros)")
(binding [*print-readably* nil]
(test-fn))
(println "setting log level")
(timbre/set-level! :warn)
(test-fn)
(timbre/set-level! :debug)))
(deftest readable-logging-test
(let [res (tu/bb nil (pr-str readable-prog))]
(testing "spied value is returned and printed (and printed from println even though spyf level isn't enabled)"
(is (= 5 (count (re-seq #"abc,def,ghi" res)))))
(testing "spied value is printed readably as a result of spyf"
(is (= 2 (count (re-seq #"\"abc,def,ghi\"" res)))))
(testing "strings logged are printed readably"
(is (= 3 (count (re-seq #"\"test warn\"" res)))))
(testing "lists are printed readably"
(is (= 2 (count (re-seq #"\(\\a \\b\)" res)))))))