datavalidation_test.go 3.3 KB
Newer Older
xurime's avatar
xurime 已提交
1
// Copyright 2016 - 2020 The excelize Authors. All rights reserved. Use of
xurime's avatar
xurime 已提交
2 3 4 5 6 7
// this source code is governed by a BSD-style license that can be found in
// the LICENSE file.
//
// Package excelize providing a set of functions that allow you to write to
// and read from XLSX files. Support reads and writes XLSX file generated by
// Microsoft Excel™ 2007 and later. Support save file without losing original
8
// charts of XLSX. This library needs Go version 1.10 or later.
xurime's avatar
xurime 已提交
9

10 11
package excelize

V
Veniamin Albaev 已提交
12
import (
13
	"path/filepath"
xurime's avatar
xurime 已提交
14
	"strings"
V
Veniamin Albaev 已提交
15 16 17 18
	"testing"

	"github.com/stretchr/testify/assert"
)
19 20

func TestDataValidation(t *testing.T) {
21
	resultFile := filepath.Join("test", "TestDataValidation.xlsx")
V
Veniamin Albaev 已提交
22

23
	f := NewFile()
24 25 26

	dvRange := NewDataValidation(true)
	dvRange.Sqref = "A1:B2"
27
	assert.NoError(t, dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorBetween))
28
	dvRange.SetError(DataValidationErrorStyleStop, "error title", "error body")
29 30
	dvRange.SetError(DataValidationErrorStyleWarning, "error title", "error body")
	dvRange.SetError(DataValidationErrorStyleInformation, "error title", "error body")
31 32
	assert.NoError(t, f.AddDataValidation("Sheet1", dvRange))
	assert.NoError(t, f.SaveAs(resultFile))
33 34 35

	dvRange = NewDataValidation(true)
	dvRange.Sqref = "A3:B4"
36
	assert.NoError(t, dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorGreaterThan))
37
	dvRange.SetInput("input title", "input body")
38 39
	assert.NoError(t, f.AddDataValidation("Sheet1", dvRange))
	assert.NoError(t, f.SaveAs(resultFile))
40 41 42

	dvRange = NewDataValidation(true)
	dvRange.Sqref = "A5:B6"
43 44 45
	assert.NoError(t, dvRange.SetDropList([]string{"1", "2", "3"}))
	assert.NoError(t, f.AddDataValidation("Sheet1", dvRange))
	assert.NoError(t, f.SaveAs(resultFile))
V
Veniamin Albaev 已提交
46
}
47

V
Veniamin Albaev 已提交
48
func TestDataValidationError(t *testing.T) {
49
	resultFile := filepath.Join("test", "TestDataValidationError.xlsx")
V
Veniamin Albaev 已提交
50

51
	f := NewFile()
52 53 54
	assert.NoError(t, f.SetCellStr("Sheet1", "E1", "E1"))
	assert.NoError(t, f.SetCellStr("Sheet1", "E2", "E2"))
	assert.NoError(t, f.SetCellStr("Sheet1", "E3", "E3"))
V
Veniamin Albaev 已提交
55 56

	dvRange := NewDataValidation(true)
57 58
	dvRange.SetSqref("A7:B8")
	dvRange.SetSqref("A7:B8")
59
	assert.NoError(t, dvRange.SetSqrefDropList("$E$1:$E$3", true))
V
Veniamin Albaev 已提交
60

61
	err := dvRange.SetSqrefDropList("$E$1:$E$3", false)
V
Veniamin Albaev 已提交
62 63
	assert.EqualError(t, err, "cross-sheet sqref cell are not supported")

64 65
	assert.NoError(t, f.AddDataValidation("Sheet1", dvRange))
	assert.NoError(t, f.SaveAs(resultFile))
66

67
	dvRange = NewDataValidation(true)
68 69 70 71 72
	err = dvRange.SetDropList(make([]string, 258))
	if dvRange.Formula1 != "" {
		t.Errorf("data validation error. Formula1 must be empty!")
		return
	}
V
Veniamin Albaev 已提交
73
	assert.EqualError(t, err, "data validation must be 0-255 characters")
74
	assert.NoError(t, dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorGreaterThan))
75
	dvRange.SetSqref("A9:B10")
76

77 78
	assert.NoError(t, f.AddDataValidation("Sheet1", dvRange))
	assert.NoError(t, f.SaveAs(resultFile))
xurime's avatar
xurime 已提交
79 80 81 82 83 84 85 86

	// Test width invalid data validation formula.
	dvRange.Formula1 = strings.Repeat("s", dataValidationFormulaStrLen+22)
	assert.EqualError(t, dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorGreaterThan), "data validation must be 0-255 characters")

	// Test add data validation on no exists worksheet.
	f = NewFile()
	assert.EqualError(t, f.AddDataValidation("SheetN", nil), "sheet SheetN is not exist")
87
}