Something went wrong. Try again.
lol
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154{ lib }:let p = import ../../stdenv/generic/problems.nix { inherit lib; };
genHandlerTest = let slowReference = config: package: name: kind: # Try to find an explicit handler (config.problems.handlers.${package} or { }).${name} # Fall back, iterating through the matchers or (lib.pipe config.problems.matchers [ # Find matches (lib.filter ( matcher: (matcher.name != null -> name == matcher.name) && (matcher.kind != null -> kind == matcher.kind) && (matcher.package != null -> package == matcher.package) )) # Extract handler level (map (matcher: matcher.handler)) # Take the strongest matched handler level (lib.foldl' p.handlers.max "ignore") ]);
genValue = f: map ( package: map ( name: map (kind: f package name kind) [ "k1" "k2" "k3" ] ) [ "n1" "n2" "n3" ] ) [ "p1" "p2" "p3" ];
in v: { expr = genValue (p.genHandlerSwitch { problems = v; }).handlerForProblem; expected = genValue (slowReference { problems = v; }); };inlib.runTests { testHandlersLessThan = let levels = p.handlers.levels; slowReference = a: b: lib.lists.findFirstIndex (v: v == a) (abort "Shouldn't happen") levels < lib.lists.findFirstIndex (v: v == b) (abort "Shouldn't happen") levels;
genValue = f: lib.genList ( i: lib.genList (j: f (lib.elemAt levels i) (lib.elemAt levels j)) (lib.length levels) ) (lib.length levels); in { expr = genValue p.handlers.lessThan; expected = genValue slowReference; };
testHandlerEmpty = genHandlerTest { matchers = [ ]; handlers = { }; };
testHandlerNameSpecificHandlers = genHandlerTest { matchers = [ ]; handlers.p1.n1 = "error"; handlers.p1.n2 = "warn"; handlers.p1.n3 = "ignore"; };
testHandlerPackageSpecificHandlers = genHandlerTest { matchers = [ ]; handlers.p1.n1 = "error"; handlers.p2.n1 = "warn"; handlers.p3.n1 = "ignore"; };
testHandlersOverrideMatchers = genHandlerTest { matchers = [ { package = "p1"; name = "n1"; kind = null; handler = "error"; } ]; handlers.p1.n1 = "warn"; };
testMatchersDefault = genHandlerTest { matchers = [ # Everything should warn by default { package = null; name = null; kind = null; handler = "warn"; } ]; handlers = { }; };
testMatchersComplicated = genHandlerTest { matchers = [ { package = "p1"; name = null; kind = null; handler = "warn"; } { package = "p1"; name = "n1"; kind = null; handler = "error"; } { package = "p1"; name = null; kind = "k1"; handler = "error"; } { package = "p1"; name = "n2"; kind = "k2"; handler = "error"; } ]; handlers = { }; };}