package git

import (
	"bytes"
	"testing"
)

type bufWrapper struct {
	buf     [64]byte
	pointer []byte
}

func doublePointerBytes() []byte {
	o := &bufWrapper{}
	o.pointer = o.buf[0:10]
	return o.pointer[0:1]
}

func TestCreateBlobFromBuffer(t *testing.T) {
	t.Parallel()
	repo := createTestRepo(t)
	defer cleanupTestRepo(t, repo)

	id, err := repo.CreateBlobFromBuffer(make([]byte, 0))
	checkFatal(t, err)

	if id.String() != "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" {
		t.Fatal("Empty buffer did not deliver empty blob id")
	}

	tests := []struct {
		data     []byte
		isBinary bool
	}{
		{
			data:     []byte("hello there"),
			isBinary: false,
		},
		{
			data:     doublePointerBytes(),
			isBinary: true,
		},
	}
	for _, tt := range tests {
		data := tt.data
		id, err = repo.CreateBlobFromBuffer(data)
		checkFatal(t, err)

		blob, err := repo.LookupBlob(id)
		checkFatal(t, err)
		if !bytes.Equal(blob.Contents(), data) {
			t.Fatal("Loaded bytes don't match original bytes:",
				blob.Contents(), "!=", data)
		}
		want := tt.isBinary
		if got := blob.IsBinary(); got != want {
			t.Fatalf("IsBinary() = %v, want %v", got, want)
		}
	}
}