2022-03-28 06:51:09 +00:00
|
|
|
|
{ fetchurl
|
|
|
|
|
, formats
|
|
|
|
|
, glibcLocales
|
|
|
|
|
, jdk
|
|
|
|
|
, lib
|
|
|
|
|
, stdenv
|
|
|
|
|
}:
|
2022-04-04 12:20:53 +00:00
|
|
|
|
|
|
|
|
|
# This test primarily tests correct escaping.
|
|
|
|
|
# See also testJavaProperties in
|
|
|
|
|
# pkgs/pkgs-lib/tests/formats.nix, which tests
|
|
|
|
|
# type coercions and is a bit easier to read.
|
|
|
|
|
|
2022-03-28 06:51:09 +00:00
|
|
|
|
let
|
|
|
|
|
inherit (lib) concatStrings attrValues mapAttrs;
|
|
|
|
|
|
|
|
|
|
javaProperties = formats.javaProperties { };
|
|
|
|
|
|
|
|
|
|
input = {
|
|
|
|
|
foo = "bar";
|
|
|
|
|
"empty value" = "";
|
|
|
|
|
"typical.dot.syntax" = "com.sun.awt";
|
|
|
|
|
"" = "empty key's value";
|
|
|
|
|
"1" = "2 3";
|
|
|
|
|
"#" = "not a comment # still not";
|
|
|
|
|
"!" = "not a comment!";
|
|
|
|
|
"!a" = "still not! a comment";
|
|
|
|
|
"!b" = "still not ! a comment";
|
|
|
|
|
"dos paths" = "C:\\Program Files\\Nix For Windows\\nix.exe";
|
|
|
|
|
"a \t\nb" = " c";
|
|
|
|
|
"angry \t\nkey" = ''
|
|
|
|
|
multi
|
|
|
|
|
${"\tline\r"}
|
|
|
|
|
space-
|
|
|
|
|
indented
|
|
|
|
|
trailing-space${" "}
|
|
|
|
|
trailing-space${" "}
|
|
|
|
|
value
|
|
|
|
|
'';
|
|
|
|
|
"this=not" = "bad";
|
|
|
|
|
"nor = this" = "bad";
|
|
|
|
|
"all stuff" = "foo = bar";
|
|
|
|
|
"unicode big brain" = "e = mc□";
|
|
|
|
|
"ütf-8" = "dûh";
|
|
|
|
|
# NB: Some editors (vscode) show this _whole_ line in right-to-left order
|
|
|
|
|
"الجبر" = "أكثر من مجرد أرقام";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
in
|
|
|
|
|
stdenv.mkDerivation {
|
|
|
|
|
name = "pkgs.formats.javaProperties-test-${jdk.name}";
|
|
|
|
|
nativeBuildInputs = [
|
|
|
|
|
jdk
|
|
|
|
|
glibcLocales
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
# technically should go through the type.merge first, but that's tested
|
|
|
|
|
# in tests/formats.nix.
|
|
|
|
|
properties = javaProperties.generate "example.properties" input;
|
|
|
|
|
|
|
|
|
|
# Expected output as printed by Main.java
|
|
|
|
|
passAsFile = [ "expected" ];
|
|
|
|
|
expected = concatStrings (attrValues (
|
|
|
|
|
mapAttrs
|
|
|
|
|
(key: value:
|
|
|
|
|
''
|
|
|
|
|
KEY
|
|
|
|
|
${key}
|
|
|
|
|
VALUE
|
|
|
|
|
${value}
|
|
|
|
|
|
|
|
|
|
''
|
|
|
|
|
)
|
|
|
|
|
input
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
src = lib.sourceByRegex ./. [
|
|
|
|
|
".*\.java"
|
|
|
|
|
];
|
2022-04-04 12:41:40 +00:00
|
|
|
|
# On Linux, this can be C.UTF-8, but darwin + zulu requires en_US.UTF-8
|
|
|
|
|
LANG = "en_US.UTF-8";
|
2022-03-28 06:51:09 +00:00
|
|
|
|
buildPhase = ''
|
|
|
|
|
javac Main.java
|
|
|
|
|
'';
|
|
|
|
|
doCheck = true;
|
|
|
|
|
checkPhase = ''
|
|
|
|
|
cat -v $properties
|
|
|
|
|
java Main $properties >actual
|
|
|
|
|
diff -U3 $expectedPath actual
|
|
|
|
|
'';
|
|
|
|
|
installPhase = "touch $out";
|
|
|
|
|
}
|