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/workbook.h"
12 #include "../../../include/xlsxwriter/shared_strings.h"
13 
14 /* Test a valid sheet name. */
CTEST(workbook,validate_worksheet_name01)15 CTEST(workbook, validate_worksheet_name01) {
16 
17     const char* sheetname = "123456789_123456789_123456789_1";
18 
19     lxw_workbook *workbook = workbook_new(NULL);
20     lxw_error exp = LXW_NO_ERROR;
21     lxw_error got = workbook_validate_sheet_name(workbook, sheetname);
22 
23     ASSERT_EQUAL(exp, got);
24 
25     lxw_workbook_free(workbook);
26 }
27 
28 /* Test a sheet name that is too long. */
CTEST(workbook,validate_worksheet_name02)29 CTEST(workbook, validate_worksheet_name02) {
30 
31     const char* sheetname = "123456789_123456789_123456789_12";
32 
33     lxw_workbook *workbook = workbook_new(NULL);
34     lxw_error exp = LXW_ERROR_SHEETNAME_LENGTH_EXCEEDED;
35     lxw_error got = workbook_validate_sheet_name(workbook, sheetname);
36 
37     ASSERT_EQUAL(exp, got);
38 
39     lxw_workbook_free(workbook);
40 }
41 
42 /* Test a sheet name contains invalid characters. */
CTEST(workbook,validate_worksheet_name03)43 CTEST(workbook, validate_worksheet_name03) {
44 
45     const char* sheetname = "Sheet[1]";
46 
47     lxw_workbook *workbook = workbook_new(NULL);
48     lxw_error exp = LXW_ERROR_INVALID_SHEETNAME_CHARACTER;
49     lxw_error got = workbook_validate_sheet_name(workbook, sheetname);
50 
51     ASSERT_EQUAL(exp, got);
52 
53     lxw_workbook_free(workbook);
54 }
55 
56 /* Test a sheet name that already exists. */
CTEST(workbook,validate_worksheet_name04)57 CTEST(workbook, validate_worksheet_name04) {
58 
59     const char* sheetname = "Sheet1";
60 
61     lxw_workbook *workbook = workbook_new(NULL);
62     workbook_add_worksheet(workbook, sheetname);
63 
64     lxw_error exp = LXW_ERROR_SHEETNAME_ALREADY_USED;
65     lxw_error got = workbook_validate_sheet_name(workbook, sheetname);
66 
67     ASSERT_EQUAL(exp, got);
68 
69     lxw_workbook_free(workbook);
70 }
71 
72 /* Test a sheet name that starts with an apostrophe. */
CTEST(workbook,validate_worksheet_name05)73 CTEST(workbook, validate_worksheet_name05) {
74 
75     const char* sheetname = "'Sheet1";
76 
77     lxw_workbook *workbook = workbook_new(NULL);
78     lxw_error exp = LXW_ERROR_SHEETNAME_START_END_APOSTROPHE;
79     lxw_error got = workbook_validate_sheet_name(workbook, sheetname);
80 
81     ASSERT_EQUAL(exp, got);
82 
83     lxw_workbook_free(workbook);
84 }
85 
86 /* Test a sheet name that ends with an apostrophe. */
CTEST(workbook,validate_worksheet_name06)87 CTEST(workbook, validate_worksheet_name06) {
88 
89     const char* sheetname = "Sheet1'";
90 
91     lxw_workbook *workbook = workbook_new(NULL);
92     lxw_error exp = LXW_ERROR_SHEETNAME_START_END_APOSTROPHE;
93     lxw_error got = workbook_validate_sheet_name(workbook, sheetname);
94 
95     ASSERT_EQUAL(exp, got);
96 
97     lxw_workbook_free(workbook);
98 }
99 
100 /* Test a sheet name that already exists, case insensitive. */
CTEST(workbook,validate_worksheet_name07)101 CTEST(workbook, validate_worksheet_name07) {
102 
103     const char* sheetname = "Sheet1";
104 
105     lxw_workbook *workbook = workbook_new(NULL);
106     workbook_add_worksheet(workbook, sheetname);
107 
108     lxw_error exp = LXW_ERROR_SHEETNAME_ALREADY_USED;
109     lxw_error got = workbook_validate_sheet_name(workbook, "sheet1");
110 
111     ASSERT_EQUAL(exp, got);
112 
113     lxw_workbook_free(workbook);
114 }
115 
116 /* Test a sheet name that already exists, case insensitive. */
CTEST(workbook,validate_worksheet_name08)117 CTEST(workbook, validate_worksheet_name08) {
118 
119     const char* sheetname = "Café";
120 
121     lxw_workbook *workbook = workbook_new(NULL);
122     workbook_add_worksheet(workbook, sheetname);
123 
124     lxw_error exp = LXW_ERROR_SHEETNAME_ALREADY_USED;
125     lxw_error got = workbook_validate_sheet_name(workbook, "café");
126 
127     ASSERT_EQUAL(exp, got);
128 
129     lxw_workbook_free(workbook);
130 }
131 
132 /* Test a sheet name that already exists, case insensitive. */
CTEST(workbook,validate_worksheet_name09)133 CTEST(workbook, validate_worksheet_name09) {
134 
135     const char* sheetname = "abcde";
136 
137     lxw_workbook *workbook = workbook_new(NULL);
138     workbook_add_worksheet(workbook, sheetname);
139 
140     lxw_error exp = LXW_ERROR_SHEETNAME_ALREADY_USED;
141     lxw_error got = workbook_validate_sheet_name(workbook, "ABCDE");
142 
143     ASSERT_EQUAL(exp, got);
144 
145     lxw_workbook_free(workbook);
146 }
147