166 lines
3.7 KiB
Nix
166 lines
3.7 KiB
Nix
|
let
|
||
|
lib = import ./..;
|
||
|
|
||
|
inherit (lib)
|
||
|
fakeHash
|
||
|
fakeSha256
|
||
|
fakeSha512
|
||
|
flip
|
||
|
functionArgs
|
||
|
runTests
|
||
|
;
|
||
|
inherit (lib.fetchers) normalizeHash withNormalizedHash;
|
||
|
|
||
|
testingThrow = expr: {
|
||
|
expr = with builtins; tryEval (seq expr "didn't throw");
|
||
|
expected = {
|
||
|
success = false;
|
||
|
value = false;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
# hashes of empty
|
||
|
sri256 = "sha256-d6xi4mKdjkX2JFicDIv5niSzpyI0m/Hnm8GGAIU04kY=";
|
||
|
sri512 = "sha512-AXFyVo7jiZ5we10fxZ5E9qfPjSfqkizY2apCzORKFVYZaNhCIVbooY+J4cYST00ztLf0EjivIBPPdtIYFUMfzQ==";
|
||
|
|
||
|
unionOfDisjoints = lib.foldl lib.attrsets.unionOfDisjoint { };
|
||
|
|
||
|
genTests = n: f: {
|
||
|
"test${n}AlreadyNormalized" = {
|
||
|
expr = f { } {
|
||
|
outputHash = "";
|
||
|
outputHashAlgo = "md42";
|
||
|
};
|
||
|
expected = {
|
||
|
outputHash = "";
|
||
|
outputHashAlgo = "md42";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
"test${n}EmptySha256" = {
|
||
|
expr = f { } { sha256 = ""; };
|
||
|
expected = {
|
||
|
outputHash = fakeSha256;
|
||
|
outputHashAlgo = "sha256";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
"test${n}EmptySha512" = {
|
||
|
expr = f { hashTypes = [ "sha512" ]; } { sha512 = ""; };
|
||
|
expected = {
|
||
|
outputHash = fakeSha512;
|
||
|
outputHashAlgo = "sha512";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
"test${n}EmptyHash" = {
|
||
|
expr = f { } { hash = ""; };
|
||
|
expected = {
|
||
|
outputHash = fakeHash;
|
||
|
outputHashAlgo = null;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
"test${n}Sri256" = {
|
||
|
expr = f { } { hash = sri256; };
|
||
|
expected = {
|
||
|
outputHash = sri256;
|
||
|
outputHashAlgo = null;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
"test${n}Sri512" = {
|
||
|
expr = f { } { hash = sri512; };
|
||
|
expected = {
|
||
|
outputHash = sri512;
|
||
|
outputHashAlgo = null;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
"test${n}PreservesAttrs" = {
|
||
|
expr = f { } {
|
||
|
hash = "aaaa";
|
||
|
destination = "Earth";
|
||
|
};
|
||
|
expected = {
|
||
|
outputHash = "aaaa";
|
||
|
outputHashAlgo = null;
|
||
|
destination = "Earth";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
"test${n}RejectsSha1ByDefault" = testingThrow (f { } { sha1 = ""; });
|
||
|
"test${n}RejectsSha512ByDefault" = testingThrow (f { } { sha512 = ""; });
|
||
|
|
||
|
"test${n}ThrowsOnMissing" = testingThrow (f { } { gibi = false; });
|
||
|
};
|
||
|
in
|
||
|
runTests (unionOfDisjoints [
|
||
|
(genTests "NormalizeHash" normalizeHash)
|
||
|
(genTests "WithNormalized" (
|
||
|
flip withNormalizedHash ({ outputHash, outputHashAlgo, ... }@args: args)
|
||
|
))
|
||
|
{
|
||
|
testNormalizeNotRequiredEquivalent = {
|
||
|
expr = normalizeHash { required = false; } {
|
||
|
hash = "";
|
||
|
prof = "shadoko";
|
||
|
};
|
||
|
expected = normalizeHash { } {
|
||
|
hash = "";
|
||
|
prof = "shadoko";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
testNormalizeNotRequiredPassthru = {
|
||
|
expr = normalizeHash { required = false; } { "ga bu" = "zo meu"; };
|
||
|
expected."ga bu" = "zo meu";
|
||
|
};
|
||
|
|
||
|
testOptionalArg = {
|
||
|
expr = withNormalizedHash { } (
|
||
|
{
|
||
|
outputHash ? "",
|
||
|
outputHashAlgo ? null,
|
||
|
...
|
||
|
}@args:
|
||
|
args
|
||
|
) { author = "Jacques Rouxel"; };
|
||
|
expected.author = "Jacques Rouxel";
|
||
|
};
|
||
|
|
||
|
testOptionalArgMetadata = {
|
||
|
expr = functionArgs (
|
||
|
withNormalizedHash { } (
|
||
|
{
|
||
|
outputHash ? "",
|
||
|
outputHashAlgo ? null,
|
||
|
}:
|
||
|
{ }
|
||
|
)
|
||
|
);
|
||
|
expected.hash = true;
|
||
|
};
|
||
|
|
||
|
testPreservesArgsMetadata = {
|
||
|
expr = functionArgs (
|
||
|
withNormalizedHash { } (
|
||
|
{
|
||
|
outputHash,
|
||
|
outputHashAlgo,
|
||
|
pumping ? true,
|
||
|
}:
|
||
|
{ }
|
||
|
)
|
||
|
);
|
||
|
expected = {
|
||
|
hash = false;
|
||
|
pumping = true;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
testRejectsMissingHashArg = testingThrow (withNormalizedHash { } ({ outputHashAlgo }: { }));
|
||
|
testRejectsMissingAlgoArg = testingThrow (withNormalizedHash { } ({ outputHash }: { }));
|
||
|
}
|
||
|
])
|