ignore_test.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Copyright (C) 2014 Jakob Borg and Contributors (see the CONTRIBUTORS file).
  2. // All rights reserved. Use of this source code is governed by an MIT-style
  3. // license that can be found in the LICENSE file.
  4. package ignore_test
  5. import (
  6. "bytes"
  7. "path/filepath"
  8. "testing"
  9. "github.com/syncthing/syncthing/ignore"
  10. )
  11. func TestIgnore(t *testing.T) {
  12. pats, err := ignore.Load("testdata/.stignore")
  13. if err != nil {
  14. t.Fatal(err)
  15. }
  16. var tests = []struct {
  17. f string
  18. r bool
  19. }{
  20. {"afile", false},
  21. {"bfile", true},
  22. {"cfile", false},
  23. {"dfile", false},
  24. {"efile", true},
  25. {"ffile", true},
  26. {"dir1", false},
  27. {filepath.Join("dir1", "cfile"), true},
  28. {filepath.Join("dir1", "dfile"), false},
  29. {filepath.Join("dir1", "efile"), true},
  30. {filepath.Join("dir1", "ffile"), false},
  31. {"dir2", false},
  32. {filepath.Join("dir2", "cfile"), false},
  33. {filepath.Join("dir2", "dfile"), true},
  34. {filepath.Join("dir2", "efile"), true},
  35. {filepath.Join("dir2", "ffile"), false},
  36. {filepath.Join("dir3"), true},
  37. {filepath.Join("dir3", "afile"), true},
  38. }
  39. for i, tc := range tests {
  40. if r := pats.Match(tc.f); r != tc.r {
  41. t.Errorf("Incorrect ignoreFile() #%d (%s); E: %v, A: %v", i, tc.f, tc.r, r)
  42. }
  43. }
  44. }
  45. func TestExcludes(t *testing.T) {
  46. stignore := `
  47. !iex2
  48. !ign1/ex
  49. ign1
  50. i*2
  51. !ign2
  52. `
  53. pats, err := ignore.Parse(bytes.NewBufferString(stignore), ".stignore")
  54. if err != nil {
  55. t.Fatal(err)
  56. }
  57. var tests = []struct {
  58. f string
  59. r bool
  60. }{
  61. {"ign1", true},
  62. {"ign2", true},
  63. {"ibla2", true},
  64. {"iex2", false},
  65. {"ign1/ign", true},
  66. {"ign1/ex", false},
  67. {"ign1/iex2", false},
  68. {"iex2/ign", false},
  69. {"foo/bar/ign1", true},
  70. {"foo/bar/ign2", true},
  71. {"foo/bar/iex2", false},
  72. }
  73. for _, tc := range tests {
  74. if r := pats.Match(tc.f); r != tc.r {
  75. t.Errorf("Incorrect match for %s: %v != %v", tc.f, r, tc.r)
  76. }
  77. }
  78. }
  79. func TestBadPatterns(t *testing.T) {
  80. var badPatterns = []string{
  81. "[",
  82. "/[",
  83. "**/[",
  84. "#include nonexistent",
  85. "#include .stignore",
  86. "!#include makesnosense",
  87. }
  88. for _, pat := range badPatterns {
  89. parsed, err := ignore.Parse(bytes.NewBufferString(pat), ".stignore")
  90. if err == nil {
  91. t.Errorf("No error for pattern %q: %v", pat, parsed)
  92. }
  93. }
  94. }