diff options
Diffstat (limited to 'lib/tests')
-rwxr-xr-x | lib/tests/modules.sh | 10 | ||||
-rw-r--r-- | lib/tests/modules/types-unique.nix | 27 |
2 files changed, 37 insertions, 0 deletions
diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index a90ff4ad9a2f..1221ba7143f6 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -406,6 +406,16 @@ checkConfigOutput "{}" config.submodule.a ./emptyValues.nix checkConfigError 'The option .int.a. is used but not defined' config.int.a ./emptyValues.nix checkConfigError 'The option .nonEmptyList.a. is used but not defined' config.nonEmptyList.a ./emptyValues.nix +# types.unique +# requires a single definition +checkConfigError 'The option .examples\.merged. is defined multiple times while it.s expected to be unique' config.examples.merged.a ./types-unique.nix +# user message is printed +checkConfigError 'We require a single definition, because seeing the whole value at once helps us maintain critical invariants of our system.' config.examples.merged.a ./types-unique.nix +# let the inner merge function check the values (on demand) +checkConfigError 'A definition for option .examples\.badLazyType\.a. is not of type .string.' config.examples.badLazyType.a ./types-unique.nix +# overriding still works (unlike option uniqueness) +checkConfigOutput '^"bee"$' config.examples.override.b ./types-unique.nix + ## types.raw checkConfigOutput '^true$' config.unprocessedNestingEvaluates.success ./raw.nix checkConfigOutput "10" config.processedToplevel ./raw.nix diff --git a/lib/tests/modules/types-unique.nix b/lib/tests/modules/types-unique.nix new file mode 100644 index 000000000000..115be0126975 --- /dev/null +++ b/lib/tests/modules/types-unique.nix @@ -0,0 +1,27 @@ +{ lib, ... }: +let + inherit (lib) mkOption types; +in +{ + options.examples = mkOption { + type = types.lazyAttrsOf + (types.unique + { message = "We require a single definition, because seeing the whole value at once helps us maintain critical invariants of our system."; } + (types.attrsOf types.str)); + }; + imports = [ + { examples.merged = { b = "bee"; }; } + { examples.override = lib.mkForce { b = "bee"; }; } + ]; + config.examples = { + merged = { + a = "aye"; + }; + override = { + a = "aye"; + }; + badLazyType = { + a = true; + }; + }; +} |