dockerignore_test.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package watch
  2. import (
  3. "testing"
  4. )
  5. func TestNewDockerPatternMatcher(t *testing.T) {
  6. tests := []struct {
  7. name string
  8. repoRoot string
  9. patterns []string
  10. expectedErr bool
  11. expectedRoot string
  12. expectedPat []string
  13. }{
  14. {
  15. name: "Basic patterns without wildcard",
  16. repoRoot: "/repo",
  17. patterns: []string{"dir1/", "file.txt"},
  18. expectedErr: false,
  19. expectedRoot: "/repo",
  20. expectedPat: []string{"/repo/dir1", "/repo/file.txt"},
  21. },
  22. {
  23. name: "Patterns with exclusion",
  24. repoRoot: "/repo",
  25. patterns: []string{"dir1/", "!file.txt"},
  26. expectedErr: false,
  27. expectedRoot: "/repo",
  28. expectedPat: []string{"/repo/dir1", "!/repo/file.txt"},
  29. },
  30. {
  31. name: "Wildcard with exclusion",
  32. repoRoot: "/repo",
  33. patterns: []string{"*", "!file.txt"},
  34. expectedErr: false,
  35. expectedRoot: "/repo",
  36. expectedPat: []string{"!/repo/file.txt"},
  37. },
  38. {
  39. name: "No patterns",
  40. repoRoot: "/repo",
  41. patterns: []string{},
  42. expectedErr: false,
  43. expectedRoot: "/repo",
  44. expectedPat: nil,
  45. },
  46. {
  47. name: "Only exclusion pattern",
  48. repoRoot: "/repo",
  49. patterns: []string{"!file.txt"},
  50. expectedErr: false,
  51. expectedRoot: "/repo",
  52. expectedPat: []string{"!/repo/file.txt"},
  53. },
  54. }
  55. for _, tt := range tests {
  56. t.Run(tt.name, func(t *testing.T) {
  57. // Call the function with the test data
  58. matcher, err := NewDockerPatternMatcher(tt.repoRoot, tt.patterns)
  59. // Check if we expect an error
  60. if (err != nil) != tt.expectedErr {
  61. t.Fatalf("expected error: %v, got: %v", tt.expectedErr, err)
  62. }
  63. // If no error is expected, check the output
  64. if !tt.expectedErr {
  65. if matcher.repoRoot != tt.expectedRoot {
  66. t.Errorf("expected root: %v, got: %v", tt.expectedRoot, matcher.repoRoot)
  67. }
  68. // Compare patterns
  69. actualPatterns := matcher.matcher.Patterns()
  70. if len(actualPatterns) != len(tt.expectedPat) {
  71. t.Errorf("expected patterns length: %v, got: %v", len(tt.expectedPat), len(actualPatterns))
  72. }
  73. for i, expectedPat := range tt.expectedPat {
  74. actualPatternStr := actualPatterns[i].String()
  75. if actualPatterns[i].Exclusion() {
  76. actualPatternStr = "!" + actualPatternStr
  77. }
  78. if actualPatternStr != expectedPat {
  79. t.Errorf("expected pattern: %v, got: %v", expectedPat, actualPatterns[i])
  80. }
  81. }
  82. }
  83. })
  84. }
  85. }