table_test.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package excelize
  2. import (
  3. "fmt"
  4. "path/filepath"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. func TestAddTable(t *testing.T) {
  9. f, err := prepareTestBook1()
  10. if !assert.NoError(t, err) {
  11. t.FailNow()
  12. }
  13. err = f.AddTable("Sheet1", "B26", "A21", `{}`)
  14. if !assert.NoError(t, err) {
  15. t.FailNow()
  16. }
  17. 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}`)
  18. if !assert.NoError(t, err) {
  19. t.FailNow()
  20. }
  21. err = f.AddTable("Sheet2", "F1", "F1", `{"table_style":"TableStyleMedium8"}`)
  22. if !assert.NoError(t, err) {
  23. t.FailNow()
  24. }
  25. // Test add table with illegal formatset.
  26. assert.EqualError(t, f.AddTable("Sheet1", "B26", "A21", `{x}`), "invalid character 'x' looking for beginning of object key string")
  27. // Test add table with illegal cell coordinates.
  28. assert.EqualError(t, f.AddTable("Sheet1", "A", "B1", `{}`), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
  29. assert.EqualError(t, f.AddTable("Sheet1", "A1", "B", `{}`), `cannot convert cell "B" to coordinates: invalid cell name "B"`)
  30. assert.NoError(t, f.SaveAs(filepath.Join("test", "TestAddTable.xlsx")))
  31. // Test addTable with illegal cell coordinates.
  32. f = NewFile()
  33. assert.EqualError(t, f.addTable("sheet1", "", 0, 0, 0, 0, 0, nil), "invalid cell coordinates [0, 0]")
  34. assert.EqualError(t, f.addTable("sheet1", "", 1, 1, 0, 0, 0, nil), "invalid cell coordinates [0, 0]")
  35. }
  36. func TestAutoFilter(t *testing.T) {
  37. outFile := filepath.Join("test", "TestAutoFilter%d.xlsx")
  38. f, err := prepareTestBook1()
  39. if !assert.NoError(t, err) {
  40. t.FailNow()
  41. }
  42. formats := []string{
  43. ``,
  44. `{"column":"B","expression":"x != blanks"}`,
  45. `{"column":"B","expression":"x == blanks"}`,
  46. `{"column":"B","expression":"x != nonblanks"}`,
  47. `{"column":"B","expression":"x == nonblanks"}`,
  48. `{"column":"B","expression":"x <= 1 and x >= 2"}`,
  49. `{"column":"B","expression":"x == 1 or x == 2"}`,
  50. `{"column":"B","expression":"x == 1 or x == 2*"}`,
  51. }
  52. for i, format := range formats {
  53. t.Run(fmt.Sprintf("Expression%d", i+1), func(t *testing.T) {
  54. err = f.AutoFilter("Sheet1", "D4", "B1", format)
  55. assert.NoError(t, err)
  56. assert.NoError(t, f.SaveAs(fmt.Sprintf(outFile, i+1)))
  57. })
  58. }
  59. // testing AutoFilter with illegal cell coordinates.
  60. assert.EqualError(t, f.AutoFilter("Sheet1", "A", "B1", ""), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
  61. assert.EqualError(t, f.AutoFilter("Sheet1", "A1", "B", ""), `cannot convert cell "B" to coordinates: invalid cell name "B"`)
  62. }
  63. func TestAutoFilterError(t *testing.T) {
  64. outFile := filepath.Join("test", "TestAutoFilterError%d.xlsx")
  65. f, err := prepareTestBook1()
  66. if !assert.NoError(t, err) {
  67. t.FailNow()
  68. }
  69. formats := []string{
  70. `{"column":"B","expression":"x <= 1 and x >= blanks"}`,
  71. `{"column":"B","expression":"x -- y or x == *2*"}`,
  72. `{"column":"B","expression":"x != y or x ? *2"}`,
  73. `{"column":"B","expression":"x -- y o r x == *2"}`,
  74. `{"column":"B","expression":"x -- y"}`,
  75. `{"column":"A","expression":"x -- y"}`,
  76. }
  77. for i, format := range formats {
  78. t.Run(fmt.Sprintf("Expression%d", i+1), func(t *testing.T) {
  79. err = f.AutoFilter("Sheet3", "D4", "B1", format)
  80. if assert.Error(t, err) {
  81. assert.NoError(t, f.SaveAs(fmt.Sprintf(outFile, i+1)))
  82. }
  83. })
  84. }
  85. assert.EqualError(t, f.autoFilter("Sheet1", "A1", 1, 1, &formatAutoFilter{
  86. Column: "-",
  87. Expression: "-",
  88. }), `invalid column name "-"`)
  89. assert.EqualError(t, f.autoFilter("Sheet1", "A1", 1, 100, &formatAutoFilter{
  90. Column: "A",
  91. Expression: "-",
  92. }), `incorrect index of column 'A'`)
  93. assert.EqualError(t, f.autoFilter("Sheet1", "A1", 1, 1, &formatAutoFilter{
  94. Column: "A",
  95. Expression: "-",
  96. }), `incorrect number of tokens in criteria '-'`)
  97. }
  98. func TestParseFilterTokens(t *testing.T) {
  99. f := NewFile()
  100. // Test with unknown operator.
  101. _, _, err := f.parseFilterTokens("", []string{"", "!"})
  102. assert.EqualError(t, err, "unknown operator: !")
  103. // Test invalid operator in context.
  104. _, _, err = f.parseFilterTokens("", []string{"", "<", "x != blanks"})
  105. assert.EqualError(t, err, "the operator '<' in expression '' is not valid in relation to Blanks/NonBlanks'")
  106. }