From 5fe6de219df1cd7f53718a3fe0e3e66a0f4a2f0a Mon Sep 17 00:00:00 2001
From: Johannes Hertenstein <johannes@nimius.net>
Date: Tue, 16 Oct 2018 23:29:44 +0200
Subject: [PATCH] Add tests for insensitive variants of filter methods

---
 cmd/restic/exclude_test.go     | 27 +++++++++++++++++++++++++++
 internal/filter/filter_test.go | 27 +++++++++++++++++++++++++++
 2 files changed, 54 insertions(+)

diff --git a/cmd/restic/exclude_test.go b/cmd/restic/exclude_test.go
index 741dbdb64..6c8ce6e14 100644
--- a/cmd/restic/exclude_test.go
+++ b/cmd/restic/exclude_test.go
@@ -36,6 +36,33 @@ func TestRejectByPattern(t *testing.T) {
 	}
 }
 
+func TestRejectByInsensitivePattern(t *testing.T) {
+	var tests = []struct {
+		filename string
+		reject   bool
+	}{
+		{filename: "/home/user/foo.GO", reject: true},
+		{filename: "/home/user/foo.c", reject: false},
+		{filename: "/home/user/foobar", reject: false},
+		{filename: "/home/user/FOObar/x", reject: true},
+		{filename: "/home/user/README", reject: false},
+		{filename: "/home/user/readme.md", reject: true},
+	}
+
+	patterns := []string{"*.go", "README.md", "/home/user/foobar/*"}
+
+	for _, tc := range tests {
+		t.Run("", func(t *testing.T) {
+			reject := rejectByInsensitivePattern(patterns)
+			res := reject(tc.filename)
+			if res != tc.reject {
+				t.Fatalf("wrong result for filename %v: want %v, got %v",
+					tc.filename, tc.reject, res)
+			}
+		})
+	}
+}
+
 func TestIsExcludedByFile(t *testing.T) {
 	const (
 		tagFilename = "CACHEDIR.TAG"
diff --git a/internal/filter/filter_test.go b/internal/filter/filter_test.go
index 97df452fb..7be5dcb30 100644
--- a/internal/filter/filter_test.go
+++ b/internal/filter/filter_test.go
@@ -279,6 +279,33 @@ func ExampleList() {
 	// match: true
 }
 
+var filterInsensitiveListTests = []struct {
+	patterns []string
+	path     string
+	match    bool
+}{
+	{[]string{"*.go"}, "/foo/bar/test.go", true},
+	{[]string{"test.go"}, "/foo/bar/test.go", true},
+	{[]string{"test.go"}, "/foo/bar/TEST.go", true},
+	{[]string{"BAR"}, "/foo/BAR/TEST.go", true},
+}
+
+func TestInsensitiveList(t *testing.T) {
+	for i, test := range filterInsensitiveListTests {
+		match, _, err := filter.InsensitiveList(test.patterns, test.path)
+		if err != nil {
+			t.Errorf("test %d failed: expected no error for patterns %q, but error returned: %v",
+				i, test.patterns, err)
+			continue
+		}
+
+		if match != test.match {
+			t.Errorf("test %d: filter.InsensitiveList(%q, %q): expected %v, got %v",
+				i, test.patterns, test.path, test.match, match)
+		}
+	}
+}
+
 func extractTestLines(t testing.TB) (lines []string) {
 	f, err := os.Open("testdata/libreoffice.txt.bz2")
 	if err != nil {