tix/testing/it.nix

52 lines
961 B
Nix

msg: {
actual,
expected ? {},
asString ? false,
asJSON ? false,
removeDunders ? false,
safeToPrint ? true,
throws ? false,
}: let
preProcess = v:
if removeDunders
then undunder v
else if asString
then toString v
else if asJSON
then builtins.toJSON v
else v;
a = preProcess actual;
e = preProcess expected;
undunder = v:
if builtins.isAttrs v
then builtins.removeAttrs v ["__toString" "__functor"]
else v;
out =
if safeToPrint
then
builtins.toJSON (undunder (
if throws
then (builtins.tryEval actual).value
else {
inherit actual expected;
}
))
else ''{"msg": "cannot be stringified ):"}'';
success =
if throws
then (builtins.tryEval actual).success == false
else (a == e);
in
{
inherit success msg;
}
// (
if success
then {}
else builtins.trace "FAILED ${msg}" {inherit actual expected;}
)