1package merkletrie_test
2
3import (
4	"github.com/go-git/go-git/v5/utils/merkletrie"
5	"github.com/go-git/go-git/v5/utils/merkletrie/internal/fsnoder"
6	"github.com/go-git/go-git/v5/utils/merkletrie/noder"
7
8	. "gopkg.in/check.v1"
9)
10
11type ChangeSuite struct{}
12
13var _ = Suite(&ChangeSuite{})
14
15func (s *ChangeSuite) TestActionString(c *C) {
16	action := merkletrie.Insert
17	c.Assert(action.String(), Equals, "Insert")
18
19	action = merkletrie.Delete
20	c.Assert(action.String(), Equals, "Delete")
21
22	action = merkletrie.Modify
23	c.Assert(action.String(), Equals, "Modify")
24}
25
26func (s *ChangeSuite) TestUnsupportedAction(c *C) {
27	a := merkletrie.Action(42)
28	c.Assert(a.String, PanicMatches, "unsupported action.*")
29}
30
31func (s ChangeSuite) TestNewInsert(c *C) {
32	tree, err := fsnoder.New("(a(b(z<>)))")
33	c.Assert(err, IsNil)
34	path := find(c, tree, "z")
35	change := merkletrie.NewInsert(path)
36	c.Assert(change.String(), Equals, "<Insert a/b/z>")
37
38	shortPath := noder.Path([]noder.Noder{path.Last()})
39	change = merkletrie.NewInsert(shortPath)
40	c.Assert(change.String(), Equals, "<Insert z>")
41}
42
43func (s ChangeSuite) TestNewDelete(c *C) {
44	tree, err := fsnoder.New("(a(b(z<>)))")
45	c.Assert(err, IsNil)
46	path := find(c, tree, "z")
47	change := merkletrie.NewDelete(path)
48	c.Assert(change.String(), Equals, "<Delete a/b/z>")
49
50	shortPath := noder.Path([]noder.Noder{path.Last()})
51	change = merkletrie.NewDelete(shortPath)
52	c.Assert(change.String(), Equals, "<Delete z>")
53}
54
55func (s ChangeSuite) TestNewModify(c *C) {
56	tree1, err := fsnoder.New("(a(b(z<>)))")
57	c.Assert(err, IsNil)
58	path1 := find(c, tree1, "z")
59
60	tree2, err := fsnoder.New("(a(b(z<1>)))")
61	c.Assert(err, IsNil)
62	path2 := find(c, tree2, "z")
63
64	change := merkletrie.NewModify(path1, path2)
65	c.Assert(change.String(), Equals, "<Modify a/b/z>")
66
67	shortPath1 := noder.Path([]noder.Noder{path1.Last()})
68	shortPath2 := noder.Path([]noder.Noder{path2.Last()})
69	change = merkletrie.NewModify(shortPath1, shortPath2)
70	c.Assert(change.String(), Equals, "<Modify z>")
71}
72
73func (s ChangeSuite) TestMalformedChange(c *C) {
74	change := merkletrie.Change{}
75	c.Assert(change.String, PanicMatches, "malformed change.*")
76}
77