| package frame |
| |
| import ( |
| "fmt" |
| "testing" |
| |
| "gopkg.in/src-d/go-git.v4/utils/merkletrie/internal/fsnoder" |
| "gopkg.in/src-d/go-git.v4/utils/merkletrie/noder" |
| |
| . "gopkg.in/check.v1" |
| ) |
| |
| func Test(t *testing.T) { TestingT(t) } |
| |
| type FrameSuite struct{} |
| |
| var _ = Suite(&FrameSuite{}) |
| |
| func (s *FrameSuite) TestNewFrameFromEmptyDir(c *C) { |
| A, err := fsnoder.New("A()") |
| c.Assert(err, IsNil) |
| |
| frame, err := New(A) |
| c.Assert(err, IsNil) |
| |
| expectedString := `[]` |
| c.Assert(frame.String(), Equals, expectedString) |
| |
| first, ok := frame.First() |
| c.Assert(first, IsNil) |
| c.Assert(ok, Equals, false) |
| |
| first, ok = frame.First() |
| c.Assert(first, IsNil) |
| c.Assert(ok, Equals, false) |
| |
| l := frame.Len() |
| c.Assert(l, Equals, 0) |
| } |
| |
| func (s *FrameSuite) TestNewFrameFromNonEmpty(c *C) { |
| // _______A/________ |
| // | / \ | |
| // x y B/ C/ |
| // | |
| // z |
| root, err := fsnoder.New("A(x<> y<> B() C(z<>))") |
| c.Assert(err, IsNil) |
| frame, err := New(root) |
| c.Assert(err, IsNil) |
| |
| expectedString := `["B", "C", "x", "y"]` |
| c.Assert(frame.String(), Equals, expectedString) |
| |
| l := frame.Len() |
| c.Assert(l, Equals, 4) |
| |
| checkFirstAndDrop(c, frame, "B", true) |
| l = frame.Len() |
| c.Assert(l, Equals, 3) |
| |
| checkFirstAndDrop(c, frame, "C", true) |
| l = frame.Len() |
| c.Assert(l, Equals, 2) |
| |
| checkFirstAndDrop(c, frame, "x", true) |
| l = frame.Len() |
| c.Assert(l, Equals, 1) |
| |
| checkFirstAndDrop(c, frame, "y", true) |
| l = frame.Len() |
| c.Assert(l, Equals, 0) |
| |
| checkFirstAndDrop(c, frame, "", false) |
| l = frame.Len() |
| c.Assert(l, Equals, 0) |
| |
| checkFirstAndDrop(c, frame, "", false) |
| } |
| |
| func checkFirstAndDrop(c *C, f *Frame, expectedNodeName string, expectedOK bool) { |
| first, ok := f.First() |
| c.Assert(ok, Equals, expectedOK) |
| if expectedOK { |
| c.Assert(first.Name(), Equals, expectedNodeName) |
| } |
| |
| f.Drop() |
| } |
| |
| // a mock noder that returns error when Children() is called |
| type errorNoder struct{ noder.Noder } |
| |
| func (e *errorNoder) Children() ([]noder.Noder, error) { |
| return nil, fmt.Errorf("mock error") |
| } |
| |
| func (s *FrameSuite) TestNewFrameErrors(c *C) { |
| _, err := New(&errorNoder{}) |
| c.Assert(err, ErrorMatches, "mock error") |
| } |