summaryrefslogtreecommitdiff
path: root/table_test.go
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2019-12-29 16:02:31 +0800
committerxuri <xuri.me@gmail.com>2019-12-29 16:02:31 +0800
commit09485b3f9f0aefc58d51462aed65c2416205c591 (patch)
treef5fbe1830e03875d4c5422110f42ad665b91b14f /table_test.go
parent5c87effc7e6c97fff36a56dea1afac8a2f06fb37 (diff)
Improve code coverage unit tests
Diffstat (limited to 'table_test.go')
-rw-r--r--table_test.go125
1 files changed, 125 insertions, 0 deletions
diff --git a/table_test.go b/table_test.go
new file mode 100644
index 0000000..89c03e2
--- /dev/null
+++ b/table_test.go
@@ -0,0 +1,125 @@
+package excelize
+
+import (
+ "fmt"
+ "path/filepath"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestAddTable(t *testing.T) {
+ f, err := prepareTestBook1()
+ if !assert.NoError(t, err) {
+ t.FailNow()
+ }
+
+ err = f.AddTable("Sheet1", "B26", "A21", `{}`)
+ if !assert.NoError(t, err) {
+ t.FailNow()
+ }
+
+ err = f.AddTable("Sheet2", "A2", "B5", `{"table_name":"table","table_style":"TableStyleMedium2", "show_first_column":true,"show_last_column":true,"show_row_stripes":false,"show_column_stripes":true}`)
+ if !assert.NoError(t, err) {
+ t.FailNow()
+ }
+
+ err = f.AddTable("Sheet2", "F1", "F1", `{"table_style":"TableStyleMedium8"}`)
+ if !assert.NoError(t, err) {
+ t.FailNow()
+ }
+
+ // Test add table with illegal formatset.
+ assert.EqualError(t, f.AddTable("Sheet1", "B26", "A21", `{x}`), "invalid character 'x' looking for beginning of object key string")
+ // Test add table with illegal cell coordinates.
+ assert.EqualError(t, f.AddTable("Sheet1", "A", "B1", `{}`), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.AddTable("Sheet1", "A1", "B", `{}`), `cannot convert cell "B" to coordinates: invalid cell name "B"`)
+
+ assert.NoError(t, f.SaveAs(filepath.Join("test", "TestAddTable.xlsx")))
+
+ // Test addTable with illegal cell coordinates.
+ f = NewFile()
+ assert.EqualError(t, f.addTable("sheet1", "", 0, 0, 0, 0, 0, nil), "invalid cell coordinates [0, 0]")
+ assert.EqualError(t, f.addTable("sheet1", "", 1, 1, 0, 0, 0, nil), "invalid cell coordinates [0, 0]")
+}
+
+func TestAutoFilter(t *testing.T) {
+ outFile := filepath.Join("test", "TestAutoFilter%d.xlsx")
+
+ f, err := prepareTestBook1()
+ if !assert.NoError(t, err) {
+ t.FailNow()
+ }
+
+ formats := []string{
+ ``,
+ `{"column":"B","expression":"x != blanks"}`,
+ `{"column":"B","expression":"x == blanks"}`,
+ `{"column":"B","expression":"x != nonblanks"}`,
+ `{"column":"B","expression":"x == nonblanks"}`,
+ `{"column":"B","expression":"x <= 1 and x >= 2"}`,
+ `{"column":"B","expression":"x == 1 or x == 2"}`,
+ `{"column":"B","expression":"x == 1 or x == 2*"}`,
+ }
+
+ for i, format := range formats {
+ t.Run(fmt.Sprintf("Expression%d", i+1), func(t *testing.T) {
+ err = f.AutoFilter("Sheet1", "D4", "B1", format)
+ assert.NoError(t, err)
+ assert.NoError(t, f.SaveAs(fmt.Sprintf(outFile, i+1)))
+ })
+ }
+
+ // testing AutoFilter with illegal cell coordinates.
+ assert.EqualError(t, f.AutoFilter("Sheet1", "A", "B1", ""), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.AutoFilter("Sheet1", "A1", "B", ""), `cannot convert cell "B" to coordinates: invalid cell name "B"`)
+}
+
+func TestAutoFilterError(t *testing.T) {
+ outFile := filepath.Join("test", "TestAutoFilterError%d.xlsx")
+
+ f, err := prepareTestBook1()
+ if !assert.NoError(t, err) {
+ t.FailNow()
+ }
+
+ formats := []string{
+ `{"column":"B","expression":"x <= 1 and x >= blanks"}`,
+ `{"column":"B","expression":"x -- y or x == *2*"}`,
+ `{"column":"B","expression":"x != y or x ? *2"}`,
+ `{"column":"B","expression":"x -- y o r x == *2"}`,
+ `{"column":"B","expression":"x -- y"}`,
+ `{"column":"A","expression":"x -- y"}`,
+ }
+ for i, format := range formats {
+ t.Run(fmt.Sprintf("Expression%d", i+1), func(t *testing.T) {
+ err = f.AutoFilter("Sheet3", "D4", "B1", format)
+ if assert.Error(t, err) {
+ assert.NoError(t, f.SaveAs(fmt.Sprintf(outFile, i+1)))
+ }
+ })
+ }
+
+ assert.EqualError(t, f.autoFilter("Sheet1", "A1", 1, 1, &formatAutoFilter{
+ Column: "-",
+ Expression: "-",
+ }), `invalid column name "-"`)
+ assert.EqualError(t, f.autoFilter("Sheet1", "A1", 1, 100, &formatAutoFilter{
+ Column: "A",
+ Expression: "-",
+ }), `incorrect index of column 'A'`)
+ assert.EqualError(t, f.autoFilter("Sheet1", "A1", 1, 1, &formatAutoFilter{
+ Column: "A",
+ Expression: "-",
+ }), `incorrect number of tokens in criteria '-'`)
+}
+
+func TestParseFilterTokens(t *testing.T) {
+ f := NewFile()
+ // Test with unknown operator.
+ _, _, err := f.parseFilterTokens("", []string{"", "!"})
+ assert.EqualError(t, err, "unknown operator: !")
+ // Test invalid operator in context.
+ _, _, err = f.parseFilterTokens("", []string{"", "<", "x != blanks"})
+ assert.EqualError(t, err, "the operator '<' in expression '' is not valid in relation to Blanks/NonBlanks'")
+}