imports_printer_test.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package leaves
  2. import (
  3. "bytes"
  4. "fmt"
  5. "testing"
  6. "github.com/gogo/protobuf/proto"
  7. imports2 "github.com/src-d/imports"
  8. "github.com/stretchr/testify/assert"
  9. gitplumbing "gopkg.in/src-d/go-git.v4/plumbing"
  10. "gopkg.in/src-d/hercules.v10/internal/core"
  11. "gopkg.in/src-d/hercules.v10/internal/pb"
  12. "gopkg.in/src-d/hercules.v10/internal/plumbing/identity"
  13. "gopkg.in/src-d/hercules.v10/internal/plumbing/imports"
  14. "gopkg.in/src-d/hercules.v10/internal/test"
  15. )
  16. func fixtureImportsPerDev() *ImportsPerDeveloper {
  17. d := ImportsPerDeveloper{}
  18. d.Initialize(test.Repository)
  19. people := [...]string{"one@srcd", "two@srcd"}
  20. d.reversedPeopleDict = people[:]
  21. return &d
  22. }
  23. func TestImportsPerDeveloperMeta(t *testing.T) {
  24. ipd := fixtureImportsPerDev()
  25. assert.Equal(t, ipd.Name(), "ImportsPerDeveloper")
  26. assert.Equal(t, len(ipd.Provides()), 0)
  27. assert.Equal(t, len(ipd.Requires()), 2)
  28. assert.Equal(t, ipd.Requires()[0], imports.DependencyImports)
  29. assert.Equal(t, ipd.Requires()[1], identity.DependencyAuthor)
  30. assert.Equal(t, ipd.Flag(), "imports-per-dev")
  31. assert.Len(t, ipd.ListConfigurationOptions(), 0)
  32. assert.True(t, len(ipd.Description()) > 0)
  33. logger := core.NewLogger()
  34. assert.NoError(t, ipd.Configure(map[string]interface{}{
  35. core.ConfigLogger: logger,
  36. identity.FactIdentityDetectorReversedPeopleDict: []string{"1", "2"},
  37. }))
  38. assert.Equal(t, logger, ipd.l)
  39. assert.Equal(t, []string{"1", "2"}, ipd.reversedPeopleDict)
  40. }
  41. func TestImportsPerDeveloperRegistration(t *testing.T) {
  42. summoned := core.Registry.Summon((&ImportsPerDeveloper{}).Name())
  43. assert.Len(t, summoned, 1)
  44. assert.Equal(t, summoned[0].Name(), "ImportsPerDeveloper")
  45. leaves := core.Registry.GetLeaves()
  46. matched := false
  47. for _, tp := range leaves {
  48. if tp.Flag() == (&ImportsPerDeveloper{}).Flag() {
  49. matched = true
  50. break
  51. }
  52. }
  53. assert.True(t, matched)
  54. }
  55. func TestImportsPerDeveloperInitialize(t *testing.T) {
  56. ipd := fixtureImportsPerDev()
  57. assert.NotNil(t, ipd.imports)
  58. }
  59. func TestImportsPerDeveloperConsumeFinalize(t *testing.T) {
  60. deps := map[string]interface{}{}
  61. deps[core.DependencyIsMerge] = false
  62. deps[identity.DependencyAuthor] = 0
  63. imps := map[gitplumbing.Hash]imports2.File{}
  64. imps[gitplumbing.NewHash("291286b4ac41952cbd1389fda66420ec03c1a9fe")] =
  65. imports2.File{Lang: "Go", Path: "test.go", Imports: []string{"sys"}}
  66. imps[gitplumbing.NewHash("c29112dbd697ad9b401333b80c18a63951bc18d9")] =
  67. imports2.File{Lang: "Python", Path: "test.py", Imports: []string{"sys"}}
  68. deps[imports.DependencyImports] = imps
  69. ipd := fixtureImportsPerDev()
  70. ipd.reversedPeopleDict = []string{"1", "2"}
  71. _, err := ipd.Consume(deps)
  72. assert.NoError(t, err)
  73. assert.Equal(t, map[int]map[string]map[string]int{
  74. 0: {"Go": {"sys": 1}, "Python": {"sys": 1}},
  75. }, ipd.imports)
  76. _, err = ipd.Consume(deps)
  77. assert.NoError(t, err)
  78. assert.Equal(t, map[int]map[string]map[string]int{
  79. 0: {"Go": {"sys": 2}, "Python": {"sys": 2}},
  80. }, ipd.imports)
  81. deps[identity.DependencyAuthor] = 1
  82. _, err = ipd.Consume(deps)
  83. assert.NoError(t, err)
  84. assert.Equal(t, map[int]map[string]map[string]int{
  85. 0: {"Go": {"sys": 2}, "Python": {"sys": 2}},
  86. 1: {"Go": {"sys": 1}, "Python": {"sys": 1}},
  87. }, ipd.imports)
  88. deps[core.DependencyIsMerge] = true
  89. _, err = ipd.Consume(deps)
  90. assert.NoError(t, err)
  91. assert.Equal(t, map[int]map[string]map[string]int{
  92. 0: {"Go": {"sys": 2}, "Python": {"sys": 2}},
  93. 1: {"Go": {"sys": 1}, "Python": {"sys": 1}},
  94. }, ipd.imports)
  95. result := ipd.Finalize().(ImportsPerDeveloperResult)
  96. assert.Equal(t, ipd.reversedPeopleDict, result.reversedPeopleDict)
  97. assert.Equal(t, ipd.imports, result.Imports)
  98. }
  99. func TestImportsPerDeveloperSerializeText(t *testing.T) {
  100. ipd := fixtureImportsPerDev()
  101. res := ImportsPerDeveloperResult{Imports: map[int]map[string]map[string]int{
  102. 0: {"Go": {"sys": 2}, "Python": {"sys": 2}},
  103. 1: {"Go": {"sys": 1}, "Python": {"sys": 1}},
  104. }, reversedPeopleDict: []string{"one", "two"}}
  105. buffer := &bytes.Buffer{}
  106. assert.NoError(t, ipd.Serialize(res, false, buffer))
  107. assert.Equal(t, ` - "one": {"Go":{"sys":2},"Python":{"sys":2}}
  108. - "two": {"Go":{"sys":1},"Python":{"sys":1}}
  109. `, buffer.String())
  110. }
  111. func TestImportsPerDeveloperSerializeBinary(t *testing.T) {
  112. ipd := fixtureImportsPerDev()
  113. res := ImportsPerDeveloperResult{Imports: map[int]map[string]map[string]int{
  114. 0: {"Go": {"sys": 2}, "Python": {"sys": 2}},
  115. 1: {"Go": {"sys": 1}, "Python": {"sys": 1}},
  116. }, reversedPeopleDict: []string{"one", "two"}}
  117. buffer := &bytes.Buffer{}
  118. assert.NoError(t, ipd.Serialize(res, true, buffer))
  119. msg := pb.ImportsPerDeveloperResults{}
  120. assert.Nil(t, proto.Unmarshal(buffer.Bytes(), &msg))
  121. assert.Equal(t, `{[languages:<key:"Go" value:<counts:<key:"sys" value:2 > > > languages:<key:"Python" value:<counts:<key:"sys" value:2 > > > languages:<key:"Go" value:<counts:<key:"sys" value:1 > > > languages:<key:"Python" value:<counts:<key:"sys" value:1 > > > ] [one two] {} [] 0}`, fmt.Sprint(msg))
  122. }