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