tree_diff_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package hercules
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. "gopkg.in/src-d/go-git.v4/plumbing"
  6. "gopkg.in/src-d/go-git.v4/plumbing/object"
  7. "gopkg.in/src-d/go-git.v4/utils/merkletrie"
  8. )
  9. func fixtureTreeDiff() *TreeDiff {
  10. td := TreeDiff{}
  11. td.Initialize(testRepository)
  12. return &td
  13. }
  14. func TestTreeDiffMeta(t *testing.T) {
  15. td := fixtureTreeDiff()
  16. assert.Equal(t, td.Name(), "TreeDiff")
  17. assert.Equal(t, len(td.Requires()), 0)
  18. assert.Equal(t, len(td.Provides()), 1)
  19. assert.Equal(t, td.Provides()[0], "changes")
  20. }
  21. func TestTreeDiffConsume(t *testing.T) {
  22. td := fixtureTreeDiff()
  23. commit, _ := testRepository.CommitObject(plumbing.NewHash(
  24. "2b1ed978194a94edeabbca6de7ff3b5771d4d665"))
  25. deps := map[string]interface{}{}
  26. deps["commit"] = commit
  27. prevCommit, _ := testRepository.CommitObject(plumbing.NewHash(
  28. "fbe766ffdc3f87f6affddc051c6f8b419beea6a2"))
  29. td.previousTree, _ = prevCommit.Tree()
  30. res, err := td.Consume(deps)
  31. assert.Nil(t, err)
  32. assert.Equal(t, len(res), 1)
  33. changes := res["changes"].(object.Changes)
  34. assert.Equal(t, len(changes), 12)
  35. baseline := map[string]merkletrie.Action{
  36. "analyser.go": merkletrie.Delete,
  37. "cmd/hercules/main.go": merkletrie.Modify,
  38. "blob_cache.go": merkletrie.Insert,
  39. "burndown.go": merkletrie.Insert,
  40. "day.go": merkletrie.Insert,
  41. "dummies.go": merkletrie.Insert,
  42. "identity.go": merkletrie.Insert,
  43. "pipeline.go": merkletrie.Insert,
  44. "renames.go": merkletrie.Insert,
  45. "toposort/toposort.go": merkletrie.Insert,
  46. "toposort/toposort_test.go": merkletrie.Insert,
  47. "tree_diff.go": merkletrie.Insert,
  48. }
  49. for _, change := range changes {
  50. action, err := change.Action()
  51. assert.Nil(t, err)
  52. if change.From.Name != "" {
  53. assert.Contains(t, baseline, change.From.Name)
  54. assert.Equal(t, baseline[change.From.Name], action)
  55. } else {
  56. assert.Contains(t, baseline, change.To.Name)
  57. assert.Equal(t, baseline[change.To.Name], action)
  58. }
  59. }
  60. }
  61. func TestTreeDiffConsumeFirst(t *testing.T) {
  62. td := fixtureTreeDiff()
  63. commit, _ := testRepository.CommitObject(plumbing.NewHash(
  64. "2b1ed978194a94edeabbca6de7ff3b5771d4d665"))
  65. deps := map[string]interface{}{}
  66. deps["commit"] = commit
  67. res, err := td.Consume(deps)
  68. assert.Nil(t, err)
  69. assert.Equal(t, len(res), 1)
  70. changes := res["changes"].(object.Changes)
  71. assert.Equal(t, len(changes), 21)
  72. for _, change := range changes {
  73. action, err := change.Action()
  74. assert.Nil(t, err)
  75. assert.Equal(t, action, merkletrie.Insert)
  76. }
  77. }
  78. func TestTreeDiffFinalize(t *testing.T) {
  79. id := fixtureTreeDiff()
  80. res := id.Finalize()
  81. assert.Nil(t, res)
  82. }