package gitcmd import ( "strings" "testing" ) func TestGetBlobText(t *testing.T) { f := newFixture(t) b, err := f.repo.GetBlob("HEAD", "README.md") if err != nil { t.Fatal(err) } if b.Ref != "HEAD" || b.Path != "README.md" { t.Errorf("Ref/Path = %q/%q", b.Ref, b.Path) } if b.Content != readmeV2 { t.Errorf("Content = %q, want %q", b.Content, readmeV2) } if b.Encoding != "text" { t.Errorf("Encoding = %q, want text", b.Encoding) } if b.IsBinary { t.Error("IsBinary = true, want false") } if b.Size != int64(len(readmeV2)) { t.Errorf("Size = %d, want %d", b.Size, len(readmeV2)) } if len(b.SHA) != 40 { t.Errorf("SHA len = %d, want 40", len(b.SHA)) } } func TestGetBlobBinary(t *testing.T) { f := newFixture(t) b, err := f.repo.GetBlob("HEAD", "binary.bin") if err != nil { t.Fatal(err) } if !b.IsBinary { t.Error("IsBinary = false, want true (contains NUL)") } if b.Encoding != "base64" { t.Errorf("Encoding = %q, want base64", b.Encoding) } if b.Size != int64(len(binaryContent)) { t.Errorf("Size = %d, want %d", b.Size, len(binaryContent)) } if b.Content != string(binaryContent) { t.Errorf("binary Content mismatch") } } func TestGetBlobMissingPath(t *testing.T) { f := newFixture(t) _, err := f.repo.GetBlob("HEAD", "does/not/exist.txt") if err == nil { t.Fatal("expected error for missing path") } } func TestGetRawContent(t *testing.T) { f := newFixture(t) raw, err := f.repo.GetRawContent("HEAD", "README.md") if err != nil { t.Fatal(err) } if raw != readmeV2 { t.Errorf("raw README = %q, want %q", raw, readmeV2) } binRaw, err := f.repo.GetRawContent("HEAD", "binary.bin") if err != nil { t.Fatal(err) } if binRaw != string(binaryContent) { t.Errorf("binary raw mismatch: %q", binRaw) } if !strings.ContainsRune(binRaw, 0) { t.Error("binary raw should contain a NUL byte") } }