datavalidation_test.go 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // Copyright 2016 - 2019 The excelize Authors. All rights reserved. Use of
  2. // this source code is governed by a BSD-style license that can be found in
  3. // the LICENSE file.
  4. //
  5. // Package excelize providing a set of functions that allow you to write to
  6. // and read from XLSX files. Support reads and writes XLSX file generated by
  7. // Microsoft Excel™ 2007 and later. Support save file without losing original
  8. // charts of XLSX. This library needs Go version 1.10 or later.
  9. package excelize
  10. import (
  11. "path/filepath"
  12. "strings"
  13. "testing"
  14. "github.com/stretchr/testify/assert"
  15. )
  16. func TestDataValidation(t *testing.T) {
  17. resultFile := filepath.Join("test", "TestDataValidation.xlsx")
  18. f := NewFile()
  19. dvRange := NewDataValidation(true)
  20. dvRange.Sqref = "A1:B2"
  21. dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorBetween)
  22. dvRange.SetError(DataValidationErrorStyleStop, "error title", "error body")
  23. dvRange.SetError(DataValidationErrorStyleWarning, "error title", "error body")
  24. dvRange.SetError(DataValidationErrorStyleInformation, "error title", "error body")
  25. f.AddDataValidation("Sheet1", dvRange)
  26. if !assert.NoError(t, f.SaveAs(resultFile)) {
  27. t.FailNow()
  28. }
  29. dvRange = NewDataValidation(true)
  30. dvRange.Sqref = "A3:B4"
  31. dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorGreaterThan)
  32. dvRange.SetInput("input title", "input body")
  33. f.AddDataValidation("Sheet1", dvRange)
  34. if !assert.NoError(t, f.SaveAs(resultFile)) {
  35. t.FailNow()
  36. }
  37. dvRange = NewDataValidation(true)
  38. dvRange.Sqref = "A5:B6"
  39. dvRange.SetDropList([]string{"1", "2", "3"})
  40. f.AddDataValidation("Sheet1", dvRange)
  41. if !assert.NoError(t, f.SaveAs(resultFile)) {
  42. t.FailNow()
  43. }
  44. }
  45. func TestDataValidationError(t *testing.T) {
  46. resultFile := filepath.Join("test", "TestDataValidationError.xlsx")
  47. f := NewFile()
  48. f.SetCellStr("Sheet1", "E1", "E1")
  49. f.SetCellStr("Sheet1", "E2", "E2")
  50. f.SetCellStr("Sheet1", "E3", "E3")
  51. dvRange := NewDataValidation(true)
  52. dvRange.SetSqref("A7:B8")
  53. dvRange.SetSqref("A7:B8")
  54. dvRange.SetSqrefDropList("$E$1:$E$3", true)
  55. err := dvRange.SetSqrefDropList("$E$1:$E$3", false)
  56. assert.EqualError(t, err, "cross-sheet sqref cell are not supported")
  57. f.AddDataValidation("Sheet1", dvRange)
  58. if !assert.NoError(t, f.SaveAs(resultFile)) {
  59. t.FailNow()
  60. }
  61. dvRange = NewDataValidation(true)
  62. err = dvRange.SetDropList(make([]string, 258))
  63. if dvRange.Formula1 != "" {
  64. t.Errorf("data validation error. Formula1 must be empty!")
  65. return
  66. }
  67. assert.EqualError(t, err, "data validation must be 0-255 characters")
  68. dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorGreaterThan)
  69. dvRange.SetSqref("A9:B10")
  70. f.AddDataValidation("Sheet1", dvRange)
  71. if !assert.NoError(t, f.SaveAs(resultFile)) {
  72. t.FailNow()
  73. }
  74. // Test width invalid data validation formula.
  75. dvRange.Formula1 = strings.Repeat("s", dataValidationFormulaStrLen+22)
  76. assert.EqualError(t, dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorGreaterThan), "data validation must be 0-255 characters")
  77. // Test add data validation on no exists worksheet.
  78. f = NewFile()
  79. assert.EqualError(t, f.AddDataValidation("SheetN", nil), "sheet SheetN is not exist")
  80. }