mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-22 05:31:22 +00:00
b8336c2b8a
Allows coercing lists to values. E.g. formats.ini { listToValue = lib.concatMapStringsSep ", " (lib.generators.mkValueStringDefault {}); }
172 lines
3.3 KiB
Nix
172 lines
3.3 KiB
Nix
{ 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 -u '${builtins.toFile "expected" expected}' '${drv}'; then
|
|
touch "$out"
|
|
else
|
|
echo
|
|
echo "Got different values than expected; diff above."
|
|
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
|
|
'';
|
|
};
|
|
|
|
testIniListToValue = {
|
|
drv = evalFormat formats.ini { listToValue = concatMapStringsSep ", " (generators.mkValueStringDefault {}); } {
|
|
foo = {
|
|
bar = [ null true "test" 1.2 10 ];
|
|
baz = false;
|
|
qux = "qux";
|
|
};
|
|
};
|
|
expected = ''
|
|
[foo]
|
|
bar=null, true, test, 1.200000, 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"
|
|
'';
|
|
};
|
|
}
|