X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/a55350daaf83498b7a237c027ad0dd2377f06fee..a2ef262a164fc735b9b8471ac0c8001eea2b9bf6:/hotline/files_test.go diff --git a/hotline/files_test.go b/hotline/files_test.go index 90c5f00..4c8ef80 100644 --- a/hotline/files_test.go +++ b/hotline/files_test.go @@ -2,7 +2,9 @@ package hotline import ( "bytes" + "encoding/binary" "os" + "path/filepath" "reflect" "testing" ) @@ -81,3 +83,89 @@ func TestCalcTotalSize(t *testing.T) { }) } } + +func createTestDirStructure(baseDir string, structure map[string]string) error { + // First pass: create directories + for path, content := range structure { + if content == "dir" { + if err := os.MkdirAll(filepath.Join(baseDir, path), 0755); err != nil { + return err + } + } + } + + // Second pass: create files + for path, content := range structure { + if content != "dir" { + fullPath := filepath.Join(baseDir, path) + dir := filepath.Dir(fullPath) + if err := os.MkdirAll(dir, 0755); err != nil { + return err + } + if err := os.WriteFile(fullPath, []byte(content), 0644); err != nil { + return err + } + } + } + return nil +} + +func TestCalcItemCount(t *testing.T) { + tests := []struct { + name string + structure map[string]string + expected uint16 + }{ + { + name: "directory with files", + structure: map[string]string{ + "file1.txt": "content1", + "file2.txt": "content2", + "subdir/": "dir", + "subdir/file3.txt": "content3", + }, + expected: 4, // 3 files and 1 directory, should count 4 items + }, + { + name: "directory with hidden files", + structure: map[string]string{ + ".hiddenfile": "hiddencontent", + "file1.txt": "content1", + }, + expected: 1, // 1 non-hidden file + }, + { + name: "empty directory", + structure: map[string]string{}, + expected: 0, // 0 files + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Create a temporary directory for the test + tempDir, err := os.MkdirTemp("", "test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(tempDir) + + // Create the test directory structure + if err := createTestDirStructure(tempDir, tt.structure); err != nil { + t.Fatalf("Failed to create test dir structure: %v", err) + } + + // Calculate item count + result, err := CalcItemCount(tempDir) + if err != nil { + t.Fatalf("CalcItemCount returned an error: %v", err) + } + + // Convert result to uint16 + count := binary.BigEndian.Uint16(result) + if count != tt.expected { + t.Errorf("expected %d, got %d", tt.expected, count) + } + }) + } +}