123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- package hercules
- import (
- "testing"
- "github.com/sergi/go-diff/diffmatchpatch"
- "github.com/stretchr/testify/assert"
- "gopkg.in/src-d/go-git.v4/plumbing"
- "gopkg.in/src-d/go-git.v4/plumbing/object"
- "unicode/utf8"
- )
- func fixtureFileDiff() *FileDiff {
- fd := &FileDiff{}
- fd.Initialize(testRepository)
- return fd
- }
- func TestFileDiffMeta(t *testing.T) {
- fd := fixtureFileDiff()
- assert.Equal(t, fd.Name(), "FileDiff")
- assert.Equal(t, len(fd.Provides()), 1)
- assert.Equal(t, fd.Provides()[0], "file_diff")
- assert.Equal(t, len(fd.Requires()), 2)
- assert.Equal(t, fd.Requires()[0], "changes")
- assert.Equal(t, fd.Requires()[1], "blob_cache")
- assert.Len(t, fd.ListConfigurationOptions(), 0)
- fd.Configure(nil)
- }
- func TestFileDiffRegistration(t *testing.T) {
- tp, exists := Registry.registered[(&FileDiff{}).Name()]
- assert.True(t, exists)
- assert.Equal(t, tp.Elem().Name(), "FileDiff")
- tps, exists := Registry.provided[(&FileDiff{}).Provides()[0]]
- assert.True(t, exists)
- assert.True(t, len(tps) >= 1)
- matched := false
- for _, tp := range tps {
- matched = matched || tp.Elem().Name() == "FileDiff"
- }
- assert.True(t, matched)
- }
- func TestFileDiffConsume(t *testing.T) {
- fd := fixtureFileDiff()
- deps := map[string]interface{}{}
- cache := map[plumbing.Hash]*object.Blob{}
- hash := plumbing.NewHash("291286b4ac41952cbd1389fda66420ec03c1a9fe")
- cache[hash], _ = testRepository.BlobObject(hash)
- hash = plumbing.NewHash("334cde09da4afcb74f8d2b3e6fd6cce61228b485")
- cache[hash], _ = testRepository.BlobObject(hash)
- hash = plumbing.NewHash("dc248ba2b22048cc730c571a748e8ffcf7085ab9")
- cache[hash], _ = testRepository.BlobObject(hash)
- deps["blob_cache"] = cache
- changes := make(object.Changes, 3)
- treeFrom, _ := testRepository.TreeObject(plumbing.NewHash(
- "a1eb2ea76eb7f9bfbde9b243861474421000eb96"))
- treeTo, _ := testRepository.TreeObject(plumbing.NewHash(
- "994eac1cd07235bb9815e547a75c84265dea00f5"))
- changes[0] = &object.Change{From: object.ChangeEntry{
- Name: "analyser.go",
- Tree: treeFrom,
- TreeEntry: object.TreeEntry{
- Name: "analyser.go",
- Mode: 0100644,
- Hash: plumbing.NewHash("dc248ba2b22048cc730c571a748e8ffcf7085ab9"),
- },
- }, To: object.ChangeEntry{
- Name: "analyser.go",
- Tree: treeTo,
- TreeEntry: object.TreeEntry{
- Name: "analyser.go",
- Mode: 0100644,
- Hash: plumbing.NewHash("334cde09da4afcb74f8d2b3e6fd6cce61228b485"),
- },
- }}
- changes[1] = &object.Change{From: object.ChangeEntry{}, To: object.ChangeEntry{
- Name: ".travis.yml",
- Tree: treeTo,
- TreeEntry: object.TreeEntry{
- Name: ".travis.yml",
- Mode: 0100644,
- Hash: plumbing.NewHash("291286b4ac41952cbd1389fda66420ec03c1a9fe"),
- },
- },
- }
- changes[2] = &object.Change{From: object.ChangeEntry{
- Name: "rbtree.go",
- Tree: treeFrom,
- TreeEntry: object.TreeEntry{
- Name: "rbtree.go",
- Mode: 0100644,
- Hash: plumbing.NewHash("14c3fa5a1cca103032f10379467a3a2f210e5f94"),
- },
- }, To: object.ChangeEntry{},
- }
- deps["changes"] = changes
- res, err := fd.Consume(deps)
- assert.Nil(t, err)
- diffs := res["file_diff"].(map[string]FileDiffData)
- assert.Equal(t, len(diffs), 1)
- diff := diffs["analyser.go"]
- assert.Equal(t, diff.OldLinesOfCode, 307)
- assert.Equal(t, diff.NewLinesOfCode, 309)
- deletions := 0
- insertions := 0
- for _, edit := range diff.Diffs {
- switch edit.Type {
- case diffmatchpatch.DiffEqual:
- continue
- case diffmatchpatch.DiffInsert:
- insertions += utf8.RuneCountInString(edit.Text)
- case diffmatchpatch.DiffDelete:
- deletions += utf8.RuneCountInString(edit.Text)
- }
- }
- assert.Equal(t, deletions, 13)
- assert.Equal(t, insertions, 15)
- }
- func TestFileDiffConsumeInvalidBlob(t *testing.T) {
- fd := fixtureFileDiff()
- deps := map[string]interface{}{}
- cache := map[plumbing.Hash]*object.Blob{}
- hash := plumbing.NewHash("291286b4ac41952cbd1389fda66420ec03c1a9fe")
- cache[hash], _ = testRepository.BlobObject(hash)
- hash = plumbing.NewHash("334cde09da4afcb74f8d2b3e6fd6cce61228b485")
- cache[hash], _ = testRepository.BlobObject(hash)
- hash = plumbing.NewHash("dc248ba2b22048cc730c571a748e8ffcf7085ab9")
- cache[hash], _ = testRepository.BlobObject(hash)
- deps["blob_cache"] = cache
- changes := make(object.Changes, 1)
- treeFrom, _ := testRepository.TreeObject(plumbing.NewHash(
- "a1eb2ea76eb7f9bfbde9b243861474421000eb96"))
- treeTo, _ := testRepository.TreeObject(plumbing.NewHash(
- "994eac1cd07235bb9815e547a75c84265dea00f5"))
- changes[0] = &object.Change{From: object.ChangeEntry{
- Name: "analyser.go",
- Tree: treeFrom,
- TreeEntry: object.TreeEntry{
- Name: "analyser.go",
- Mode: 0100644,
- Hash: plumbing.NewHash("ffffffffffffffffffffffffffffffffffffffff"),
- },
- }, To: object.ChangeEntry{
- Name: "analyser.go",
- Tree: treeTo,
- TreeEntry: object.TreeEntry{
- Name: "analyser.go",
- Mode: 0100644,
- Hash: plumbing.NewHash("334cde09da4afcb74f8d2b3e6fd6cce61228b485"),
- },
- }}
- deps["changes"] = changes
- res, err := fd.Consume(deps)
- assert.Nil(t, res)
- assert.NotNil(t, err)
- changes[0] = &object.Change{From: object.ChangeEntry{
- Name: "analyser.go",
- Tree: treeFrom,
- TreeEntry: object.TreeEntry{
- Name: "analyser.go",
- Mode: 0100644,
- Hash: plumbing.NewHash("dc248ba2b22048cc730c571a748e8ffcf7085ab9"),
- },
- }, To: object.ChangeEntry{
- Name: "analyser.go",
- Tree: treeTo,
- TreeEntry: object.TreeEntry{
- Name: "analyser.go",
- Mode: 0100644,
- Hash: plumbing.NewHash("ffffffffffffffffffffffffffffffffffffffff"),
- },
- }}
- res, err = fd.Consume(deps)
- assert.Nil(t, res)
- assert.NotNil(t, err)
- }
|