diff options
author | Alyssa Ross <hi@alyssa.is> | 2022-12-06 19:57:55 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2023-02-08 13:48:30 +0000 |
commit | bf3aadfdd39aa197e18bade671fab6726349ffa4 (patch) | |
tree | 698567af766ed441d757b57a7b21e68d4a342a2b /nixpkgs/pkgs/pkgs-lib/tests | |
parent | f4afc5a01d9539ce09e47494e679c51f80723d07 (diff) | |
parent | 99665eb45f58d959d2cb9e49ddb960c79d596f33 (diff) | |
download | nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.gz nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.bz2 nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.lz nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.xz nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.zst nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.zip |
Merge commit '99665eb45f58d959d2cb9e49ddb960c79d596f33'
Diffstat (limited to 'nixpkgs/pkgs/pkgs-lib/tests')
-rw-r--r-- | nixpkgs/pkgs/pkgs-lib/tests/default.nix | 48 | ||||
-rw-r--r-- | nixpkgs/pkgs/pkgs-lib/tests/formats.nix | 93 |
2 files changed, 131 insertions, 10 deletions
diff --git a/nixpkgs/pkgs/pkgs-lib/tests/default.nix b/nixpkgs/pkgs/pkgs-lib/tests/default.nix index f3549ea9b0f2..ae91e15aa9ef 100644 --- a/nixpkgs/pkgs/pkgs-lib/tests/default.nix +++ b/nixpkgs/pkgs/pkgs-lib/tests/default.nix @@ -1,7 +1,45 @@ # Call nix-build on this file to run all tests in this directory -{ pkgs ? import ../../.. {} }: + +# This produces a link farm derivation with the original attrs +# merged on top of it. +# You can run parts of the "hierarchy" with for example: +# nix-build -A java-properties +# See `structured` below. + +{ pkgs ? import ../../.. { } }: let - formats = import ./formats.nix { inherit pkgs; }; -in pkgs.linkFarm "nixpkgs-pkgs-lib-tests" [ - { name = "formats"; path = import ./formats.nix { inherit pkgs; }; } -] + inherit (pkgs.lib) mapAttrs mapAttrsToList isDerivation mergeAttrs foldl' attrValues recurseIntoAttrs; + + structured = { + formats = import ./formats.nix { inherit pkgs; }; + java-properties = recurseIntoAttrs { + jdk8 = pkgs.callPackage ../formats/java-properties/test { jdk = pkgs.jdk8; }; + jdk11 = pkgs.callPackage ../formats/java-properties/test { jdk = pkgs.jdk11_headless; }; + jdk17 = pkgs.callPackage ../formats/java-properties/test { jdk = pkgs.jdk17_headless; }; + }; + }; + + flatten = prefix: as: + foldl' + mergeAttrs + { } + (attrValues + (mapAttrs + (k: v: + if isDerivation v + then { "${prefix}${k}" = v; } + else if v?recurseForDerivations + then flatten "${prefix}${k}-" (removeAttrs v [ "recurseForDerivations" ]) + else builtins.trace v throw "expected derivation or recurseIntoAttrs") + as + ) + ); +in + +# It has to be a link farm for inclusion in the hydra unstable jobset. +pkgs.linkFarm "pkgs-lib-formats-tests" + (mapAttrsToList + (k: v: { name = k; path = v; }) + (flatten "" structured) + ) +// structured diff --git a/nixpkgs/pkgs/pkgs-lib/tests/formats.nix b/nixpkgs/pkgs/pkgs-lib/tests/formats.nix index 2bc4e407fe75..80df247f7b6a 100644 --- a/nixpkgs/pkgs/pkgs-lib/tests/formats.nix +++ b/nixpkgs/pkgs/pkgs-lib/tests/formats.nix @@ -9,13 +9,20 @@ let let formatSet = format args; config = formatSet.type.merge [] (imap1 (n: def: { - value = def; + # We check the input values, so that + # - we don't write nonsensical tests that will impede progress + # - the test author has a slightly more realistic view of the + # final format during development. + value = lib.throwIfNot (formatSet.type.check def) (builtins.trace def "definition does not pass the type's check function") def; file = "def${toString n}"; }) [ 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 @@ -140,6 +147,51 @@ in runBuildTests { ''; }; + testKeyValueAtoms = { + drv = evalFormat formats.keyValue {} { + bool = true; + int = 10; + float = 3.141; + str = "string"; + }; + expected = '' + bool=true + float=3.141000 + int=10 + str=string + ''; + }; + + testKeyValueDuplicateKeys = { + drv = evalFormat formats.keyValue { listsAsDuplicateKeys = true; } { + bar = [ null true "test" 1.2 10 ]; + baz = false; + qux = "qux"; + }; + expected = '' + bar=null + bar=true + bar=test + bar=1.200000 + bar=10 + baz=false + qux=qux + ''; + }; + + testKeyValueListToValue = { + drv = evalFormat formats.keyValue { listToValue = concatMapStringsSep ", " (generators.mkValueStringDefault {}); } { + bar = [ null true "test" 1.2 10 ]; + baz = false; + qux = "qux"; + }; + expected = '' + bar=null, true, test, 1.200000, 10 + baz=false + qux=qux + ''; + }; + testTomlAtoms = { drv = evalFormat formats.toml {} { false = false; @@ -162,10 +214,41 @@ in runBuildTests { [attrs] foo = "foo" - [level1] - [level1.level2] [level1.level2.level3] level4 = "deep" ''; }; + + # 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"; + # # 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 + "الجبر" = "أكثر من مجرد أرقام"; + }; + expected = '' + # 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 + ''; + }; } |