diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-09-15 22:10:44 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-09-15 22:10:44 +0200 |
| commit | 6b38d302daa54140e4e26ad903297a1bba0cbd41 (patch) | |
| tree | 2f32472e751de41f8fbbbeed739f0e66a4cb5211 /internal/cond/eval_test.go | |
| parent | bbc9b103acac96b83b150b81f2effe1b65c3f8a2 (diff) | |
| download | krino-6b38d302daa54140e4e26ad903297a1bba0cbd41.tar.gz krino-6b38d302daa54140e4e26ad903297a1bba0cbd41.zip | |
a failed duplicate lookup is unknown, like unreadable content
Diffstat (limited to 'internal/cond/eval_test.go')
| -rw-r--r-- | internal/cond/eval_test.go | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/internal/cond/eval_test.go b/internal/cond/eval_test.go index 9352b82..7ebe038 100644 --- a/internal/cond/eval_test.go +++ b/internal/cond/eval_test.go @@ -24,6 +24,7 @@ type fake struct { matchedUnknown bool dupOrig string dupOK bool + dupErr error contentCalls int } @@ -51,7 +52,7 @@ func (f *fake) ContentContains(opt Options, keywords []string) (int, error) { } return -1, nil } -func (f *fake) Duplicate(dirs []string) (string, bool, error) { return f.dupOrig, f.dupOK, nil } +func (f *fake) Duplicate(dirs []string) (string, bool, error) { return f.dupOrig, f.dupOK, f.dupErr } func eval(t *testing.T, src string, opt Options, f Facts) Result { t.Helper() @@ -300,3 +301,29 @@ func TestMatchedIsUnknownAfterAnUnknownRule(t *testing.T) { t.Errorf("(matched) after a rule that did match: %+v, want true", r) } } + +// TestFailedDuplicateLookupIsUnknown: a duplicate test whose lookup fails is +// unknown, like unreadable content, and says why (plan 12). +func TestFailedDuplicateLookupIsUnknown(t *testing.T) { + f := &fake{name: "a.pdf", dupErr: errors.New("~/dl/a.pdf: open: permission denied")} + for _, c := range []struct { + src string + match, unreadable bool + }{ + {`(duplicate)`, false, true}, + {`(not (duplicate))`, false, true}, + {`(and (duplicate) (type txt))`, false, false}, + } { + r := eval(t, c.src, Options{}, f) + if r.Match != c.match || r.Unreadable != c.unreadable { + t.Errorf("%s: Match %v Unreadable %v; want %v, %v", c.src, r.Match, r.Unreadable, c.match, c.unreadable) + } + if c.unreadable && r.Undecided != "duplicate check failed" { + t.Errorf("%s: Undecided %q", c.src, r.Undecided) + } + } + g := &fake{name: "a.pdf", rawErr: errors.New("larger than max-read"), dupErr: errors.New("x")} + if r := eval(t, `(or (content "x") (duplicate))`, Options{}, g); r.Undecided != "content unreadable, duplicate check failed" { + t.Errorf("both unknown: Undecided %q", r.Undecided) + } +} |
