Unverified Commit b3cf9ce0 authored by Johannes Kirschbauer's avatar Johannes Kirschbauer
Browse files

lib/types.either: add tests for warning in legacy case

parent d4167f57
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -550,6 +550,28 @@ checkConfigOutput '/freeform-submodules.nix"$' config.fooDeclarations.0 ./freefo
checkConfigOutput '^10$' config.free.xxx.foo ./freeform-submodules.nix
checkConfigOutput '^10$' config.free.yyy.bar ./freeform-submodules.nix

# Regression of either, due to freeform not beeing checked previously
checkConfigOutput '^"foo"$' config.either.int ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong.nix
NIX_ABORT_ON_WARN=1 checkConfigError "One or more definitions did not pass the type-check of the \'either\' type" config.either.int ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong.nix
checkConfigOutput '^"foo"$' config.eitherBehindNullor.int ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong.nix
NIX_ABORT_ON_WARN=1 checkConfigError "One or more definitions did not pass the type-check of the \'either\' type" config.eitherBehindNullor.int ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong.nix
checkConfigOutput '^"foo"$' config.oneOf.int ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong.nix
NIX_ABORT_ON_WARN=1 checkConfigError "One or more definitions did not pass the type-check of the \'either\' type" config.oneOf.int ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong.nix
checkConfigOutput '^"foo"$' config.number.str ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong.nix
NIX_ABORT_ON_WARN=1 checkConfigError "One or more definitions did not pass the type-check of the \'either\' type" config.number.str ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong.nix

checkConfigOutput '^42$' config.either.int ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong2.nix
NIX_ABORT_ON_WARN=1 checkConfigError "One or more definitions did not pass the type-check of the \'either\' type" config.either.int ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong2.nix
checkConfigOutput '^42$' config.eitherBehindNullor.int ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong2.nix
NIX_ABORT_ON_WARN=1 checkConfigError "One or more definitions did not pass the type-check of the \'either\' type" config.eitherBehindNullor.int ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong2.nix
checkConfigOutput '^42$' config.oneOf.int ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong2.nix
NIX_ABORT_ON_WARN=1 checkConfigError "One or more definitions did not pass the type-check of the \'either\' type" config.oneOf.int ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong2.nix
checkConfigOutput '^42$' config.number.str ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong2.nix
NIX_ABORT_ON_WARN=1 checkConfigError "One or more definitions did not pass the type-check of the \'either\' type" config.number.str ./freeform-deprecated-malicous.nix ./freeform-deprecated-malicous-wrong2.nix
# Value OK: Fail if a warning is emitted
NIX_ABORT_ON_WARN=1 checkConfigOutput "^42$" config.number.int ./freeform-attrsof-either.nix


## types.anything
# Check that attribute sets are merged recursively
checkConfigOutput '^null$' config.value.foo ./types-anything/nested-attrs.nix
+14 −0
Original line number Diff line number Diff line
{ lib, ... }:
let
  inherit (lib) types mkOption;
in
{
  options.number = mkOption {
    type = types.submodule ({
      freeformType = types.attrsOf (types.either types.int types.int);
    });
    default = {
      int = 42;
    }; # should not emit a warning
  };
}
+18 −0
Original line number Diff line number Diff line
# Obviously wrong typed
{
  config.either = {
    int = "foo";
  };

  config.eitherBehindNullor = {
    int = "foo";
  };

  config.oneOf = {
    int = "foo";
  };

  config.number = {
    str = "foo";
  };
}
+19 −0
Original line number Diff line number Diff line
# freeeformType should have been (attrsOf either)
# This should also print the warning
{
  config.either = {
    int = 42;
  };

  config.eitherBehindNullor = {
    int = 42;
  };

  config.oneOf = {
    int = 42;
  };

  config.number = {
    str = 42;
  };
}
+34 −0
Original line number Diff line number Diff line
{ lib, ... }:
let
  inherit (lib) types mkOption;
in
{
  options.either = mkOption {
    type = types.submodule ({
      freeformType = (types.either types.int types.int);
    });
  };

  options.eitherBehindNullor = mkOption {
    type = types.submodule ({
      freeformType = types.nullOr (types.either types.int types.int);
    });
  };

  options.oneOf = mkOption {
    type = types.submodule ({
      freeformType = (
        types.oneOf [
          types.int
          types.int
        ]
      );
    });
  };

  options.number = mkOption {
    type = types.submodule ({
      freeformType = (types.number); # either int float
    });
  };
}