@@ -30,6 +30,8 @@ class TestUtils : public TestFixture {
3030 void run () override {
3131 TEST_CASE (isValidGlobPattern);
3232 TEST_CASE (matchglob);
33+ TEST_CASE (isStringLiteral);
34+ TEST_CASE (isCharLiteral);
3335 }
3436
3537 void isValidGlobPattern () const {
@@ -68,6 +70,114 @@ class TestUtils : public TestFixture {
6870 ASSERT_EQUALS (true , ::matchglob (" ?y?" , " xyz" ));
6971 ASSERT_EQUALS (true , ::matchglob (" ?/?/?" , " x/y/z" ));
7072 }
73+
74+ void isStringLiteral () const {
75+ // empty
76+ ASSERT_EQUALS (false , ::isStringLiteral (" " ));
77+
78+ // no literals
79+ ASSERT_EQUALS (false , ::isStringLiteral (" u8" ));
80+ ASSERT_EQUALS (false , ::isStringLiteral (" u" ));
81+ ASSERT_EQUALS (false , ::isStringLiteral (" U" ));
82+ ASSERT_EQUALS (false , ::isStringLiteral (" L" ));
83+
84+ // incomplete string literals
85+ ASSERT_EQUALS (false , ::isStringLiteral (" \" " ));
86+ ASSERT_EQUALS (false , ::isStringLiteral (" u8\" " ));
87+ ASSERT_EQUALS (false , ::isStringLiteral (" u\" " ));
88+ ASSERT_EQUALS (false , ::isStringLiteral (" U\" " ));
89+ ASSERT_EQUALS (false , ::isStringLiteral (" L\" " ));
90+
91+ // valid string literals
92+ ASSERT_EQUALS (true , ::isStringLiteral (" \"\" " ));
93+ ASSERT_EQUALS (true , ::isStringLiteral (" u8\"\" " ));
94+ ASSERT_EQUALS (true , ::isStringLiteral (" u\"\" " ));
95+ ASSERT_EQUALS (true , ::isStringLiteral (" U\"\" " ));
96+ ASSERT_EQUALS (true , ::isStringLiteral (" L\"\" " ));
97+ ASSERT_EQUALS (true , ::isStringLiteral (" \" t\" " ));
98+ ASSERT_EQUALS (true , ::isStringLiteral (" u8\" t\" " ));
99+ ASSERT_EQUALS (true , ::isStringLiteral (" u\" t\" " ));
100+ ASSERT_EQUALS (true , ::isStringLiteral (" U\" t\" " ));
101+ ASSERT_EQUALS (true , ::isStringLiteral (" L\" t\" " ));
102+ ASSERT_EQUALS (true , ::isStringLiteral (" \" test\" " ));
103+ ASSERT_EQUALS (true , ::isStringLiteral (" u8\" test\" " ));
104+ ASSERT_EQUALS (true , ::isStringLiteral (" u\" test\" " ));
105+ ASSERT_EQUALS (true , ::isStringLiteral (" U\" test\" " ));
106+ ASSERT_EQUALS (true , ::isStringLiteral (" L\" test\" " ));
107+
108+ // incomplete char literals
109+ ASSERT_EQUALS (false , ::isStringLiteral (" '" ));
110+ ASSERT_EQUALS (false , ::isStringLiteral (" u8'" ));
111+ ASSERT_EQUALS (false , ::isStringLiteral (" u'" ));
112+ ASSERT_EQUALS (false , ::isStringLiteral (" U'" ));
113+ ASSERT_EQUALS (false , ::isStringLiteral (" L'" ));
114+
115+ // valid char literals
116+ ASSERT_EQUALS (false , ::isStringLiteral (" 't'" ));
117+ ASSERT_EQUALS (false , ::isStringLiteral (" u8't'" ));
118+ ASSERT_EQUALS (false , ::isStringLiteral (" u't'" ));
119+ ASSERT_EQUALS (false , ::isStringLiteral (" U't'" ));
120+ ASSERT_EQUALS (false , ::isStringLiteral (" L't'" ));
121+ ASSERT_EQUALS (false , ::isStringLiteral (" 'test'" ));
122+ ASSERT_EQUALS (false , ::isStringLiteral (" u8'test'" ));
123+ ASSERT_EQUALS (false , ::isStringLiteral (" u'test'" ));
124+ ASSERT_EQUALS (false , ::isStringLiteral (" U'test'" ));
125+ ASSERT_EQUALS (false , ::isStringLiteral (" L'test'" ));
126+ }
127+
128+ void isCharLiteral () const {
129+ // empty
130+ ASSERT_EQUALS (false , ::isCharLiteral (" " ));
131+
132+ // no literals
133+ ASSERT_EQUALS (false , ::isCharLiteral (" u8" ));
134+ ASSERT_EQUALS (false , ::isCharLiteral (" u" ));
135+ ASSERT_EQUALS (false , ::isCharLiteral (" U" ));
136+ ASSERT_EQUALS (false , ::isCharLiteral (" L" ));
137+
138+ // incomplete string literals
139+ ASSERT_EQUALS (false , ::isCharLiteral (" \" " ));
140+ ASSERT_EQUALS (false , ::isCharLiteral (" u8\" " ));
141+ ASSERT_EQUALS (false , ::isCharLiteral (" u\" " ));
142+ ASSERT_EQUALS (false , ::isCharLiteral (" U\" " ));
143+ ASSERT_EQUALS (false , ::isCharLiteral (" L\" " ));
144+
145+ // valid string literals
146+ ASSERT_EQUALS (false , ::isCharLiteral (" \"\" " ));
147+ ASSERT_EQUALS (false , ::isCharLiteral (" u8\"\" " ));
148+ ASSERT_EQUALS (false , ::isCharLiteral (" u\"\" " ));
149+ ASSERT_EQUALS (false , ::isCharLiteral (" U\"\" " ));
150+ ASSERT_EQUALS (false , ::isCharLiteral (" L\"\" " ));
151+ ASSERT_EQUALS (false , ::isCharLiteral (" \" t\" " ));
152+ ASSERT_EQUALS (false , ::isCharLiteral (" u8\" t\" " ));
153+ ASSERT_EQUALS (false , ::isCharLiteral (" u\" t\" " ));
154+ ASSERT_EQUALS (false , ::isCharLiteral (" U\" t\" " ));
155+ ASSERT_EQUALS (false , ::isCharLiteral (" L\" t\" " ));
156+ ASSERT_EQUALS (false , ::isCharLiteral (" \" test\" " ));
157+ ASSERT_EQUALS (false , ::isCharLiteral (" u8\" test\" " ));
158+ ASSERT_EQUALS (false , ::isCharLiteral (" u\" test\" " ));
159+ ASSERT_EQUALS (false , ::isCharLiteral (" U\" test\" " ));
160+ ASSERT_EQUALS (false , ::isCharLiteral (" L\" test\" " ));
161+
162+ // incomplete char literals
163+ ASSERT_EQUALS (false , ::isCharLiteral (" '" ));
164+ ASSERT_EQUALS (false , ::isCharLiteral (" u8'" ));
165+ ASSERT_EQUALS (false , ::isCharLiteral (" u'" ));
166+ ASSERT_EQUALS (false , ::isCharLiteral (" U'" ));
167+ ASSERT_EQUALS (false , ::isCharLiteral (" L'" ));
168+
169+ // valid char literals
170+ ASSERT_EQUALS (true , ::isCharLiteral (" 't'" ));
171+ ASSERT_EQUALS (true , ::isCharLiteral (" u8't'" ));
172+ ASSERT_EQUALS (true , ::isCharLiteral (" u't'" ));
173+ ASSERT_EQUALS (true , ::isCharLiteral (" U't'" ));
174+ ASSERT_EQUALS (true , ::isCharLiteral (" L't'" ));
175+ ASSERT_EQUALS (true , ::isCharLiteral (" 'test'" ));
176+ ASSERT_EQUALS (true , ::isCharLiteral (" u8'test'" ));
177+ ASSERT_EQUALS (true , ::isCharLiteral (" u'test'" ));
178+ ASSERT_EQUALS (true , ::isCharLiteral (" U'test'" ));
179+ ASSERT_EQUALS (true , ::isCharLiteral (" L'test'" ));
180+ }
71181};
72182
73183REGISTER_TEST (TestUtils)
0 commit comments