|
@@ -4,26 +4,162 @@ import (
|
|
|
. "gopkg.in/check.v1"
|
|
. "gopkg.in/check.v1"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+type ColSuite struct{}
|
|
|
|
|
+
|
|
|
|
|
+var _ = Suite(&ColSuite{})
|
|
|
|
|
+
|
|
|
|
|
+func (cs *ColSuite) TestCopyToRange(c *C) {
|
|
|
|
|
+ nf := &parsedNumberFormat{}
|
|
|
|
|
+ s := &Style{}
|
|
|
|
|
+ cdv1 := &xlsxCellDataValidation{}
|
|
|
|
|
+ cdv2 := &xlsxCellDataValidation{}
|
|
|
|
|
+ ct := CellTypeBool.Ptr()
|
|
|
|
|
+ c1 := &Col{
|
|
|
|
|
+ Min: 0,
|
|
|
|
|
+ Max: 10,
|
|
|
|
|
+ Hidden: true,
|
|
|
|
|
+ Width: 300.4,
|
|
|
|
|
+ Collapsed: true,
|
|
|
|
|
+ OutlineLevel: 2,
|
|
|
|
|
+ numFmt: "-0.00",
|
|
|
|
|
+ parsedNumFmt: nf,
|
|
|
|
|
+ style: s,
|
|
|
|
|
+ DataValidation: []*xlsxCellDataValidation{cdv1, cdv2},
|
|
|
|
|
+ defaultCellType: ct,
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ c2 := c1.copyToRange(4, 10)
|
|
|
|
|
+ c.Assert(c2.Min, Equals, 4)
|
|
|
|
|
+ c.Assert(c2.Max, Equals, 10)
|
|
|
|
|
+ c.Assert(c2.Hidden, Equals, c1.Hidden)
|
|
|
|
|
+ c.Assert(c2.Width, Equals, c1.Width)
|
|
|
|
|
+ c.Assert(c2.Collapsed, Equals, c1.Collapsed)
|
|
|
|
|
+ c.Assert(c2.OutlineLevel, Equals, c1.OutlineLevel)
|
|
|
|
|
+ c.Assert(c2.numFmt, Equals, c1.numFmt)
|
|
|
|
|
+ c.Assert(c2.parsedNumFmt, Equals, c1.parsedNumFmt)
|
|
|
|
|
+ c.Assert(c2.style, Equals, c1.style)
|
|
|
|
|
+ c.Assert(c2.DataValidation, HasLen, 2)
|
|
|
|
|
+ c.Assert(c2.DataValidation[0], Equals, c1.DataValidation[0])
|
|
|
|
|
+ c.Assert(c2.DataValidation[1], Equals, c1.DataValidation[1])
|
|
|
|
|
+ c.Assert(c2.defaultCellType, Equals, c1.defaultCellType)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
type ColStoreSuite struct{}
|
|
type ColStoreSuite struct{}
|
|
|
|
|
|
|
|
var _ = Suite(&ColStoreSuite{})
|
|
var _ = Suite(&ColStoreSuite{})
|
|
|
|
|
|
|
|
-func (css *ColStoreSuite) TestAddOneNode(c *C) {
|
|
|
|
|
|
|
+func (css *ColStoreSuite) TestAddRootNode(c *C) {
|
|
|
col := &Col{Min: 0, Max: 1}
|
|
col := &Col{Min: 0, Max: 1}
|
|
|
cs := ColStore{}
|
|
cs := ColStore{}
|
|
|
- err := cs.Add(col)
|
|
|
|
|
- c.Assert(err, IsNil)
|
|
|
|
|
|
|
+ cs.Add(col)
|
|
|
c.Assert(cs.Root.Col, Equals, col)
|
|
c.Assert(cs.Root.Col, Equals, col)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (css *ColStoreSuite) TestAddTwoNonOverlappingSequentialNodes(c *C) {
|
|
|
|
|
- col1 := &Col{Min: 0, Max: 1}
|
|
|
|
|
- col2 := &Col{Min: 2, Max: 4}
|
|
|
|
|
- cs := ColStore{}
|
|
|
|
|
- err := cs.Add(col1)
|
|
|
|
|
- c.Assert(err, IsNil)
|
|
|
|
|
- err = cs.Add(col2)
|
|
|
|
|
- c.Assert(err, IsNil)
|
|
|
|
|
- c.Assert(cs.Root.Col, Equals, col1)
|
|
|
|
|
- c.Assert(cs.Root.Next.Col, Equals, col2)
|
|
|
|
|
|
|
+func (css *ColStoreSuite) TestMakeWay(c *C) {
|
|
|
|
|
+ assertWayMade := func(cols []*Col, chainFunc func(root *colStoreNode)) {
|
|
|
|
|
+
|
|
|
|
|
+ cs := ColStore{}
|
|
|
|
|
+ for _, col := range cols {
|
|
|
|
|
+ cs.Add(col)
|
|
|
|
|
+ }
|
|
|
|
|
+ chainFunc(cs.Root)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Col1: |--|
|
|
|
|
|
+ // Col2: |--|
|
|
|
|
|
+ assertWayMade([]*Col{&Col{Min: 0, Max: 1}, &Col{Min: 2, Max: 3}},
|
|
|
|
|
+ func(root *colStoreNode) {
|
|
|
|
|
+ c.Assert(root.Col.Min, Equals, 0)
|
|
|
|
|
+ c.Assert(root.Col.Max, Equals, 1)
|
|
|
|
|
+ c.Assert(root.Prev, IsNil)
|
|
|
|
|
+ c.Assert(root.Next, NotNil)
|
|
|
|
|
+ node2 := root.Next
|
|
|
|
|
+ c.Assert(node2.Prev, Equals, root)
|
|
|
|
|
+ c.Assert(node2.Next, IsNil)
|
|
|
|
|
+ c.Assert(node2.Col.Min, Equals, 2)
|
|
|
|
|
+ c.Assert(node2.Col.Max, Equals, 3)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ // Col1: |--|
|
|
|
|
|
+ // Col2: |--|
|
|
|
|
|
+ assertWayMade([]*Col{&Col{Min: 2, Max: 3}, &Col{Min: 0, Max: 1}},
|
|
|
|
|
+ func(root *colStoreNode) {
|
|
|
|
|
+ c.Assert(root.Col.Min, Equals, 2)
|
|
|
|
|
+ c.Assert(root.Col.Max, Equals, 3)
|
|
|
|
|
+ c.Assert(root.Prev, NotNil)
|
|
|
|
|
+ c.Assert(root.Next, IsNil)
|
|
|
|
|
+ node2 := root.Prev
|
|
|
|
|
+ c.Assert(node2.Next, Equals, root)
|
|
|
|
|
+ c.Assert(node2.Prev, IsNil)
|
|
|
|
|
+ c.Assert(node2.Col.Min, Equals, 0)
|
|
|
|
|
+ c.Assert(node2.Col.Max, Equals, 1)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ // Col1: |--x|
|
|
|
|
|
+ // Col2: |--|
|
|
|
|
|
+ assertWayMade([]*Col{&Col{Min: 0, Max: 2}, &Col{Min: 2, Max: 3}},
|
|
|
|
|
+ func(root *colStoreNode) {
|
|
|
|
|
+ c.Assert(root.Col.Min, Equals, 0)
|
|
|
|
|
+ c.Assert(root.Col.Max, Equals, 1)
|
|
|
|
|
+ c.Assert(root.Prev, IsNil)
|
|
|
|
|
+ c.Assert(root.Next, NotNil)
|
|
|
|
|
+ node2 := root.Next
|
|
|
|
|
+ c.Assert(node2.Prev, Equals, root)
|
|
|
|
|
+ c.Assert(node2.Next, IsNil)
|
|
|
|
|
+ c.Assert(node2.Col.Min, Equals, 2)
|
|
|
|
|
+ c.Assert(node2.Col.Max, Equals, 3)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ // Col1: |x-|
|
|
|
|
|
+ // Col2: |--|
|
|
|
|
|
+ assertWayMade([]*Col{&Col{Min: 1, Max: 2}, &Col{Min: 0, Max: 1}},
|
|
|
|
|
+ func(root *colStoreNode) {
|
|
|
|
|
+ c.Assert(root.Col.Min, Equals, 2)
|
|
|
|
|
+ c.Assert(root.Col.Max, Equals, 2)
|
|
|
|
|
+ c.Assert(root.Prev, NotNil)
|
|
|
|
|
+ c.Assert(root.Next, IsNil)
|
|
|
|
|
+ node2 := root.Prev
|
|
|
|
|
+ c.Assert(node2.Next, Equals, root)
|
|
|
|
|
+ c.Assert(node2.Prev, IsNil)
|
|
|
|
|
+ c.Assert(node2.Col.Min, Equals, 0)
|
|
|
|
|
+ c.Assert(node2.Col.Max, Equals, 1)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ // Col1: |---xx---|
|
|
|
|
|
+ // Col2: |--|
|
|
|
|
|
+ assertWayMade([]*Col{&Col{Min: 0, Max: 7}, &Col{Min: 3, Max: 4}},
|
|
|
|
|
+ func(root *colStoreNode) {
|
|
|
|
|
+ c.Assert(root.Prev, IsNil)
|
|
|
|
|
+ c.Assert(root.Next, NotNil)
|
|
|
|
|
+ node2 := root.Next
|
|
|
|
|
+ c.Assert(node2.Prev, Equals, root)
|
|
|
|
|
+ c.Assert(node2.Col.Min, Equals, 3)
|
|
|
|
|
+ c.Assert(node2.Col.Max, Equals, 4)
|
|
|
|
|
+ c.Assert(node2.Next, NotNil)
|
|
|
|
|
+ node3 := node2.Next
|
|
|
|
|
+ c.Assert(node3.Prev, Equals, node2)
|
|
|
|
|
+ c.Assert(node3.Next, IsNil)
|
|
|
|
|
+ c.Assert(node3.Col.Min, Equals, 5)
|
|
|
|
|
+ c.Assert(node3.Col.Max, Equals, 7)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ // Col1: |--|
|
|
|
|
|
+ // Col2: |--|
|
|
|
|
|
+ // Col3: |
|
|
|
|
|
+ assertWayMade([]*Col{&Col{Min: 0, Max: 7}, &Col{Min: 3, Max: 4}},
|
|
|
|
|
+ func(root *colStoreNode) {
|
|
|
|
|
+ c.Assert(root.Prev, IsNil)
|
|
|
|
|
+ c.Assert(root.Next, NotNil)
|
|
|
|
|
+ node2 := root.Next
|
|
|
|
|
+ c.Assert(node2.Prev, Equals, root)
|
|
|
|
|
+ c.Assert(node2.Col.Min, Equals, 3)
|
|
|
|
|
+ c.Assert(node2.Col.Max, Equals, 4)
|
|
|
|
|
+ c.Assert(node2.Next, NotNil)
|
|
|
|
|
+ node3 := node2.Next
|
|
|
|
|
+ c.Assert(node3.Prev, Equals, node2)
|
|
|
|
|
+ c.Assert(node3.Next, IsNil)
|
|
|
|
|
+ c.Assert(node3.Col.Min, Equals, 5)
|
|
|
|
|
+ c.Assert(node3.Col.Max, Equals, 7)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
}
|
|
}
|