package noder
import . "gopkg.in/check.v1"
type NoderSuite struct{}
var _ = Suite(&NoderSuite{})
type noderMock struct {
name string
hash []byte
isDir bool
children []Noder
}
func (n noderMock) String() string { return n.Name() }
func (n noderMock) Hash() []byte { return n.hash }
func (n noderMock) Name() string { return n.name }
func (n noderMock) IsDir() bool { return n.isDir }
func (n noderMock) Children() ([]Noder, error) { return n.children, nil }
func (n noderMock) NumChildren() (int, error) { return len(n.children), nil }
// Returns a sequence with the noders 3, 2, and 1 from the
// following diagram:
//
// 3
// |
// 2
// |
// 1
// / \
// c1 c2
//
// This is also the path of "1".
func nodersFixture() []Noder {
n1 := &noderMock{
name: "1",
hash: []byte{0x00, 0x01, 0x02},
isDir: true,
children: childrenFixture(),
}
n2 := &noderMock{name: "2"}
n3 := &noderMock{name: "3"}
return []Noder{n3, n2, n1}
}
// Returns a collection of 2 noders: c1, c2.
func childrenFixture() []Noder {
c1 := &noderMock{name: "c1"}
c2 := &noderMock{name: "c2"}
return []Noder{c1, c2}
}
// Returns the same as nodersFixture but sorted by name, this is: "1",
// "2" and then "3".
func sortedNodersFixture() []Noder {
n1 := &noderMock{
name: "1",
hash: []byte{0x00, 0x01, 0x02},
isDir: true,
children: childrenFixture(),
}
n2 := &noderMock{name: "2"}
n3 := &noderMock{name: "3"}
return []Noder{n1, n2, n3} // the same as nodersFixture but sorted by name
}
// returns nodersFixture as the path of "1".
func pathFixture() Path {
return Path(nodersFixture())
}
func (s *NoderSuite) TestString(c *C) {
c.Assert(pathFixture().String(), Equals, "3/2/1")
}
func (s *NoderSuite) TestLast(c *C) {
c.Assert(pathFixture().Last().Name(), Equals, "1")
}
func (s *NoderSuite) TestPathImplementsNoder(c *C) {
p := pathFixture()
c.Assert(p.Name(), Equals, "1")
c.Assert(p.Hash(), DeepEquals, []byte{0x00, 0x01, 0x02})
c.Assert(p.IsDir(), Equals, true)
children, err := p.Children()
c.Assert(err, IsNil)
c.Assert(children, DeepEquals, childrenFixture())
numChildren, err := p.NumChildren()
c.Assert(err, IsNil)
c.Assert(numChildren, Equals, 2)
}