aboutsummaryrefslogtreecommitdiff
path: root/internal/cond/eval_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/cond/eval_test.go')
-rw-r--r--internal/cond/eval_test.go29
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)
+ }
+}