|
|
|
@@ -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" |
|
|
|
''; |
|
|
|
}; |
|
|
|
} |