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: Integer between 1 and 10. */
CTEST(worksheet,test_write_data_validations_201)15 CTEST(worksheet, test_write_data_validations_201) {
16     char* got;
17     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>1</formula1><formula2>10</formula2></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_BETWEEN;
23     data_validation->minimum_number = 1;
24     data_validation->maximum_number = 10;
25 
26     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
27     worksheet->file = testfile;
28 
29     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
30     _worksheet_write_data_validations(worksheet);
31 
32     RUN_XLSX_STREQ(exp, got);
33 
34     lxw_worksheet_free(worksheet);
35     free(data_validation);
36 }
37 
38 /* Test: Integer not between 1 and 10. */
CTEST(worksheet,test_write_data_validations_202)39 CTEST(worksheet, test_write_data_validations_202) {
40     char* got;
41     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" operator=\"notBetween\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>1</formula1><formula2>10</formula2></dataValidation></dataValidations>";
42     FILE* testfile = lxw_tmpfile(NULL);
43 
44     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
45     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
46     data_validation->criteria = LXW_VALIDATION_CRITERIA_NOT_BETWEEN;
47     data_validation->minimum_number = 1;
48     data_validation->maximum_number = 10;
49 
50     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
51     worksheet->file = testfile;
52 
53     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
54     _worksheet_write_data_validations(worksheet);
55 
56     RUN_XLSX_STREQ(exp, got);
57 
58     lxw_worksheet_free(worksheet);
59     free(data_validation);
60 }
61 
62 
63 /* Test: Integer == 1. */
CTEST(worksheet,test_write_data_validations_203)64 CTEST(worksheet, test_write_data_validations_203) {
65     char* got;
66     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" operator=\"equal\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>1</formula1></dataValidation></dataValidations>";
67     FILE* testfile = lxw_tmpfile(NULL);
68 
69     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
70     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
71     data_validation->criteria = LXW_VALIDATION_CRITERIA_EQUAL_TO;
72     data_validation->value_number = 1;
73 
74     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
75     worksheet->file = testfile;
76 
77     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
78     _worksheet_write_data_validations(worksheet);
79 
80     RUN_XLSX_STREQ(exp, got);
81 
82     lxw_worksheet_free(worksheet);
83     free(data_validation);
84 }
85 
86 /* Test: Integer != 1. */
CTEST(worksheet,test_write_data_validations_204)87 CTEST(worksheet, test_write_data_validations_204) {
88     char* got;
89     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" operator=\"notEqual\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>1</formula1></dataValidation></dataValidations>";
90     FILE* testfile = lxw_tmpfile(NULL);
91 
92     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
93     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
94     data_validation->criteria = LXW_VALIDATION_CRITERIA_NOT_EQUAL_TO;
95     data_validation->value_number = 1;
96 
97     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
98     worksheet->file = testfile;
99 
100     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
101     _worksheet_write_data_validations(worksheet);
102 
103     RUN_XLSX_STREQ(exp, got);
104 
105     lxw_worksheet_free(worksheet);
106     free(data_validation);
107 }
108 
109 /* Test: Integer > 1. */
CTEST(worksheet,test_write_data_validations_205)110 CTEST(worksheet, test_write_data_validations_205) {
111     char* got;
112     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" operator=\"greaterThan\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>1</formula1></dataValidation></dataValidations>";
113     FILE* testfile = lxw_tmpfile(NULL);
114 
115     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
116     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
117     data_validation->criteria = LXW_VALIDATION_CRITERIA_GREATER_THAN;
118     data_validation->value_number = 1;
119 
120     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
121     worksheet->file = testfile;
122 
123     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
124     _worksheet_write_data_validations(worksheet);
125 
126     RUN_XLSX_STREQ(exp, got);
127 
128     lxw_worksheet_free(worksheet);
129     free(data_validation);
130 }
131 
132 /* Test: Integer < 1. */
CTEST(worksheet,test_write_data_validations_206)133 CTEST(worksheet, test_write_data_validations_206) {
134     char* got;
135     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" operator=\"lessThan\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>1</formula1></dataValidation></dataValidations>";
136     FILE* testfile = lxw_tmpfile(NULL);
137 
138     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
139     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
140     data_validation->criteria = LXW_VALIDATION_CRITERIA_LESS_THAN;
141     data_validation->value_number = 1;
142 
143     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
144     worksheet->file = testfile;
145 
146     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
147     _worksheet_write_data_validations(worksheet);
148 
149     RUN_XLSX_STREQ(exp, got);
150 
151     lxw_worksheet_free(worksheet);
152     free(data_validation);
153 }
154 
155 /* Test: 1Integer >= 1. */
CTEST(worksheet,test_write_data_validations_207)156 CTEST(worksheet, test_write_data_validations_207) {
157     char* got;
158     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" operator=\"greaterThanOrEqual\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>1</formula1></dataValidation></dataValidations>";
159     FILE* testfile = lxw_tmpfile(NULL);
160 
161     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
162     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
163     data_validation->criteria = LXW_VALIDATION_CRITERIA_GREATER_THAN_OR_EQUAL_TO;
164     data_validation->value_number = 1;
165 
166     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
167     worksheet->file = testfile;
168 
169     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
170     _worksheet_write_data_validations(worksheet);
171 
172     RUN_XLSX_STREQ(exp, got);
173 
174     lxw_worksheet_free(worksheet);
175     free(data_validation);
176 }
177 
178 /* Test: Integer <= 1. */
CTEST(worksheet,test_write_data_validations_208)179 CTEST(worksheet, test_write_data_validations_208) {
180     char* got;
181     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" operator=\"lessThanOrEqual\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>1</formula1></dataValidation></dataValidations>";
182     FILE* testfile = lxw_tmpfile(NULL);
183 
184     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
185     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
186     data_validation->criteria = LXW_VALIDATION_CRITERIA_LESS_THAN_OR_EQUAL_TO;
187     data_validation->value_number = 1;
188 
189     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
190     worksheet->file = testfile;
191 
192     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
193     _worksheet_write_data_validations(worksheet);
194 
195     RUN_XLSX_STREQ(exp, got);
196 
197     lxw_worksheet_free(worksheet);
198     free(data_validation);
199 }
200 
201 /* Test: Ignore blank off. */
CTEST(worksheet,test_write_data_validations_209)202 CTEST(worksheet, test_write_data_validations_209) {
203     char* got;
204     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>1</formula1><formula2>10</formula2></dataValidation></dataValidations>";
205     FILE* testfile = lxw_tmpfile(NULL);
206 
207     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
208     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
209     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
210     data_validation->minimum_number = 1;
211     data_validation->maximum_number = 10;
212     data_validation->ignore_blank = LXW_VALIDATION_OFF;
213 
214     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
215     worksheet->file = testfile;
216 
217     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
218     _worksheet_write_data_validations(worksheet);
219 
220     RUN_XLSX_STREQ(exp, got);
221 
222     lxw_worksheet_free(worksheet);
223     free(data_validation);
224 }
225 
226 /* Test: Error style == warning. */
CTEST(worksheet,test_write_data_validations_210)227 CTEST(worksheet, test_write_data_validations_210) {
228     char* got;
229     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" errorStyle=\"warning\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>1</formula1><formula2>10</formula2></dataValidation></dataValidations>";
230     FILE* testfile = lxw_tmpfile(NULL);
231 
232     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
233     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
234     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
235     data_validation->minimum_number = 1;
236     data_validation->maximum_number = 10;
237     data_validation->error_type = LXW_VALIDATION_ERROR_TYPE_WARNING;
238 
239     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
240     worksheet->file = testfile;
241 
242     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
243     _worksheet_write_data_validations(worksheet);
244 
245     RUN_XLSX_STREQ(exp, got);
246 
247     lxw_worksheet_free(worksheet);
248     free(data_validation);
249 }
250 
251 /* Test: Error style == information */
CTEST(worksheet,test_write_data_validations_211)252 CTEST(worksheet, test_write_data_validations_211) {
253     char* got;
254     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" errorStyle=\"information\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>1</formula1><formula2>10</formula2></dataValidation></dataValidations>";
255     FILE* testfile = lxw_tmpfile(NULL);
256 
257     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
258     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
259     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
260     data_validation->minimum_number = 1;
261     data_validation->maximum_number = 10;
262     data_validation->error_type = LXW_VALIDATION_ERROR_TYPE_INFORMATION;
263 
264     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
265     worksheet->file = testfile;
266 
267     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
268     _worksheet_write_data_validations(worksheet);
269 
270     RUN_XLSX_STREQ(exp, got);
271 
272     lxw_worksheet_free(worksheet);
273     free(data_validation);
274 }
275 
276 /* Test: Input title. */
CTEST(worksheet,test_write_data_validations_212)277 CTEST(worksheet, test_write_data_validations_212) {
278     char* got;
279     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" promptTitle=\"Input title January\" sqref=\"B5\"><formula1>1</formula1><formula2>10</formula2></dataValidation></dataValidations>";
280     FILE* testfile = lxw_tmpfile(NULL);
281 
282     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
283     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
284     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
285     data_validation->minimum_number = 1;
286     data_validation->maximum_number = 10;
287     data_validation->input_title = "Input title January";
288 
289     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
290     worksheet->file = testfile;
291 
292     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
293     _worksheet_write_data_validations(worksheet);
294 
295     RUN_XLSX_STREQ(exp, got);
296 
297     lxw_worksheet_free(worksheet);
298     free(data_validation);
299 }
300 
301 /* Test: Input title + input message. */
CTEST(worksheet,test_write_data_validations_213)302 CTEST(worksheet, test_write_data_validations_213) {
303     char* got;
304     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" promptTitle=\"Input title January\" prompt=\"Input message February\" sqref=\"B5\"><formula1>1</formula1><formula2>10</formula2></dataValidation></dataValidations>";
305     FILE* testfile = lxw_tmpfile(NULL);
306 
307     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
308     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
309     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
310     data_validation->minimum_number = 1;
311     data_validation->maximum_number = 10;
312     data_validation->input_title = "Input title January";
313     data_validation->input_message = "Input message February";
314 
315     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
316     worksheet->file = testfile;
317 
318     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
319     _worksheet_write_data_validations(worksheet);
320 
321     RUN_XLSX_STREQ(exp, got);
322 
323     lxw_worksheet_free(worksheet);
324     free(data_validation);
325 }
326 
327 /* Test: Input title + input message + error title. */
CTEST(worksheet,test_write_data_validations_214)328 CTEST(worksheet, test_write_data_validations_214) {
329     char* got;
330     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" errorTitle=\"Error title March\" promptTitle=\"Input title January\" prompt=\"Input message February\" sqref=\"B5\"><formula1>1</formula1><formula2>10</formula2></dataValidation></dataValidations>";
331     FILE* testfile = lxw_tmpfile(NULL);
332 
333     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
334     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
335     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
336     data_validation->minimum_number = 1;
337     data_validation->maximum_number = 10;
338     data_validation->input_title = "Input title January";
339     data_validation->input_message = "Input message February";
340     data_validation->error_title = "Error title March";
341 
342     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
343     worksheet->file = testfile;
344 
345     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
346     _worksheet_write_data_validations(worksheet);
347 
348     RUN_XLSX_STREQ(exp, got);
349 
350     lxw_worksheet_free(worksheet);
351     free(data_validation);
352 }
353 
354 /* Test: Input title + input message + error title + error message. */
CTEST(worksheet,test_write_data_validations_215)355 CTEST(worksheet, test_write_data_validations_215) {
356     char* got;
357     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" errorTitle=\"Error title March\" error=\"Error message April\" promptTitle=\"Input title January\" prompt=\"Input message February\" sqref=\"B5\"><formula1>1</formula1><formula2>10</formula2></dataValidation></dataValidations>";
358     FILE* testfile = lxw_tmpfile(NULL);
359 
360     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
361     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
362     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
363     data_validation->minimum_number = 1;
364     data_validation->maximum_number = 10;
365     data_validation->input_title = "Input title January";
366     data_validation->input_message = "Input message February";
367     data_validation->error_title = "Error title March";
368     data_validation->error_message = "Error message April";
369 
370     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
371     worksheet->file = testfile;
372 
373     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
374     _worksheet_write_data_validations(worksheet);
375 
376     RUN_XLSX_STREQ(exp, got);
377 
378     lxw_worksheet_free(worksheet);
379     free(data_validation);
380 }
381 /* Test: Input title. + input message + error title + error message - input message box. */
CTEST(worksheet,test_write_data_validations_216)382 CTEST(worksheet, test_write_data_validations_216) {
383     char* got;
384     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" allowBlank=\"1\" showErrorMessage=\"1\" errorTitle=\"Error title March\" error=\"Error message April\" promptTitle=\"Input title January\" prompt=\"Input message February\" sqref=\"B5\"><formula1>1</formula1><formula2>10</formula2></dataValidation></dataValidations>";
385     FILE* testfile = lxw_tmpfile(NULL);
386 
387     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
388     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
389     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
390     data_validation->minimum_number = 1;
391     data_validation->maximum_number = 10;
392     data_validation->input_title = "Input title January";
393     data_validation->input_message = "Input message February";
394     data_validation->error_title = "Error title March";
395     data_validation->error_message = "Error message April";
396     data_validation->show_input = LXW_VALIDATION_OFF;
397 
398     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
399     worksheet->file = testfile;
400 
401     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
402     _worksheet_write_data_validations(worksheet);
403 
404     RUN_XLSX_STREQ(exp, got);
405 
406     lxw_worksheet_free(worksheet);
407     free(data_validation);
408 }
409 
410 /* Test: Input title + input message + error title + error message - input message box - error message box. */
CTEST(worksheet,test_write_data_validations_217)411 CTEST(worksheet, test_write_data_validations_217) {
412     char* got;
413     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" allowBlank=\"1\" errorTitle=\"Error title March\" error=\"Error message April\" promptTitle=\"Input title January\" prompt=\"Input message February\" sqref=\"B5\"><formula1>1</formula1><formula2>10</formula2></dataValidation></dataValidations>";
414     FILE* testfile = lxw_tmpfile(NULL);
415 
416     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
417     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
418     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
419     data_validation->minimum_number = 1;
420     data_validation->maximum_number = 10;
421     data_validation->input_title = "Input title January";
422     data_validation->input_message = "Input message February";
423     data_validation->error_title = "Error title March";
424     data_validation->error_message = "Error message April";
425     data_validation->show_input = LXW_VALIDATION_OFF;
426     data_validation->show_error = LXW_VALIDATION_OFF;
427 
428     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
429     worksheet->file = testfile;
430 
431     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
432     _worksheet_write_data_validations(worksheet);
433 
434     RUN_XLSX_STREQ(exp, got);
435 
436     lxw_worksheet_free(worksheet);
437     free(data_validation);
438 }
439 
440 /* Test: 'any' value on its own shouldn't produce a DV record. */
CTEST(worksheet,test_write_data_validations_218)441 CTEST(worksheet, test_write_data_validations_218) {
442     char* got;
443     char exp[] = "";
444     FILE* testfile = lxw_tmpfile(NULL);
445 
446     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
447     data_validation->validate = LXW_VALIDATION_TYPE_ANY;
448 
449     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
450     worksheet->file = testfile;
451 
452     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
453     _worksheet_write_data_validations(worksheet);
454 
455     RUN_XLSX_STREQ(exp, got);
456 
457     lxw_worksheet_free(worksheet);
458     free(data_validation);
459 }
460 
461 /* Test: Decimal = 1.2345 */
CTEST(worksheet,test_write_data_validations_219)462 CTEST(worksheet, test_write_data_validations_219) {
463     char* got;
464     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"decimal\" operator=\"equal\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>1.2345</formula1></dataValidation></dataValidations>";
465     FILE* testfile = lxw_tmpfile(NULL);
466 
467     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
468     data_validation->validate = LXW_VALIDATION_TYPE_DECIMAL;
469     data_validation->criteria = LXW_VALIDATION_CRITERIA_EQUAL_TO;
470     data_validation->value_number = 1.2345;
471 
472     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
473     worksheet->file = testfile;
474 
475     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
476     _worksheet_write_data_validations(worksheet);
477 
478     RUN_XLSX_STREQ(exp, got);
479 
480     lxw_worksheet_free(worksheet);
481     free(data_validation);
482 }
483 
484 /* Test: 28 List = a,bb,ccc */
CTEST(worksheet,test_write_data_validations_220)485 CTEST(worksheet, test_write_data_validations_220) {
486     char* got;
487     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"list\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>\"a,bb,ccc\"</formula1></dataValidation></dataValidations>";
488     FILE* testfile = lxw_tmpfile(NULL);
489     char *list[] = {"a", "bb", "ccc", NULL};
490 
491     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
492     data_validation->validate = LXW_VALIDATION_TYPE_LIST;
493     data_validation->value_list = list;
494 
495     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
496     worksheet->file = testfile;
497 
498     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
499     _worksheet_write_data_validations(worksheet);
500 
501     RUN_XLSX_STREQ(exp, got);
502 
503     lxw_worksheet_free(worksheet);
504     free(data_validation);
505 }
506 
507 /* Test: List = a,bb,ccc, No dropdown */
CTEST(worksheet,test_write_data_validations_221)508 CTEST(worksheet, test_write_data_validations_221) {
509     char* got;
510     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"list\" allowBlank=\"1\" showDropDown=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>\"a,bb,ccc\"</formula1></dataValidation></dataValidations>";
511     FILE* testfile = lxw_tmpfile(NULL);
512     char *list[] = {"a", "bb", "ccc", NULL};
513 
514     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
515     data_validation->validate = LXW_VALIDATION_TYPE_LIST;
516     data_validation->value_list = list;
517     data_validation->dropdown = LXW_VALIDATION_OFF;
518 
519     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
520     worksheet->file = testfile;
521 
522     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
523     _worksheet_write_data_validations(worksheet);
524 
525     RUN_XLSX_STREQ(exp, got);
526 
527     lxw_worksheet_free(worksheet);
528     free(data_validation);
529 }
530 
531 /* Test: List = $D$1:$D$5 */
CTEST(worksheet,test_write_data_validations_222)532 CTEST(worksheet, test_write_data_validations_222) {
533     char* got;
534     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"list\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"A1\"><formula1>$D$1:$D$5</formula1></dataValidation></dataValidations>";
535     FILE* testfile = lxw_tmpfile(NULL);
536 
537     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
538     data_validation->validate = LXW_VALIDATION_TYPE_LIST_FORMULA;
539     data_validation->value_formula = "=$D$1:$D$5";
540 
541     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
542     worksheet->file = testfile;
543 
544     worksheet_data_validation_cell(worksheet, CELL("A1"), data_validation);
545     _worksheet_write_data_validations(worksheet);
546 
547     RUN_XLSX_STREQ(exp, got);
548 
549     lxw_worksheet_free(worksheet);
550     free(data_validation);
551 }
552 
553 /* Test: Date = 39653 (2008-07-24) */
CTEST(worksheet,test_write_data_validations_223)554 CTEST(worksheet, test_write_data_validations_223) {
555     char* got;
556     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"date\" operator=\"equal\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>39653</formula1></dataValidation></dataValidations>";
557     FILE* testfile = lxw_tmpfile(NULL);
558 
559     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
560     data_validation->validate = LXW_VALIDATION_TYPE_DATE_NUMBER;
561     data_validation->criteria = LXW_VALIDATION_CRITERIA_EQUAL_TO;
562     data_validation->value_number = 39653;
563 
564     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
565     worksheet->file = testfile;
566 
567     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
568     _worksheet_write_data_validations(worksheet);
569 
570     RUN_XLSX_STREQ(exp, got);
571 
572     lxw_worksheet_free(worksheet);
573     free(data_validation);
574 }
575 
576 /* Test: Date = 2008-07-24 */
CTEST(worksheet,test_write_data_validations_224)577 CTEST(worksheet, test_write_data_validations_224) {
578     char* got;
579     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"date\" operator=\"equal\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>39653</formula1></dataValidation></dataValidations>";
580     FILE* testfile = lxw_tmpfile(NULL);
581     lxw_datetime datetime1 = {2008,  7,  24, 0, 0, 0};
582 
583     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
584     data_validation->validate = LXW_VALIDATION_TYPE_DATE;
585     data_validation->criteria = LXW_VALIDATION_CRITERIA_EQUAL_TO;
586     data_validation->value_datetime = datetime1;
587 
588     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
589     worksheet->file = testfile;
590 
591     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
592     _worksheet_write_data_validations(worksheet);
593 
594     RUN_XLSX_STREQ(exp, got);
595 
596     lxw_worksheet_free(worksheet);
597     free(data_validation);
598 }
599 
600 /* Test: Date between ranges. */
CTEST(worksheet,test_write_data_validations_225)601 CTEST(worksheet, test_write_data_validations_225) {
602     char* got;
603     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"date\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>39448</formula1><formula2>39794</formula2></dataValidation></dataValidations>";
604     FILE* testfile = lxw_tmpfile(NULL);
605     lxw_datetime datetime1 = {2008,  1,  1, 0, 0, 0};
606     lxw_datetime datetime2 = {2008, 12, 12, 0, 0, 0};
607 
608     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
609     data_validation->validate = LXW_VALIDATION_TYPE_DATE;
610     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
611     data_validation->minimum_datetime = datetime1;
612     data_validation->maximum_datetime = datetime2;
613 
614     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
615     worksheet->file = testfile;
616 
617     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
618     _worksheet_write_data_validations(worksheet);
619 
620     RUN_XLSX_STREQ(exp, got);
621 
622     lxw_worksheet_free(worksheet);
623     free(data_validation);
624 }
625 
626 /* Test: Time = 0.5 (12:00:00) */
CTEST(worksheet,test_write_data_validations_226)627 CTEST(worksheet, test_write_data_validations_226) {
628     char* got;
629     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"time\" operator=\"equal\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>0.5</formula1></dataValidation></dataValidations>";
630     FILE* testfile = lxw_tmpfile(NULL);
631 
632     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
633     data_validation->validate = LXW_VALIDATION_TYPE_TIME_NUMBER;
634     data_validation->criteria = LXW_VALIDATION_CRITERIA_EQUAL_TO;
635     data_validation->value_number = 0.5;
636 
637     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
638     worksheet->file = testfile;
639 
640     worksheet_data_validation_cell(worksheet, CELL("B5:B5"), data_validation);
641     _worksheet_write_data_validations(worksheet);
642 
643     RUN_XLSX_STREQ(exp, got);
644 
645     lxw_worksheet_free(worksheet);
646     free(data_validation);
647 }
648 
649 /* Test: Time = 12:00:00 */
CTEST(worksheet,test_write_data_validations_227)650 CTEST(worksheet, test_write_data_validations_227) {
651     char* got;
652     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"time\" operator=\"equal\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>0.5</formula1></dataValidation></dataValidations>";
653     FILE* testfile = lxw_tmpfile(NULL);
654     lxw_datetime datetime1 = {0,  0,  0, 12, 0, 0};
655 
656     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
657     data_validation->validate = LXW_VALIDATION_TYPE_TIME;
658     data_validation->criteria = LXW_VALIDATION_CRITERIA_EQUAL_TO;
659     data_validation->value_datetime = datetime1;
660 
661     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
662     worksheet->file = testfile;
663 
664     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
665     _worksheet_write_data_validations(worksheet);
666 
667     RUN_XLSX_STREQ(exp, got);
668 
669     lxw_worksheet_free(worksheet);
670     free(data_validation);
671 }
672 
673 /* Test: Check data validation range. */
CTEST(worksheet,test_write_data_validations_228)674 CTEST(worksheet, test_write_data_validations_228) {
675     char* got;
676     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"whole\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5:B10\"><formula1>1</formula1><formula2>10</formula2></dataValidation></dataValidations>";
677     FILE* testfile = lxw_tmpfile(NULL);
678 
679     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
680     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
681     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
682     data_validation->minimum_number = 1;
683     data_validation->maximum_number = 10;
684 
685     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
686     worksheet->file = testfile;
687 
688     worksheet_data_validation_range(worksheet, RANGE("B5:B10"), data_validation);
689     _worksheet_write_data_validations(worksheet);
690 
691     RUN_XLSX_STREQ(exp, got);
692 
693     lxw_worksheet_free(worksheet);
694     free(data_validation);
695 }
696 
697 /* Test: Multiple validations. */
CTEST(worksheet,test_write_data_validations_229)698 CTEST(worksheet, test_write_data_validations_229) {
699     char* got;
700     char exp[] = "<dataValidations count=\"2\"><dataValidation type=\"whole\" operator=\"greaterThan\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>10</formula1></dataValidation><dataValidation type=\"whole\" operator=\"lessThan\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"C10\"><formula1>10</formula1></dataValidation></dataValidations>";
701     FILE* testfile = lxw_tmpfile(NULL);
702 
703     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
704     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
705     data_validation->criteria = LXW_VALIDATION_CRITERIA_GREATER_THAN;
706     data_validation->value_number = 10;
707 
708     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
709     worksheet->file = testfile;
710 
711     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
712 
713     data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
714     data_validation->criteria = LXW_VALIDATION_CRITERIA_LESS_THAN;
715     data_validation->value_number = 10;
716     worksheet_data_validation_cell(worksheet, CELL("C10"), data_validation);
717 
718     _worksheet_write_data_validations(worksheet);
719 
720     RUN_XLSX_STREQ(exp, got);
721 
722     lxw_worksheet_free(worksheet);
723     free(data_validation);
724 }
725 
726 /* Test: 'any' with an input message should produce a dataValidation record. */
CTEST(worksheet,test_write_data_validations_230)727 CTEST(worksheet, test_write_data_validations_230) {
728     char* got;
729     char exp[] = "<dataValidations count=\"1\"><dataValidation allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" promptTitle=\"Input title January\" prompt=\"Input message February\" sqref=\"B5\"/></dataValidations>";
730     FILE* testfile = lxw_tmpfile(NULL);
731 
732     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
733     data_validation->validate = LXW_VALIDATION_TYPE_ANY;
734     data_validation->input_title = "Input title January";
735     data_validation->input_message = "Input message February";
736 
737     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
738     worksheet->file = testfile;
739 
740     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
741     _worksheet_write_data_validations(worksheet);
742 
743     RUN_XLSX_STREQ(exp, got);
744 
745     lxw_worksheet_free(worksheet);
746     free(data_validation);
747 }
748 
749 /* Test: length */
CTEST(worksheet,test_write_data_validations_231)750 CTEST(worksheet, test_write_data_validations_231) {
751     char* got;
752     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"textLength\" operator=\"greaterThan\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"A1\"><formula1>5</formula1></dataValidation></dataValidations>";
753     FILE* testfile = lxw_tmpfile(NULL);
754 
755     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
756     data_validation->validate = LXW_VALIDATION_TYPE_LENGTH;
757     data_validation->criteria = LXW_VALIDATION_CRITERIA_GREATER_THAN;
758     data_validation->value_number = 5;
759 
760     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
761     worksheet->file = testfile;
762 
763     worksheet_data_validation_cell(worksheet, CELL("A1"), data_validation);
764     _worksheet_write_data_validations(worksheet);
765 
766     RUN_XLSX_STREQ(exp, got);
767 
768     lxw_worksheet_free(worksheet);
769     free(data_validation);
770 }
771 
772 
773 /* Test: length */
CTEST(worksheet,test_write_data_validations_232)774 CTEST(worksheet, test_write_data_validations_232) {
775     char* got;
776     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"textLength\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"A1\"><formula1>5</formula1><formula2>10</formula2></dataValidation></dataValidations>";
777     FILE* testfile = lxw_tmpfile(NULL);
778 
779     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
780     data_validation->validate = LXW_VALIDATION_TYPE_LENGTH;
781     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
782     data_validation->minimum_number = 5;
783     data_validation->maximum_number = 10;
784 
785     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
786     worksheet->file = testfile;
787 
788     worksheet_data_validation_cell(worksheet, CELL("A1"), data_validation);
789     _worksheet_write_data_validations(worksheet);
790 
791     RUN_XLSX_STREQ(exp, got);
792 
793     lxw_worksheet_free(worksheet);
794     free(data_validation);
795 }
796 
797 /* Test: length formula. */
CTEST(worksheet,test_write_data_validations_233)798 CTEST(worksheet, test_write_data_validations_233) {
799     char* got;
800     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"textLength\" operator=\"greaterThan\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"A1\"><formula1>H1</formula1></dataValidation></dataValidations>";
801     FILE* testfile = lxw_tmpfile(NULL);
802 
803     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
804     data_validation->validate = LXW_VALIDATION_TYPE_LENGTH_FORMULA;
805     data_validation->criteria = LXW_VALIDATION_CRITERIA_GREATER_THAN;
806     data_validation->value_formula = "=H1";
807 
808     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
809     worksheet->file = testfile;
810 
811     worksheet_data_validation_cell(worksheet, CELL("A1"), data_validation);
812     _worksheet_write_data_validations(worksheet);
813 
814     RUN_XLSX_STREQ(exp, got);
815 
816     lxw_worksheet_free(worksheet);
817     free(data_validation);
818 }
819 
820 /* Test: length formula. */
CTEST(worksheet,test_write_data_validations_234)821 CTEST(worksheet, test_write_data_validations_234) {
822     char* got;
823     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"textLength\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"A1\"><formula1>H1</formula1><formula2>H2</formula2></dataValidation></dataValidations>";
824     FILE* testfile = lxw_tmpfile(NULL);
825 
826     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
827     data_validation->validate = LXW_VALIDATION_TYPE_LENGTH_FORMULA;
828     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
829     data_validation->minimum_formula = "=H1";
830     data_validation->maximum_formula = "=H2";
831 
832     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
833     worksheet->file = testfile;
834 
835     worksheet_data_validation_cell(worksheet, CELL("A1"), data_validation);
836     _worksheet_write_data_validations(worksheet);
837 
838     RUN_XLSX_STREQ(exp, got);
839 
840     lxw_worksheet_free(worksheet);
841     free(data_validation);
842 }
843 
844 /* Test: Date = 2008-07-24 */
CTEST(worksheet,test_write_data_validations_235)845 CTEST(worksheet, test_write_data_validations_235) {
846     char* got;
847     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"date\" operator=\"equal\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>H1</formula1></dataValidation></dataValidations>";
848     FILE* testfile = lxw_tmpfile(NULL);
849 
850     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
851     data_validation->validate = LXW_VALIDATION_TYPE_DATE_FORMULA;
852     data_validation->criteria = LXW_VALIDATION_CRITERIA_EQUAL_TO;
853     data_validation->value_formula = "=H1";
854 
855     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
856     worksheet->file = testfile;
857 
858     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
859     _worksheet_write_data_validations(worksheet);
860 
861     RUN_XLSX_STREQ(exp, got);
862 
863     lxw_worksheet_free(worksheet);
864     free(data_validation);
865 }
866 
867 /* Test: Date between ranges. */
CTEST(worksheet,test_write_data_validations_236)868 CTEST(worksheet, test_write_data_validations_236) {
869     char* got;
870     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"date\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>H1</formula1><formula2>H2</formula2></dataValidation></dataValidations>";
871     FILE* testfile = lxw_tmpfile(NULL);
872 
873     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
874     data_validation->validate = LXW_VALIDATION_TYPE_DATE_FORMULA;
875     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
876     data_validation->minimum_formula = "=H1";
877     data_validation->maximum_formula = "=H2";
878 
879     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
880     worksheet->file = testfile;
881 
882     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
883     _worksheet_write_data_validations(worksheet);
884 
885     RUN_XLSX_STREQ(exp, got);
886 
887     lxw_worksheet_free(worksheet);
888     free(data_validation);
889 }
890 
891 /* Test: Time between ranges. */
CTEST(worksheet,test_write_data_validations_237)892 CTEST(worksheet, test_write_data_validations_237) {
893     char* got;
894     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"time\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>0</formula1><formula2>0.5</formula2></dataValidation></dataValidations>";
895     FILE* testfile = lxw_tmpfile(NULL);
896     lxw_datetime datetime1 = {0,  0,  0,  0, 0, 0};
897     lxw_datetime datetime2 = {0,  0,  0, 12, 0, 0};
898 
899     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
900     data_validation->validate = LXW_VALIDATION_TYPE_TIME;
901     data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
902     data_validation->minimum_datetime = datetime1;
903     data_validation->maximum_datetime = datetime2;
904 
905     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
906     worksheet->file = testfile;
907 
908     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
909     _worksheet_write_data_validations(worksheet);
910 
911     RUN_XLSX_STREQ(exp, got);
912 
913     lxw_worksheet_free(worksheet);
914     free(data_validation);
915 }
916 
917 /* Test: Time formula */
CTEST(worksheet,test_write_data_validations_238)918 CTEST(worksheet, test_write_data_validations_238) {
919     char* got;
920     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"time\" operator=\"equal\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>H1</formula1></dataValidation></dataValidations>";
921     FILE* testfile = lxw_tmpfile(NULL);
922 
923     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
924     data_validation->validate = LXW_VALIDATION_TYPE_TIME_FORMULA;
925     data_validation->criteria = LXW_VALIDATION_CRITERIA_EQUAL_TO;
926     data_validation->value_formula = "=H1";
927 
928     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
929     worksheet->file = testfile;
930 
931     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
932     _worksheet_write_data_validations(worksheet);
933 
934     RUN_XLSX_STREQ(exp, got);
935 
936     lxw_worksheet_free(worksheet);
937     free(data_validation);
938 }
939 
940 /* Test: Time formula */
CTEST(worksheet,test_write_data_validations_239)941 CTEST(worksheet, test_write_data_validations_239) {
942     char* got;
943     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"time\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>H1</formula1><formula2>H2</formula2></dataValidation></dataValidations>";
944     FILE* testfile = lxw_tmpfile(NULL);
945 
946     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
947     data_validation->validate = LXW_VALIDATION_TYPE_TIME_FORMULA;
948         data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
949     data_validation->minimum_formula = "=H1";
950     data_validation->maximum_formula = "=H2";
951 
952     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
953     worksheet->file = testfile;
954 
955     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
956     _worksheet_write_data_validations(worksheet);
957 
958     RUN_XLSX_STREQ(exp, got);
959 
960     lxw_worksheet_free(worksheet);
961     free(data_validation);
962 }
963 
964 /* Test: length formula. */
CTEST(worksheet,test_write_data_validations_240)965 CTEST(worksheet, test_write_data_validations_240) {
966     char* got;
967     char exp[] = "<dataValidations count=\"1\"><dataValidation type=\"custom\" allowBlank=\"1\" showInputMessage=\"1\" showErrorMessage=\"1\" sqref=\"B5\"><formula1>10</formula1></dataValidation></dataValidations>";
968     FILE* testfile = lxw_tmpfile(NULL);
969 
970     lxw_data_validation *data_validation = calloc(1, sizeof(lxw_data_validation));
971     data_validation->validate = LXW_VALIDATION_TYPE_CUSTOM_FORMULA;
972     data_validation->value_formula = "10";
973 
974     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
975     worksheet->file = testfile;
976 
977     worksheet_data_validation_cell(worksheet, CELL("B5"), data_validation);
978     _worksheet_write_data_validations(worksheet);
979 
980     RUN_XLSX_STREQ(exp, got);
981 
982     lxw_worksheet_free(worksheet);
983     free(data_validation);
984 }
985