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_format18)15 CTEST(worksheet, worksheet_condtional_format18) {
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:A12\"/>"
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                 "<row r=\"10\" spans=\"1:1\">"
73                   "<c r=\"A10\">"
74                     "<v>10</v>"
75                   "</c>"
76                 "</row>"
77                 "<row r=\"11\" spans=\"1:1\">"
78                   "<c r=\"A11\">"
79                     "<v>11</v>"
80                   "</c>"
81                 "</row>"
82                 "<row r=\"12\" spans=\"1:1\">"
83                   "<c r=\"A12\">"
84                     "<v>12</v>"
85                   "</c>"
86                 "</row>"
87               "</sheetData>"
88               "<conditionalFormatting sqref=\"A3:A4 A1 A6:A8 A10 A12\">"
89                 "<cfRule type=\"colorScale\" priority=\"1\">"
90                   "<colorScale>"
91                     "<cfvo type=\"min\" val=\"0\"/>"
92                     "<cfvo type=\"percentile\" val=\"50\"/>"
93                     "<cfvo type=\"max\" val=\"0\"/>"
94                     "<color rgb=\"FFF8696B\"/>"
95                     "<color rgb=\"FFFFEB84\"/>"
96                     "<color rgb=\"FF63BE7B\"/>"
97                   "</colorScale>"
98                 "</cfRule>"
99               "</conditionalFormatting>"
100               "<pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/>"
101             "</worksheet>";
102 
103     FILE* testfile = lxw_tmpfile(NULL);
104 
105     lxw_worksheet *worksheet = lxw_worksheet_new(NULL);
106     worksheet->file = testfile;
107     worksheet_select(worksheet);
108 
109     worksheet_write_number(worksheet, CELL("A1"),   1, NULL);
110     worksheet_write_number(worksheet, CELL("A2"),   2, NULL);
111     worksheet_write_number(worksheet, CELL("A3"),   3, NULL);
112     worksheet_write_number(worksheet, CELL("A4"),   4, NULL);
113     worksheet_write_number(worksheet, CELL("A5"),   5, NULL);
114     worksheet_write_number(worksheet, CELL("A6"),   6, NULL);
115     worksheet_write_number(worksheet, CELL("A7"),   7, NULL);
116     worksheet_write_number(worksheet, CELL("A8"),   8, NULL);
117     worksheet_write_number(worksheet, CELL("A9"),   9, NULL);
118     worksheet_write_number(worksheet, CELL("A10"), 10, NULL);
119     worksheet_write_number(worksheet, CELL("A11"), 11, NULL);
120     worksheet_write_number(worksheet, CELL("A12"), 12, NULL);
121 
122     lxw_conditional_format *conditional_format = calloc(1, sizeof(lxw_conditional_format));
123 
124     conditional_format->type        = LXW_CONDITIONAL_3_COLOR_SCALE;
125     conditional_format->multi_range = "A3:A4 A1 A6:A8 A10 A12";
126     worksheet_conditional_format_range(worksheet, RANGE("A1:A12"), conditional_format);
127 
128     free(conditional_format);
129 
130     lxw_worksheet_assemble_xml_file(worksheet);
131 
132     RUN_XLSX_STREQ_SHORT(exp, got);
133 
134     lxw_worksheet_free(worksheet);
135 }
136