{ fetchurl , formats , glibcLocales , jdk , lib , stdenv }: # 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. 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" ]; # On Linux, this can be C.UTF-8, but darwin + zulu requires en_US.UTF-8 LANG = "en_US.UTF-8"; buildPhase = '' javac Main.java ''; doCheck = true; checkPhase = '' cat -v $properties java Main $properties >actual diff -U3 $expectedPath actual ''; installPhase = "touch $out"; }