lib/tests: Add tests for freeform modules

+21
lib/tests/modules.sh
···
checkConfigError 'The option value .* in .* is not of type .*' \
config.value ./declare-int-unsigned-value.nix ./define-value-list.nix ./define-value-int-positive.nix
+
## Freeform modules
+
# Assigning without a declared option should work
+
checkConfigOutput 24 config.value ./freeform-attrsOf.nix ./define-value-string.nix
+
# but only if the type matches
+
checkConfigError 'The option value .* in .* is not of type .*' config.value ./freeform-attrsOf.nix ./define-value-list.nix
+
# and properties should be applied
+
checkConfigOutput yes config.value ./freeform-attrsOf.nix ./define-value-string-properties.nix
+
# Options should still be declarable, and be able to have a type that doesn't match the freeform type
+
checkConfigOutput false config.enable ./freeform-attrsOf.nix ./define-value-string.nix ./declare-enable.nix
+
checkConfigOutput 24 config.value ./freeform-attrsOf.nix ./define-value-string.nix ./declare-enable.nix
+
# and this should work too with nested values
+
checkConfigOutput false config.nest.foo ./freeform-attrsOf.nix ./freeform-nested.nix
+
checkConfigOutput bar config.nest.bar ./freeform-attrsOf.nix ./freeform-nested.nix
+
# Check whether a declared option can depend on an freeform-typed one
+
checkConfigOutput null config.foo ./freeform-attrsOf.nix ./freeform-str-dep-unstr.nix
+
checkConfigOutput 24 config.foo ./freeform-attrsOf.nix ./freeform-str-dep-unstr.nix ./define-value-string.nix
+
# Check whether an freeform-typed value can depend on a declared option, this can only work with lazyAttrsOf
+
checkConfigError 'infinite recursion encountered' config.foo ./freeform-attrsOf.nix ./freeform-unstr-dep-str.nix
+
checkConfigError 'The option .* is used but not defined' config.foo ./freeform-lazyAttrsOf.nix ./freeform-unstr-dep-str.nix
+
checkConfigOutput 24 config.foo ./freeform-lazyAttrsOf.nix ./freeform-unstr-dep-str.nix ./define-value-string.nix
+
cat <<EOF
====== module tests ======
$pass Pass
+12
lib/tests/modules/define-value-string-properties.nix
···
+
{ lib, ... }: {
+
+
imports = [{
+
value = lib.mkDefault "def";
+
}];
+
+
value = lib.mkMerge [
+
(lib.mkIf false "nope")
+
"yes"
+
];
+
+
}
+3
lib/tests/modules/freeform-attrsOf.nix
···
+
{ lib, ... }: {
+
config._module.freeformType = with lib.types; attrsOf (either str (attrsOf str));
+
}
+3
lib/tests/modules/freeform-lazyAttrsOf.nix
···
+
{ lib, ... }: {
+
config._module.freeformType = with lib.types; lazyAttrsOf (either str (lazyAttrsOf str));
+
}
+7
lib/tests/modules/freeform-nested.nix
···
+
{ lib, ... }: {
+
options.nest.foo = lib.mkOption {
+
type = lib.types.bool;
+
default = false;
+
};
+
config.nest.bar = "bar";
+
}
+8
lib/tests/modules/freeform-str-dep-unstr.nix
···
+
{ lib, config, ... }: {
+
options.foo = lib.mkOption {
+
type = lib.types.nullOr lib.types.str;
+
default = null;
+
};
+
+
config.foo = lib.mkIf (config ? value) config.value;
+
}
+8
lib/tests/modules/freeform-unstr-dep-str.nix
···
+
{ lib, config, ... }: {
+
options.value = lib.mkOption {
+
type = lib.types.nullOr lib.types.str;
+
default = null;
+
};
+
+
config.foo = lib.mkIf (config.value != null) config.value;
+
}