diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/generators.nix | 2 | ||||
-rw-r--r-- | lib/tests/misc.nix | 24 | ||||
-rw-r--r-- | lib/tests/test-to-plist-expected.plist | 46 |
3 files changed, 72 insertions, 0 deletions
diff --git a/lib/generators.nix b/lib/generators.nix index c46ecca58c68f..aace53e2f7509 100644 --- a/lib/generators.nix +++ b/lib/generators.nix @@ -355,6 +355,7 @@ rec { # PLIST handling toPlist = {}: v: let isFloat = builtins.isFloat or (x: false); + isPath = x: builtins.typeOf x == "path"; expr = ind: x: with builtins; if x == null then "" else if isBool x then bool ind x else @@ -362,6 +363,7 @@ rec { if isString x then str ind x else if isList x then list ind x else if isAttrs x then attrs ind x else + if isPath x then str ind (toString x) else if isFloat x then float ind x else abort "generators.toPlist: should never happen (v = ${v})"; diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix index ea3548b9514ed..231f19c513eb2 100644 --- a/lib/tests/misc.nix +++ b/lib/tests/misc.nix @@ -919,6 +919,30 @@ runTests { expected = "«foo»"; }; + testToPlist = + let + deriv = derivation { name = "test"; builder = "/bin/sh"; system = "aarch64-linux"; }; + in { + expr = mapAttrs (const (generators.toPlist { })) { + value = { + nested.values = rec { + int = 42; + float = 0.1337; + bool = true; + emptystring = ""; + string = "fn\${o}\"r\\d"; + newlinestring = "\n"; + path = /. + "/foo"; + null_ = null; + list = [ 3 4 "test" ]; + emptylist = []; + attrs = { foo = null; "foo b/ar" = "baz"; }; + emptyattrs = {}; + }; + }; + }; + expected = { value = builtins.readFile ./test-to-plist-expected.plist; }; + }; testToLuaEmptyAttrSet = { expr = generators.toLua {} {}; diff --git a/lib/tests/test-to-plist-expected.plist b/lib/tests/test-to-plist-expected.plist new file mode 100644 index 0000000000000..df0528a60767b --- /dev/null +++ b/lib/tests/test-to-plist-expected.plist @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>nested</key> + <dict> + <key>values</key> + <dict> + <key>attrs</key> + <dict> + <key>foo b/ar</key> + <string>baz</string> + </dict> + <key>bool</key> + <true/> + <key>emptyattrs</key> + <dict> + + </dict> + <key>emptylist</key> + <array> + + </array> + <key>emptystring</key> + <string></string> + <key>float</key> + <real>0.133700</real> + <key>int</key> + <integer>42</integer> + <key>list</key> + <array> + <integer>3</integer> + <integer>4</integer> + <string>test</string> + </array> + <key>newlinestring</key> + <string> +</string> + <key>path</key> + <string>/foo</string> + <key>string</key> + <string>fn${o}"r\d</string> + </dict> + </dict> +</dict> +</plist> \ No newline at end of file |