package hercules import ( "testing" "github.com/stretchr/testify/assert" "gopkg.in/src-d/go-git.v4/plumbing" "gopkg.in/src-d/go-git.v4/plumbing/object" "gopkg.in/src-d/go-git.v4/utils/merkletrie" ) func fixtureTreeDiff() *TreeDiff { td := TreeDiff{} td.Initialize(testRepository) return &td } func TestTreeDiffMeta(t *testing.T) { td := fixtureTreeDiff() assert.Equal(t, td.Name(), "TreeDiff") assert.Equal(t, len(td.Requires()), 0) assert.Equal(t, len(td.Provides()), 1) assert.Equal(t, td.Provides()[0], "changes") } func TestTreeDiffConsume(t *testing.T) { td := fixtureTreeDiff() commit, _ := testRepository.CommitObject(plumbing.NewHash( "2b1ed978194a94edeabbca6de7ff3b5771d4d665")) deps := map[string]interface{}{} deps["commit"] = commit prevCommit, _ := testRepository.CommitObject(plumbing.NewHash( "fbe766ffdc3f87f6affddc051c6f8b419beea6a2")) td.previousTree, _ = prevCommit.Tree() res, err := td.Consume(deps) assert.Nil(t, err) assert.Equal(t, len(res), 1) changes := res["changes"].(object.Changes) assert.Equal(t, len(changes), 12) baseline := map[string]merkletrie.Action{ "analyser.go": merkletrie.Delete, "cmd/hercules/main.go": merkletrie.Modify, "blob_cache.go": merkletrie.Insert, "burndown.go": merkletrie.Insert, "day.go": merkletrie.Insert, "dummies.go": merkletrie.Insert, "identity.go": merkletrie.Insert, "pipeline.go": merkletrie.Insert, "renames.go": merkletrie.Insert, "toposort/toposort.go": merkletrie.Insert, "toposort/toposort_test.go": merkletrie.Insert, "tree_diff.go": merkletrie.Insert, } for _, change := range changes { action, err := change.Action() assert.Nil(t, err) if change.From.Name != "" { assert.Contains(t, baseline, change.From.Name) assert.Equal(t, baseline[change.From.Name], action) } else { assert.Contains(t, baseline, change.To.Name) assert.Equal(t, baseline[change.To.Name], action) } } } func TestTreeDiffConsumeFirst(t *testing.T) { td := fixtureTreeDiff() commit, _ := testRepository.CommitObject(plumbing.NewHash( "2b1ed978194a94edeabbca6de7ff3b5771d4d665")) deps := map[string]interface{}{} deps["commit"] = commit res, err := td.Consume(deps) assert.Nil(t, err) assert.Equal(t, len(res), 1) changes := res["changes"].(object.Changes) assert.Equal(t, len(changes), 21) for _, change := range changes { action, err := change.Action() assert.Nil(t, err) assert.Equal(t, action, merkletrie.Insert) } } func TestTreeDiffFinalize(t *testing.T) { id := fixtureTreeDiff() res := id.Finalize() assert.Nil(t, res) }