aboutsummaryrefslogtreecommitdiff
package tree_test

import (
	"testing"

	"lindenii.org/go/furgit/internal/testgit"
	"lindenii.org/go/furgit/object/id"
	"lindenii.org/go/furgit/object/tree"
	"lindenii.org/go/furgit/object/typ"
)

func TestParse(t *testing.T) {
	t.Parallel()

	for _, objectFormat := range id.SupportedObjectFormats() {
		t.Run(objectFormat.String(), func(t *testing.T) {
			t.Parallel()

			repo, err := testgit.NewRepo(t, testgit.RepoOptions{ObjectFormat: objectFormat})
			if err != nil {
				t.Fatalf("NewRepo: %v", err)
			}

			entries := mixedEntries(t, repo)

			treeID, err := repo.MkTree(t, mkTreeEntries(entries))
			if err != nil {
				t.Fatalf("MkTree: %v", err)
			}

			rawBody, err := repo.CatFile(t, typ.Tree, treeID)
			if err != nil {
				t.Fatalf("CatFile: %v", err)
			}

			parsed, err := tree.Parse(rawBody, objectFormat)
			if err != nil {
				t.Fatalf("Parse: %v", err)
			}

			assertGitDecode(t, repo, treeID, parsed.Entries())
		})
	}
}