1
0

output-template: run the tests

This commit is contained in:
Daniel Barlow 2025-03-02 21:09:11 +00:00
parent 6649ebeccd
commit c32d09bd83
4 changed files with 12 additions and 50 deletions

View File

@ -1,3 +0,0 @@
check:
./output-template '{{' '}}' < example.ini > output
diff -u output example.ini.expected

View File

@ -2,6 +2,7 @@
fetchurl,
writeFennel,
fennel,
fennelrepl,
runCommand,
lua,
anoia,
@ -17,9 +18,9 @@ stdenv.mkDerivation {
src = ./.;
buildInputs = [ lua ];
doCheck = true;
nativeBuildInputs = [ fennelrepl ] ;
buildPhase = ''
fennelrepl --test ./output-template.fnl
cp -p ${
writeFennel name {
packages = [
@ -27,11 +28,11 @@ stdenv.mkDerivation {
lualinux
linotify
];
macros = [ anoia.dev ];
mainFunction = "run";
} ./output-template.fnl
} ${name}
'';
checkPhase = "make check";
installPhase = ''
install -D ${name} $out/bin/${name}
'';

View File

@ -41,4 +41,12 @@
out (substitute (: (io.input) :read "*a") opening closing)]
(io.write out)))
(import-macros { : define-tests : expect : expect= } :anoia.assert)
(define-tests
(fn slurp [name]
(with-open [f (assert (io.open name))] (f:read "*a")))
(expect=
(pick-values 1 (substitute (slurp "example.ini") "{{" "}}"))
(slurp "example.ini.expected")))
{ : run }

View File

@ -1,44 +0,0 @@
(local svc (require :anoia.svc))
(fn json-escape [s]
;; All Unicode characters may be placed within the quotation marks,
;; except for the characters that MUST be escaped:
;; quotation mark, reverse solidus, and the control characters (U+0000
;; through U+001F). (RFC 8259)
(-> s
(string.gsub
"[\"\b\f\n\r\t]" {
"\b" "\\b"
"\"" "\\\""
"\f" "\\f"
"\n" "\\n"
"\r" "\\r"
"\t" "\\t"
})
(string.gsub
"([\x00-\x1b])"
(fn [x] (string.format "\\u%04X" (string.byte x))))))
(fn substitute [text opening closing]
(let [delim (.. opening "(.-)" closing)
myenv {
: string
:output
(fn [service-path path]
(let [s (assert (svc.open (.. service-path "/.outputs")))]
(s:output path)))
:lua_quote #(string.format "%q" $1)
:json_quote (fn [x] (.. "\"" (json-escape x) "\""))
}]
(string.gsub text delim
(fn [x]
(assert ((load (.. "return " x) x :t myenv))
(string.format "missing value for %q" x))))))
(fn run []
(let [[opening closing] arg
out (substitute (: (io.input) :read "*a") opening closing)]
(io.write out)))
{ : run }