|
@@ -79,3 +79,142 @@ func TestReadSymlinkedDirectoryToFile(t *testing.T) {
|
|
|
t.Errorf("failed to remove symlink: %s", err)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func TestWildcardMatches(t *testing.T) {
|
|
|
+ match, _ := Matches("fileutils.go", []string{"*"})
|
|
|
+ if match != true {
|
|
|
+ t.Errorf("failed to get a wildcard match, got %v", match)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// A simple pattern match should return true.
|
|
|
+func TestPatternMatches(t *testing.T) {
|
|
|
+ match, _ := Matches("fileutils.go", []string{"*.go"})
|
|
|
+ if match != true {
|
|
|
+ t.Errorf("failed to get a match, got %v", match)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// An exclusion followed by an inclusion should return true.
|
|
|
+func TestExclusionPatternMatchesPatternBefore(t *testing.T) {
|
|
|
+ match, _ := Matches("fileutils.go", []string{"!fileutils.go", "*.go"})
|
|
|
+ if match != true {
|
|
|
+ t.Errorf("failed to get true match on exclusion pattern, got %v", match)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// A folder pattern followed by an exception should return false.
|
|
|
+func TestPatternMatchesFolderExclusions(t *testing.T) {
|
|
|
+ match, _ := Matches("docs/README.md", []string{"docs", "!docs/README.md"})
|
|
|
+ if match != false {
|
|
|
+ t.Errorf("failed to get a false match on exclusion pattern, got %v", match)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// A folder pattern followed by an exception should return false.
|
|
|
+func TestPatternMatchesFolderWithSlashExclusions(t *testing.T) {
|
|
|
+ match, _ := Matches("docs/README.md", []string{"docs/", "!docs/README.md"})
|
|
|
+ if match != false {
|
|
|
+ t.Errorf("failed to get a false match on exclusion pattern, got %v", match)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// A folder pattern followed by an exception should return false.
|
|
|
+func TestPatternMatchesFolderWildcardExclusions(t *testing.T) {
|
|
|
+ match, _ := Matches("docs/README.md", []string{"docs/*", "!docs/README.md"})
|
|
|
+ if match != false {
|
|
|
+ t.Errorf("failed to get a false match on exclusion pattern, got %v", match)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// A pattern followed by an exclusion should return false.
|
|
|
+func TestExclusionPatternMatchesPatternAfter(t *testing.T) {
|
|
|
+ match, _ := Matches("fileutils.go", []string{"*.go", "!fileutils.go"})
|
|
|
+ if match != false {
|
|
|
+ t.Errorf("failed to get false match on exclusion pattern, got %v", match)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// A filename evaluating to . should return false.
|
|
|
+func TestExclusionPatternMatchesWholeDirectory(t *testing.T) {
|
|
|
+ match, _ := Matches(".", []string{"*.go"})
|
|
|
+ if match != false {
|
|
|
+ t.Errorf("failed to get false match on ., got %v", match)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// A single ! pattern should return an error.
|
|
|
+func TestSingleExclamationError(t *testing.T) {
|
|
|
+ _, err := Matches("fileutils.go", []string{"!"})
|
|
|
+ if err == nil {
|
|
|
+ t.Errorf("failed to get an error for a single exclamation point, got %v", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// A string preceded with a ! should return true from Exclusion.
|
|
|
+func TestExclusion(t *testing.T) {
|
|
|
+ exclusion := Exclusion("!")
|
|
|
+ if !exclusion {
|
|
|
+ t.Errorf("failed to get true for a single !, got %v", exclusion)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// An empty string should return true from Empty.
|
|
|
+func TestEmpty(t *testing.T) {
|
|
|
+ empty := Empty("")
|
|
|
+ if !empty {
|
|
|
+ t.Errorf("failed to get true for an empty string, got %v", empty)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestCleanPatterns(t *testing.T) {
|
|
|
+ cleaned, _, _, _ := CleanPatterns([]string{"docs", "config"})
|
|
|
+ if len(cleaned) != 2 {
|
|
|
+ t.Errorf("expected 2 element slice, got %v", len(cleaned))
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestCleanPatternsStripEmptyPatterns(t *testing.T) {
|
|
|
+ cleaned, _, _, _ := CleanPatterns([]string{"docs", "config", ""})
|
|
|
+ if len(cleaned) != 2 {
|
|
|
+ t.Errorf("expected 2 element slice, got %v", len(cleaned))
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestCleanPatternsExceptionFlag(t *testing.T) {
|
|
|
+ _, _, exceptions, _ := CleanPatterns([]string{"docs", "!docs/README.md"})
|
|
|
+ if !exceptions {
|
|
|
+ t.Errorf("expected exceptions to be true, got %v", exceptions)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestCleanPatternsLeadingSpaceTrimmed(t *testing.T) {
|
|
|
+ _, _, exceptions, _ := CleanPatterns([]string{"docs", " !docs/README.md"})
|
|
|
+ if !exceptions {
|
|
|
+ t.Errorf("expected exceptions to be true, got %v", exceptions)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestCleanPatternsTrailingSpaceTrimmed(t *testing.T) {
|
|
|
+ _, _, exceptions, _ := CleanPatterns([]string{"docs", "!docs/README.md "})
|
|
|
+ if !exceptions {
|
|
|
+ t.Errorf("expected exceptions to be true, got %v", exceptions)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestCleanPatternsErrorSingleException(t *testing.T) {
|
|
|
+ _, _, _, err := CleanPatterns([]string{"!"})
|
|
|
+ if err == nil {
|
|
|
+ t.Errorf("expected error on single exclamation point, got %v", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestCleanPatternsFolderSplit(t *testing.T) {
|
|
|
+ _, dirs, _, _ := CleanPatterns([]string{"docs/config/CONFIG.md"})
|
|
|
+ if dirs[0][0] != "docs" {
|
|
|
+ t.Errorf("expected first element in dirs slice to be docs, got %v", dirs[0][1])
|
|
|
+ }
|
|
|
+ if dirs[0][1] != "config" {
|
|
|
+ t.Errorf("expected first element in dirs slice to be config, got %v", dirs[0][1])
|
|
|
+ }
|
|
|
+}
|