pkgs-lib: Add tests for formats

This commit is contained in:
Silvan Mosberger 2020-03-26 02:56:07 +01:00
parent b6c540a87c
commit 9c1565a042
No known key found for this signature in database
GPG key ID: E8F1E9EAD284E17D
2 changed files with 159 additions and 0 deletions

View file

@ -1,5 +1,7 @@
# Call nix-build on this file to run all tests in this directory
{ pkgs ? import ../../.. {} }:
let
formats = import ./formats.nix { inherit pkgs; };
in pkgs.linkFarm "nixpkgs-pkgs-lib-tests" [
{ name = "formats"; path = import ./formats.nix { inherit pkgs; }; }
]

View file

@ -0,0 +1,157 @@
{ pkgs }:
let
inherit (pkgs) lib formats;
in
with lib;
let
evalFormat = format: args: def:
let
formatSet = format args;
config = formatSet.type.merge [] (imap1 (n: def: {
value = def;
file = "def${toString n}";
}) [ def ]);
in formatSet.generate "test-format-file" config;
runBuildTest = name: { drv, expected }: pkgs.runCommandNoCC name {} ''
if diff ${drv} ${builtins.toFile "expected" expected}; then
touch $out
else
echo "Got: $(cat ${drv})"
echo "Should be: ${expected}"
exit 1
fi
'';
runBuildTests = tests: pkgs.linkFarm "nixpkgs-pkgs-lib-format-tests" (mapAttrsToList (name: value: { inherit name; path = runBuildTest name value; }) (filterAttrs (name: value: value != null) tests));
in runBuildTests {
testJsonAtoms = {
drv = evalFormat formats.json {} {
null = null;
false = false;
true = true;
int = 10;
float = 3.141;
str = "foo";
attrs.foo = null;
list = [ null null ];
};
expected = ''
{
"attrs": {
"foo": null
},
"false": false,
"float": 3.141,
"int": 10,
"list": [
null,
null
],
"null": null,
"str": "foo",
"true": true
}
'';
};
testYamlAtoms = {
drv = evalFormat formats.yaml {} {
null = null;
false = false;
true = true;
float = 3.141;
str = "foo";
attrs.foo = null;
list = [ null null ];
};
expected = ''
{
"attrs": {
"foo": null
},
"false": false,
"float": 3.141,
"list": [
null,
null
],
"null": null,
"str": "foo",
"true": true
}
'';
};
testIniAtoms = {
drv = evalFormat formats.ini {} {
foo = {
bool = true;
int = 10;
float = 3.141;
str = "string";
};
};
expected = ''
[foo]
bool=true
float=3.141000
int=10
str=string
'';
};
testIniDuplicateKeys = {
drv = evalFormat formats.ini { listsAsDuplicateKeys = true; } {
foo = {
bar = [ null true "test" 1.2 10 ];
baz = false;
qux = "qux";
};
};
expected = ''
[foo]
bar=null
bar=true
bar=test
bar=1.200000
bar=10
baz=false
qux=qux
'';
};
testTomlAtoms = {
drv = evalFormat formats.toml {} {
false = false;
true = true;
int = 10;
float = 3.141;
str = "foo";
attrs.foo = "foo";
list = [ 1 2 ];
level1.level2.level3.level4 = "deep";
};
expected = ''
false = false
float = 3.141
int = 10
list = [1, 2]
str = "foo"
true = true
[attrs]
foo = "foo"
[level1]
[level1.level2]
[level1.level2.level3]
level4 = "deep"
'';
};
}