Add tools reader tests

This commit is contained in:
Michiel Borkent 2023-12-09 11:49:57 +01:00
parent 2ee7a0d12e
commit 0e1694f586
3 changed files with 26 additions and 3 deletions

View file

@ -1,6 +1,7 @@
(ns babashka.impl.clojure.tools.reader
(:refer-clojure :exclude [read])
(:refer-clojure :exclude [read read-string])
(:require
[clojure.tools.reader.reader-types :as rt]
[edamame.core :as e]
[sci.core :as sci]
[sci.ctx-store :as ctx]
@ -52,7 +53,13 @@
:readers (fn [sym]
(resolve-tag sym))
:auto-resolve (fn [alias]
(@alias-map alias)))
(if (= :current alias)
(symbol (str @sci/ns))
(or (when-let [alias-map @alias-map]
(@alias-map alias))
(sci/eval-form (ctx/get-ctx)
(list 'get '(ns-aliases *ns*)
(list 'quote alias)))))))
v (e/parse-next reader opts)]
(if (identical? ::e/eof v)
(if (identical? :eofthrow eof)
@ -67,11 +74,18 @@
sentinel)
v))))
(defn read-string
([s] (read-string nil s))
([opts s]
(when (and s (not (identical? s "")))
(read opts (rt/string-push-back-reader s)))))
(defn resolve-symbol [sym]
(p/fully-qualify (ctx/get-ctx) sym))
(def reader-namespace
{'read (sci/copy-var read rns)
'read-string (sci/copy-var read-string rns)
'resolve-symbol (sci/copy-var resolve-symbol rns)
'*default-data-reader-fn* default-data-reader-fn
'*alias-map* alias-map})

View file

@ -14,4 +14,5 @@
'read-char (sci/copy-var rt/read-char rtns)
'unread (sci/copy-var rt/unread rtns)
'source-logging-push-back-reader (sci/copy-var rt/source-logging-push-back-reader rtns)
'source-logging-reader? (sci/copy-var rt/source-logging-reader? rtns)})
'source-logging-reader? (sci/copy-var rt/source-logging-reader? rtns)
'string-push-back-reader (sci/copy-var rt/string-push-back-reader rtns)})

View file

@ -886,6 +886,14 @@ true")))
(deftest get-watches-test
(is (true? (bb nil "(map? (.getWatches (doto (atom nil) (add-watch :foo (fn [k r o n])))))"))))
(deftest tools-reader-test
(is (= :user/foo (bb nil "(require '[clojure.tools.reader :as r]) (r/read-string \"::foo\")")))
(is (= :clojure.tools.reader/foo (bb nil "(require '[clojure.tools.reader :as r]) (r/read-string \"::r/foo\")")))
(is (= [1 2 3] (bb nil "
(require '[clojure.tools.reader :as r])
(binding [r/*default-data-reader-fn* (fn [sym] (fn [val] [1 2 3]))]
(r/read-string \"#dude []\"))"))))
;;;; Scratch
(comment