package main import ( "modify/utils" "os" "path/filepath" "testing" ) func TestGlobExpansion(t *testing.T) { // Create a temporary directory structure for testing tmpDir, err := os.MkdirTemp("", "glob-test") if err != nil { t.Fatalf("Failed to create temp dir: %v", err) } defer os.RemoveAll(tmpDir) // Create some test files testFiles := []string{ filepath.Join(tmpDir, "file1.xml"), filepath.Join(tmpDir, "file2.xml"), filepath.Join(tmpDir, "test.txt"), filepath.Join(tmpDir, "subdir", "file3.xml"), filepath.Join(tmpDir, "subdir", "file4.txt"), filepath.Join(tmpDir, "subdir", "nested", "file5.xml"), } // Create the directory structure err = os.MkdirAll(filepath.Join(tmpDir, "subdir", "nested"), 0755) if err != nil { t.Fatalf("Failed to create subdirectories: %v", err) } // Create the files for _, file := range testFiles { dir := filepath.Dir(file) if err := os.MkdirAll(dir, 0755); err != nil { t.Fatalf("Failed to create directory %s: %v", dir, err) } if err := os.WriteFile(file, []byte("test content"), 0644); err != nil { t.Fatalf("Failed to create file %s: %v", file, err) } } // Change to the temporary directory to use relative paths origDir, _ := os.Getwd() os.Chdir(tmpDir) defer os.Chdir(origDir) // Test cases tests := []struct { name string patterns []string expected int }{ { name: "Simple pattern", patterns: []string{"*.xml"}, expected: 2, // file1.xml, file2.xml }, { name: "Multiple patterns", patterns: []string{"*.xml", "*.txt"}, expected: 3, // file1.xml, file2.xml, test.txt }, { name: "Directory globbing", patterns: []string{"subdir/*.xml"}, expected: 1, // subdir/file3.xml }, { name: "Doublestar pattern", patterns: []string{"**/*.xml"}, expected: 4, // All XML files in all directories }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { // Convert string patterns to map[string]struct{} for ExpandGLobs patternMap := make(map[string]struct{}) for _, pattern := range tc.patterns { patternMap[pattern] = struct{}{} } files, err := utils.ExpandGLobs(patternMap) if err != nil { t.Fatalf("ExpandGLobs failed: %v", err) } if len(files) != tc.expected { t.Errorf("Expected %d files, got %d: %v", tc.expected, len(files), files) } }) } }