better testing experience
This commit is contained in:
parent
4f28cbfda7
commit
9421a0a910
|
@ -26,12 +26,18 @@ The default package will serve the site locally (using caddy)
|
|||
nix run .
|
||||
```
|
||||
|
||||
Or you can build it raw:
|
||||
Or you can build it raw (dumps the produced site into ./result)
|
||||
|
||||
```sh
|
||||
nix build .#raw
|
||||
```
|
||||
|
||||
Run the tests and watch for changes
|
||||
|
||||
```sh
|
||||
nix run .#watch
|
||||
```
|
||||
|
||||
## features
|
||||
|
||||
- [X] file paths
|
||||
|
|
|
@ -52,6 +52,12 @@
|
|||
./testing/site.test.nix
|
||||
./testing/style.test.nix
|
||||
];
|
||||
|
||||
watch = let w = import ./testing/watch.nix pkgs;
|
||||
in w "nix run .#test" "fx";
|
||||
|
||||
dev = let w = import ./testing/watch.nix pkgs;
|
||||
in w "nix run .#" "caddy";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -5,7 +5,8 @@ let
|
|||
builtins.trace "Skipping ${key} as it is a set" ""
|
||||
else if value == "" || value == [ ] || value == false then
|
||||
""
|
||||
else if value == true then key
|
||||
else if value == true then
|
||||
key
|
||||
else
|
||||
''${key}="${toString value}"'';
|
||||
in rec {
|
||||
|
|
|
@ -69,25 +69,31 @@ in rec {
|
|||
matchThen "(```)(.*)(```)" block (m: elems.code (builtins.elemAt m 1));
|
||||
|
||||
list = block:
|
||||
matchThen (
|
||||
''
|
||||
matchThen (''
|
||||
(- .+
|
||||
)*(- .+
|
||||
?)'') block (m:
|
||||
elems.List ( splitList block ));
|
||||
?)'') block (m: elems.List (splitList block));
|
||||
|
||||
splitList = block: map (listItem) (builtins.filter
|
||||
(s: builtins.isString s && s != "")
|
||||
(builtins.split "\n" block));
|
||||
splitList = block:
|
||||
map (listItem) (builtins.filter (s: builtins.isString s && s != "")
|
||||
(builtins.split "\n" block));
|
||||
|
||||
listItem = str:
|
||||
listItem = str:
|
||||
let
|
||||
li = builtins.match "- (.*)" str;
|
||||
checkbox = builtins.match "- \\[(.)] (.*)" str;
|
||||
checked = builtins.elemAt checkbox 0;
|
||||
content = builtins.elemAt checkbox 1;
|
||||
in if checkbox == null then li else
|
||||
[(elems.input {type = "checkbox"; checked = checked != " "; disabled = true;}) content];
|
||||
li = builtins.match "- (.*)" str;
|
||||
checkbox = builtins.match "- \\[(.)] (.*)" str;
|
||||
checked = builtins.elemAt checkbox 0;
|
||||
content = builtins.elemAt checkbox 1;
|
||||
in if checkbox == null then
|
||||
li
|
||||
else [
|
||||
(elems.input {
|
||||
type = "checkbox";
|
||||
checked = checked != " ";
|
||||
disabled = true;
|
||||
})
|
||||
content
|
||||
];
|
||||
|
||||
replace = matcher: apply: block:
|
||||
(let
|
||||
|
|
|
@ -133,7 +133,10 @@ in with html; [
|
|||
}))
|
||||
|
||||
(it "renders on / off attrs" ({
|
||||
actual = toString (tag "p" {on = true; off = false;});
|
||||
actual = toString (tag "p" {
|
||||
on = true;
|
||||
off = false;
|
||||
});
|
||||
expected = "<p on></p>";
|
||||
}))
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
path:
|
||||
builtins.trace ("testing " + builtins.baseNameOf path) ''
|
||||
echo
|
||||
echo 'TEST: ${builtins.baseNameOf path}'
|
||||
echo
|
||||
'' + builtins.concatStringsSep "\n" (import path)
|
||||
builtins.trace ("testing " + builtins.baseNameOf path)
|
||||
|
||||
{
|
||||
inherit path;
|
||||
results = (import path);
|
||||
}
|
||||
|
|
|
@ -33,12 +33,9 @@ let
|
|||
success =
|
||||
if throws then (builtins.tryEval actual).success == false else (a == e);
|
||||
|
||||
in if success then ''
|
||||
echo 'it ${msg}'
|
||||
'' else
|
||||
builtins.trace "FAILED ${msg}" (let file = builtins.toFile "value" out;
|
||||
in ''
|
||||
echo FAILED ${msg}
|
||||
echo '${file}'
|
||||
cat '${file}' | jq '.'
|
||||
'')
|
||||
in {
|
||||
inherit success msg;
|
||||
} // (if success then
|
||||
{ }
|
||||
else
|
||||
builtins.trace "FAILED ${msg}" { inherit actual expected; })
|
||||
|
|
|
@ -34,7 +34,7 @@ in with md; [
|
|||
'';
|
||||
expected = {
|
||||
matched = true;
|
||||
block = elems.List ["something"];
|
||||
block = elems.List [ "something" ];
|
||||
};
|
||||
asJSON = true;
|
||||
}))
|
||||
|
@ -46,10 +46,7 @@ in with md; [
|
|||
'';
|
||||
expected = {
|
||||
matched = true;
|
||||
block = elems.List [
|
||||
"something"
|
||||
"something else"
|
||||
];
|
||||
block = elems.List [ "something" "something else" ];
|
||||
};
|
||||
asJSON = true;
|
||||
}))
|
||||
|
@ -62,10 +59,22 @@ in with md; [
|
|||
expected = {
|
||||
matched = true;
|
||||
block = elems.List [
|
||||
[(elems.input {type = "checkbox"; disabled = true; checked = false; } "")
|
||||
"something"]
|
||||
[(elems.input {type = "checkbox"; disabled = true; checked = true; } "")
|
||||
"something else"]
|
||||
[
|
||||
(elems.input {
|
||||
type = "checkbox";
|
||||
disabled = true;
|
||||
checked = false;
|
||||
} "")
|
||||
"something"
|
||||
]
|
||||
[
|
||||
(elems.input {
|
||||
type = "checkbox";
|
||||
disabled = true;
|
||||
checked = true;
|
||||
} "")
|
||||
"something else"
|
||||
]
|
||||
];
|
||||
};
|
||||
asJSON = true;
|
||||
|
@ -77,10 +86,7 @@ in with md; [
|
|||
- something else'';
|
||||
expected = {
|
||||
matched = true;
|
||||
block = elems.List [
|
||||
"something"
|
||||
"something else"
|
||||
];
|
||||
block = elems.List [ "something" "something else" ];
|
||||
};
|
||||
asJSON = true;
|
||||
}))
|
||||
|
|
|
@ -1,5 +1,16 @@
|
|||
pkgs:
|
||||
let test = import ./import.nix;
|
||||
in files:
|
||||
(pkgs.writeShellScriptBin "test"
|
||||
(builtins.concatStringsSep "\n" (map test files)))
|
||||
pkgs: files:
|
||||
let
|
||||
test = import ./import.nix;
|
||||
res = map test files;
|
||||
resFile = builtins.toFile "results" (builtins.toJSON res);
|
||||
filter = ''
|
||||
.[] | {
|
||||
(.path): {
|
||||
failures: [.results | map(select(.success==false))[] | {(.msg): {actual, expected}}],
|
||||
success: .results | map(select(.success) | .msg) | length
|
||||
}
|
||||
}
|
||||
'';
|
||||
in (pkgs.writeShellScriptBin "test" ''
|
||||
cat '${resFile}' | ${pkgs.jq}/bin/jq '${filter}' | ${pkgs.fx}/bin/fx
|
||||
'')
|
||||
|
|
10
testing/watch.nix
Normal file
10
testing/watch.nix
Normal file
|
@ -0,0 +1,10 @@
|
|||
pkgs: cmd: pname:
|
||||
pkgs.writeShellScriptBin "watch" ''
|
||||
while true
|
||||
do
|
||||
${cmd} &
|
||||
${pkgs.inotify-tools}/bin/inotifywait -e modify -r .
|
||||
pkill ${pname}
|
||||
done
|
||||
''
|
||||
|
Loading…
Reference in a new issue