1 /*
2  * Tests for the libxlsxwriter 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 #include "../../../include/xlsxwriter/shared_strings.h"
13 
14 // Test assembling a complete Worksheet file.
CTEST(worksheet,worksheet_condtional_format22)15 CTEST(worksheet, worksheet_condtional_format22) {
16 
17     char* got;
18     char exp[] =
19             "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"
20             "<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">"
21               "<dimension ref=\"A1:A9\"/>"
22               "<sheetViews>"
23                 "<sheetView tabSelected=\"1\" workbookViewId=\"0\"/>"
24               "</sheetViews>"
25               "<sheetFormatPr defaultRowHeight=\"15\"/>"
26               "<sheetData>"
27                 "<row r=\"1\" spans=\"1:1\">"
28                   "<c r=\"A1\">"
29                     "<v>1</v>"
30                   "</c>"
31                 "</row>"
32                 "<row r=\"2\" spans=\"1:1\">"
33                   "<c r=\"A2\">"
34                     "<v>2</v>"
35                   "</c>"
36                 "</row>"
37                 "<row r=\"3\" spans=\"1:1\">"
38                   "<c r=\"A3\">"
39                     "<v>3</v>"
40                   "</c>"
41                 "</row>"
42                 "<row r=\"4\" spans=\"1:1\">"
43                   "<c r=\"A4\">"
44                     "<v>4</v>"
45                   "</c>"
46                 "</row>"
47                 "<row r=\"5\" spans=\"1:1\">"
48                   "<c r=\"A5\">"
49                     "<v>5</v>"
50                   "</c>"
51                 "</row>"
52                 "<row r=\"6\" spans=\"1:1\">"
53                   "<c r=\"A6\">"
54                     "<v>6</v>"
55                   "</c>"
56                 "</row>"
57                 "<row r=\"7\" spans=\"1:1\">"
58                   "<c r=\"A7\">"
59                     "<v>7</v>"
60                   "</c>"
61                 "</row>"
62                 "<row r=\"8\" spans=\"1:1\">"
63                   "<c r=\"A8\">"
64                     "<v>8</v>"
65                   "</c>"
66                 "</row>"
67                 "<row r=\"9\" spans=\"1:1\">"
68                   "<c r=\"A9\">"
69                     "<v>9</v>"
70                   "</c>"
71                 "</row>"
72               "</sheetData>"
73               "<conditionalFormatting sqref=\"A1\">"
74                 "<cfRule type=\"iconSet\" priority=\"1\">"
75                   "<iconSet iconSet=\"3Arrows\">"
76                     "<cfvo type=\"percent\" val=\"0\"/>"
77                     "<cfvo type=\"percent\" val=\"33\"/>"
78                     "<cfvo type=\"percent\" val=\"67\"/>"
79                   "</iconSet>"
80                 "</cfRule>"
81               "</conditionalFormatting>"
82               "<conditionalFormatting sqref=\"A2\">"
83                 "<cfRule type=\"iconSet\" priority=\"2\">"
84                   "<iconSet iconSet=\"3Flags\">"
85                     "<cfvo type=\"percent\" val=\"0\"/>"
86                     "<cfvo type=\"percent\" val=\"33\"/>"
87                     "<cfvo type=\"percent\" val=\"67\"/>"
88                   "</iconSet>"
89                 "</cfRule>"
90               "</conditionalFormatting>"
91               "<conditionalFormatting sqref=\"A3\">"
92                 "<cfRule type=\"iconSet\" priority=\"3\">"
93                   "<iconSet iconSet=\"3TrafficLights2\">"
94                     "<cfvo type=\"percent\" val=\"0\"/>"
95                     "<cfvo type=\"percent\" val=\"33\"/>"
96                     "<cfvo type=\"percent\" val=\"67\"/>"
97                   "</iconSet>"
98                 "</cfRule>"
99               "</conditionalFormatting>"
100               "<conditionalFormatting sqref=\"A4\">"
101                 "<cfRule type=\"iconSet\" priority=\"4\">"
102                   "<iconSet iconSet=\"3Symbols\">"
103                     "<cfvo type=\"percent\" val=\"0\"/>"
104                     "<cfvo type=\"percent\" val=\"33\"/>"
105                     "<cfvo type=\"percent\" val=\"67\"/>"
106                   "</iconSet>"
107                 "</cfRule>"
108               "</conditionalFormatting>"
109               "<conditionalFormatting sqref=\"A5\">"
110                 "<cfRule type=\"iconSet\" priority=\"5\">"
111                   "<iconSet iconSet=\"4Arrows\">"
112                     "<cfvo type=\"percent\" val=\"0\"/>"
113                     "<cfvo type=\"percent\" val=\"25\"/>"
114                     "<cfvo type=\"percent\" val=\"50\"/>"
115                     "<cfvo type=\"percent\" val=\"75\"/>"
116                   "</iconSet>"
117                 "</cfRule>"
118               "</conditionalFormatting>"
119               "<conditionalFormatting sqref=\"A6\">"
120                 "<cfRule type=\"iconSet\" priority=\"6\">"
121                   "<iconSet iconSet=\"4RedToBlack\">"
122                     "<cfvo type=\"percent\" val=\"0\"/>"
123                     "<cfvo type=\"percent\" val=\"25\"/>"
124                     "<cfvo type=\"percent\" val=\"50\"/>"
125                     "<cfvo type=\"percent\" val=\"75\"/>"
126                   "</iconSet>"
127                 "</cfRule>"
128               "</conditionalFormatting>"
129               "<conditionalFormatting sqref=\"A7\">"
130                 "<cfRule type=\"iconSet\" priority=\"7\">"
131                   "<iconSet iconSet=\"4TrafficLights\">"
132                     "<cfvo type=\"percent\" val=\"0\"/>"
133                     "<cfvo type=\"percent\" val=\"25\"/>"
134                     "<cfvo type=\"percent\" val=\"50\"/>"
135                     "<cfvo type=\"percent\" val=\"75\"/>"
136                   "</iconSet>"
137                 "</cfRule>"
138               "</conditionalFormatting>"
139               "<conditionalFormatting sqref=\"A8\">"
140                 "<cfRule type=\"iconSet\" priority=\"8\">"
141                   "<iconSet iconSet=\"5ArrowsGray\">"
142                     "<cfvo type=\"percent\" val=\"0\"/>"
143                     "<cfvo type=\"percent\" val=\"20\"/>"
144                     "<cfvo type=\"percent\" val=\"40\"/>"
145                     "<cfvo type=\"percent\" val=\"60\"/>"
146                     "<cfvo type=\"percent\" val=\"80\"/>"
147                   "</iconSet>"
148                 "</cfRule>"
149               "</conditionalFormatting>"
150               "<conditionalFormatting sqref=\"A9\">"
151                 "<cfRule type=\"iconSet\" priority=\"9\">"
152                   "<iconSet iconSet=\"5Quarters\">"
153                     "<cfvo type=\"percent\" val=\"0\"/>"
154                     "<cfvo type=\"percent\" val=\"20\"/>"
155                     "<cfvo type=\"percent\" val=\"40\"/>"
156                     "<cfvo type=\"percent\" val=\"60\"/>"
157                     "<cfvo type=\"percent\" val=\"80\"/>"
158                   "</iconSet>"
159                 "</cfRule>"
160               "</conditionalFormatting>"
161               "<pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/>"
162             "</worksheet>";
163 
164     FILE* testfile = lxw_tmpfile(NULL);
165 
166     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
167     worksheet->file = testfile;
168     worksheet_select(worksheet);
169 
170     worksheet_write_number(worksheet, CELL("A1"),   1, NULL);
171     worksheet_write_number(worksheet, CELL("A2"),   2, NULL);
172     worksheet_write_number(worksheet, CELL("A3"),   3, NULL);
173     worksheet_write_number(worksheet, CELL("A4"),   4, NULL);
174     worksheet_write_number(worksheet, CELL("A5"),   5, NULL);
175     worksheet_write_number(worksheet, CELL("A6"),   6, NULL);
176     worksheet_write_number(worksheet, CELL("A7"),   7, NULL);
177     worksheet_write_number(worksheet, CELL("A8"),   8, NULL);
178     worksheet_write_number(worksheet, CELL("A9"),   9, NULL);
179 
180     lxw_conditional_format *conditional_format = calloc(1, sizeof(lxw_conditional_format));
181 
182     conditional_format->type       = LXW_CONDITIONAL_TYPE_ICON_SETS;
183     conditional_format->icon_style = LXW_CONDITIONAL_ICONS_3_ARROWS_COLORED;
184     worksheet_conditional_format_cell(worksheet, CELL("A1"), conditional_format);
185 
186     conditional_format->type       = LXW_CONDITIONAL_TYPE_ICON_SETS;
187     conditional_format->icon_style = LXW_CONDITIONAL_ICONS_3_FLAGS;
188     worksheet_conditional_format_cell(worksheet, CELL("A2"), conditional_format);
189 
190     conditional_format->type       = LXW_CONDITIONAL_TYPE_ICON_SETS;
191     conditional_format->icon_style = LXW_CONDITIONAL_ICONS_3_TRAFFIC_LIGHTS_RIMMED;
192     worksheet_conditional_format_cell(worksheet, CELL("A3"), conditional_format);
193 
194     conditional_format->type       = LXW_CONDITIONAL_TYPE_ICON_SETS;
195     conditional_format->icon_style = LXW_CONDITIONAL_ICONS_3_SYMBOLS_CIRCLED;
196     worksheet_conditional_format_cell(worksheet, CELL("A4"), conditional_format);
197 
198     conditional_format->type       = LXW_CONDITIONAL_TYPE_ICON_SETS;
199     conditional_format->icon_style = LXW_CONDITIONAL_ICONS_4_ARROWS_COLORED;
200     worksheet_conditional_format_cell(worksheet, CELL("A5"), conditional_format);
201 
202     conditional_format->type       = LXW_CONDITIONAL_TYPE_ICON_SETS;
203     conditional_format->icon_style = LXW_CONDITIONAL_ICONS_4_RED_TO_BLACK;
204     worksheet_conditional_format_cell(worksheet, CELL("A6"), conditional_format);
205 
206     conditional_format->type       = LXW_CONDITIONAL_TYPE_ICON_SETS;
207     conditional_format->icon_style = LXW_CONDITIONAL_ICONS_4_TRAFFIC_LIGHTS;
208     worksheet_conditional_format_cell(worksheet, CELL("A7"), conditional_format);
209 
210     conditional_format->type       = LXW_CONDITIONAL_TYPE_ICON_SETS;
211     conditional_format->icon_style = LXW_CONDITIONAL_ICONS_5_ARROWS_GRAY;
212     worksheet_conditional_format_cell(worksheet, CELL("A8"), conditional_format);
213 
214     conditional_format->type       = LXW_CONDITIONAL_TYPE_ICON_SETS;
215     conditional_format->icon_style = LXW_CONDITIONAL_ICONS_5_QUARTERS;
216     worksheet_conditional_format_cell(worksheet, CELL("A9"), conditional_format);
217 
218     free(conditional_format);
219 
220     lxw_worksheet_assemble_xml_file(worksheet);
221 
222     RUN_XLSX_STREQ_SHORT(exp, got);
223 
224     lxw_worksheet_free(worksheet);
225 }
226 
227 
228