summaryrefslogtreecommitdiffstats
path: root/pkgs/pkgs-lib
diff options
context:
space:
mode:
authorRobert Hensing <roberth@users.noreply.github.com>2022-04-25 16:29:48 +0200
committerGitHub <noreply@github.com>2022-04-25 16:29:48 +0200
commit3c10819ecf98d97431042f7d056afc3c2261dc61 (patch)
treedd7add26671ba75fd4dcc4416d2eaf4282395072 /pkgs/pkgs-lib
parente4636c2e871c54c541debd3e51df3e91da231662 (diff)
parent62d781f09be7bc526e89a6b9bb7ed432dc33df15 (diff)
Merge pull request #167172 from hercules-ci/javaProperties-type-coercions
`formats.javaProperties`: add type coercions
Diffstat (limited to 'pkgs/pkgs-lib')
-rw-r--r--pkgs/pkgs-lib/formats/java-properties/default.nix22
-rw-r--r--pkgs/pkgs-lib/formats/java-properties/test/default.nix9
-rw-r--r--pkgs/pkgs-lib/tests/formats.nix25
3 files changed, 49 insertions, 7 deletions
diff --git a/pkgs/pkgs-lib/formats/java-properties/default.nix b/pkgs/pkgs-lib/formats/java-properties/default.nix
index 6ac56bff4bf6..d3a4761f0f80 100644
--- a/pkgs/pkgs-lib/formats/java-properties/default.nix
+++ b/pkgs/pkgs-lib/formats/java-properties/default.nix
@@ -1,6 +1,10 @@
{ lib, pkgs }:
+let
+ inherit (lib) types;
+ inherit (types) attrsOf oneOf coercedTo str bool int float package;
+in
{
- javaProperties = { comment ? "Generated with Nix" }: {
+ javaProperties = { comment ? "Generated with Nix", boolToString ? lib.boolToString }: {
# Design note:
# A nested representation of inevitably leads to bad UX:
@@ -25,7 +29,21 @@
# We _can_ choose to support hierarchical config files
# via nested attrsets, but the module author should
# make sure that problem (2) does not occur.
- type = lib.types.attrsOf lib.types.str;
+ type = let
+ elemType =
+ oneOf ([
+ # `package` isn't generalized to `path` because path values
+ # are ambiguous. Are they host path strings (toString /foo/bar)
+ # or should they be added to the store? ("${/foo/bar}")
+ # The user must decide.
+ (coercedTo package toString str)
+
+ (coercedTo bool boolToString str)
+ (coercedTo int toString str)
+ (coercedTo float toString str)
+ ])
+ // { description = "string, package, bool, int or float"; };
+ in attrsOf elemType;
generate = name: value:
pkgs.runCommandLocal name
diff --git a/pkgs/pkgs-lib/formats/java-properties/test/default.nix b/pkgs/pkgs-lib/formats/java-properties/test/default.nix
index 4b3845c10296..4a51179d1c86 100644
--- a/pkgs/pkgs-lib/formats/java-properties/test/default.nix
+++ b/pkgs/pkgs-lib/formats/java-properties/test/default.nix
@@ -5,6 +5,12 @@
, 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;
@@ -71,7 +77,8 @@ stdenv.mkDerivation {
src = lib.sourceByRegex ./. [
".*\.java"
];
- LANG = "C.UTF-8";
+ # 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
'';
diff --git a/pkgs/pkgs-lib/tests/formats.nix b/pkgs/pkgs-lib/tests/formats.nix
index aa51e2c5842b..dba7f981cbd9 100644
--- a/pkgs/pkgs-lib/tests/formats.nix
+++ b/pkgs/pkgs-lib/tests/formats.nix
@@ -18,8 +18,11 @@ let
}) [ def ]);
in formatSet.generate "test-format-file" config;
- runBuildTest = name: { drv, expected }: pkgs.runCommand name {} ''
- if diff -u '${builtins.toFile "expected" expected}' '${drv}'; then
+ runBuildTest = name: { drv, expected }: pkgs.runCommand name {
+ passAsFile = ["expected"];
+ inherit expected drv;
+ } ''
+ if diff -u "$expectedPath" "$drv"; then
touch "$out"
else
echo
@@ -171,11 +174,21 @@ in runBuildTests {
'';
};
- # See also java-properties/default.nix for more complete tests
+ # This test is responsible for
+ # 1. testing type coercions
+ # 2. providing a more readable example test
+ # Whereas java-properties/default.nix tests the low level escaping, etc.
testJavaProperties = {
drv = evalFormat formats.javaProperties {} {
+ floaty = 3.1415;
+ tautologies = true;
+ contradictions = false;
foo = "bar";
- "1" = "2";
+ # # Disallowed at eval time, because it's ambiguous:
+ # # add to store or convert to string?
+ # root = /root;
+ "1" = 2;
+ package = pkgs.hello;
"ütf 8" = "dûh";
# NB: Some editors (vscode) show this _whole_ line in right-to-left order
"الجبر" = "أكثر من مجرد أرقام";
@@ -184,7 +197,11 @@ in runBuildTests {
# Generated with Nix
1 = 2
+ contradictions = false
+ floaty = 3.141500
foo = bar
+ package = ${pkgs.hello}
+ tautologies = true
\u00fctf\ 8 = d\u00fbh
\u0627\u0644\u062c\u0628\u0631 = \u0623\u0643\u062b\u0631 \u0645\u0646 \u0645\u062c\u0631\u062f \u0623\u0631\u0642\u0627\u0645
'';