1 /*
2 * Tests for the lib_xlsx_writer library.
3 *
4 * Copyright 2014-2021, John McNamara, jmcnamara@cpan.org
5 *
6 */
7
8 #include "../ctest.h"
9 #include "../helper.h"
10
11 #include "../../../include/xlsxwriter/worksheet.h"
12
13
14 //Test the _write_data_validations() function.
CTEST(worksheet,write_data_validations01)15 CTEST(worksheet, write_data_validations01) {
16 char* got;
17 char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" operator=\"greaterThan\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"A1\"><formula1>0</formula1></dataValidation></dataValidations>";
18 FILE* testfile = lxw_tmpfile(NULL);
19
20 lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
21 data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
22 data_validation->criteria = LXW_VALIDATION_CRITERIA_GREATER_THAN;
23 data_validation->value_number = 0;
24
25 lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
26 worksheet->file = testfile;
27
28 worksheet_data_validation_cell(worksheet, 0, 0, data_validation);
29 _worksheet_write_data_validations(worksheet);
30
31 RUN_XLSX_STREQ(exp, got);
32
33 lxw_worksheet_free(worksheet);
34 }
35
CTEST(worksheet,write_data_validations01a)36 CTEST(worksheet, write_data_validations01a) {
37 char* got;
38 char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" operator=\"greaterThan\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"A1\"><formula1>0</formula1></dataValidation></dataValidations>";
39 FILE* testfile = lxw_tmpfile(NULL);
40
41 lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
42 data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
43 data_validation->criteria = LXW_VALIDATION_CRITERIA_GREATER_THAN;
44 data_validation->value_number = 0;
45 data_validation->ignore_blank = LXW_VALIDATION_ON;
46 data_validation->show_input = LXW_VALIDATION_ON;
47 data_validation->show_error = LXW_VALIDATION_ON;
48
49 lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
50 worksheet->file = testfile;
51
52 worksheet_data_validation_cell(worksheet, 0, 0, data_validation);
53 _worksheet_write_data_validations(worksheet);
54
55 RUN_XLSX_STREQ(exp, got);
56
57 lxw_worksheet_free(worksheet);
58 }
59
CTEST(worksheet,write_data_validations01b)60 CTEST(worksheet, write_data_validations01b) {
61 char* got;
62 char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" operator=\"greaterThan\" sqref=\"A1\"><formula1>0</formula1></dataValidation></dataValidations>";
63 FILE* testfile = lxw_tmpfile(NULL);
64
65 lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
66 data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
67 data_validation->criteria = LXW_VALIDATION_CRITERIA_GREATER_THAN;
68 data_validation->value_number = 0;
69 data_validation->ignore_blank = LXW_VALIDATION_OFF;
70 data_validation->show_input = LXW_VALIDATION_OFF;
71 data_validation->show_error = LXW_VALIDATION_OFF;
72
73 lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
74 worksheet->file = testfile;
75
76 worksheet_data_validation_cell(worksheet, 0, 0, data_validation);
77 _worksheet_write_data_validations(worksheet);
78
79 RUN_XLSX_STREQ(exp, got);
80
81 lxw_worksheet_free(worksheet);
82 }
83
CTEST(worksheet,write_data_validations02)84 CTEST(worksheet, write_data_validations02) {
85 char* got;
86 char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" operator=\"greaterThan\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"A2\"><formula1>E3</formula1></dataValidation></dataValidations>";
87 FILE* testfile = lxw_tmpfile(NULL);
88
89 lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
90 data_validation->validate = LXW_VALIDATION_TYPE_INTEGER_FORMULA;
91 data_validation->criteria = LXW_VALIDATION_CRITERIA_GREATER_THAN;
92 data_validation->value_formula = "=E3";
93
94 lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
95 worksheet->file = testfile;
96
97 worksheet_data_validation_cell(worksheet, CELL("A2"), data_validation);
98 _worksheet_write_data_validations(worksheet);
99
100 RUN_XLSX_STREQ(exp, got);
101
102 lxw_worksheet_free(worksheet);
103 }
104
CTEST(worksheet,write_data_validations03)105 CTEST(worksheet, write_data_validations03) {
106 char* got;
107 char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"decimal\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"A3\"><formula1>0.1</formula1><formula2>0.5</formula2></dataValidation></dataValidations>";
108 FILE* testfile = lxw_tmpfile(NULL);
109
110 lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
111 data_validation->validate = LXW_VALIDATION_TYPE_DECIMAL;
112 data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
113 data_validation->minimum_number = 0.1;
114 data_validation->maximum_number = 0.5;
115
116 lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
117 worksheet->file = testfile;
118
119 worksheet_data_validation_cell(worksheet, CELL("A3"), data_validation);
120 _worksheet_write_data_validations(worksheet);
121
122 RUN_XLSX_STREQ(exp, got);
123
124 lxw_worksheet_free(worksheet);
125 }
126
CTEST(worksheet,write_data_validations04)127 CTEST(worksheet, write_data_validations04) {
128 char* got;
129 char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"list\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"A4\"><formula1>\"open,high,close\"</formula1></dataValidation></dataValidations>";
130 FILE* testfile = lxw_tmpfile(NULL);
131 char *list[] = {"open", "high", "close", NULL};
132
133 lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
134 data_validation->validate = LXW_VALIDATION_TYPE_LIST;
135 data_validation->value_list = list;
136
137 lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
138 worksheet->file = testfile;
139
140 worksheet_data_validation_cell(worksheet, CELL("A4"), data_validation);
141 _worksheet_write_data_validations(worksheet);
142
143 RUN_XLSX_STREQ(exp, got);
144
145 lxw_worksheet_free(worksheet);
146 }
147
CTEST(worksheet,write_data_validations05)148 CTEST(worksheet, write_data_validations05) {
149 char* got;
150 char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"list\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"A5\"><formula1>$E$4:$G$4</formula1></dataValidation></dataValidations>";
151 FILE* testfile = lxw_tmpfile(NULL);
152
153 lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
154 data_validation->validate = LXW_VALIDATION_TYPE_LIST_FORMULA;
155 data_validation->value_formula = "=$E$4:$G$4";
156
157 lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
158 worksheet->file = testfile;
159
160 worksheet_data_validation_cell(worksheet, CELL("A5"), data_validation);
161 _worksheet_write_data_validations(worksheet);
162
163 RUN_XLSX_STREQ(exp, got);
164
165 lxw_worksheet_free(worksheet);
166 }
167
CTEST(worksheet,write_data_validations06)168 CTEST(worksheet, write_data_validations06) {
169 char* got;
170 char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"date\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"A6\"><formula1>39448</formula1><formula2>39794</formula2></dataValidation></dataValidations>";
171 FILE* testfile = lxw_tmpfile(NULL);
172 lxw_datetime datetime1 = {2008, 1, 1, 0, 0, 0};
173 lxw_datetime datetime2 = {2008, 12, 12, 0, 0, 0};
174
175 lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
176 data_validation->validate = LXW_VALIDATION_TYPE_DATE;
177 data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
178 data_validation->minimum_datetime = datetime1;
179 data_validation->maximum_datetime = datetime2;
180
181 lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
182 worksheet->file = testfile;
183
184 worksheet_data_validation_cell(worksheet, CELL("A6"), data_validation);
185 _worksheet_write_data_validations(worksheet);
186
187 RUN_XLSX_STREQ(exp, got);
188
189 lxw_worksheet_free(worksheet);
190 }
191
CTEST(worksheet,write_data_validations07)192 CTEST(worksheet, write_data_validations07) {
193 char* got;
194 char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" promptTitle=\"Enter an integer:\" prompt=\"between 1 and 100\" sqref=\"A7\"><formula1>1</formula1><formula2>100</formula2></dataValidation></dataValidations>";
195 FILE* testfile = lxw_tmpfile(NULL);
196
197 lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
198 data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
199 data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
200 data_validation->minimum_number = 1;
201 data_validation->maximum_number = 100;
202 data_validation->input_title = "Enter an integer:";
203 data_validation->input_message = "between 1 and 100";
204
205 lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
206 worksheet->file = testfile;
207
208 worksheet_data_validation_cell(worksheet, CELL("A7"), data_validation);
209 _worksheet_write_data_validations(worksheet);
210
211 RUN_XLSX_STREQ(exp, got);
212
213 lxw_worksheet_free(worksheet);
214 }
215
216