From 72bd4bbb58f6867a00af2a0ddaae2d601c1ee2c7 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Fri, 8 Dec 2023 22:59:40 +0100 Subject: lib.attrsets.longestValidPathPrefix: init Allows finding the most specific path that exists. This is useful for error messages relating to attribute paths. --- lib/tests/misc.nix | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'lib/tests/misc.nix') diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix index 608af656d02c0..b97f080cca3a8 100644 --- a/lib/tests/misc.nix +++ b/lib/tests/misc.nix @@ -697,6 +697,46 @@ runTests { expected = false; }; + testLongestValidPathPrefix_empty_empty = { + expr = attrsets.longestValidPathPrefix [ ] { }; + expected = [ ]; + }; + + testLongestValidPathPrefix_empty_nonStrict = { + expr = attrsets.longestValidPathPrefix [ ] (throw "do not use"); + expected = [ ]; + }; + + testLongestValidPathPrefix_zero = { + expr = attrsets.longestValidPathPrefix [ "a" (throw "do not use") ] { d = null; }; + expected = [ ]; + }; + + testLongestValidPathPrefix_zero_b = { + expr = attrsets.longestValidPathPrefix [ "z" "z" ] "remarkably harmonious"; + expected = [ ]; + }; + + testLongestValidPathPrefix_one = { + expr = attrsets.longestValidPathPrefix [ "a" "b" "c" ] { a = null; }; + expected = [ "a" ]; + }; + + testLongestValidPathPrefix_two = { + expr = attrsets.longestValidPathPrefix [ "a" "b" "c" ] { a.b = null; }; + expected = [ "a" "b" ]; + }; + + testLongestValidPathPrefix_three = { + expr = attrsets.longestValidPathPrefix [ "a" "b" "c" ] { a.b.c = null; }; + expected = [ "a" "b" "c" ]; + }; + + testLongestValidPathPrefix_three_extra = { + expr = attrsets.longestValidPathPrefix [ "a" "b" "c" ] { a.b.c.d = throw "nope"; }; + expected = [ "a" "b" "c" ]; + }; + testFindFirstIndexExample1 = { expr = lists.findFirstIndex (x: x > 3) (abort "index found, so a default must not be evaluated") [ 1 6 4 ]; expected = 1; -- cgit 1.4.1