|
@@ -0,0 +1,89 @@
|
|
|
+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)
|
|
|
+}
|