Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : */
9 :
10 : #include <sal/types.h>
11 : #include "cppunit/TestAssert.h"
12 : #include "cppunit/TestFixture.h"
13 : #include "cppunit/extensions/HelperMacros.h"
14 : #include "cppunit/plugin/TestPlugIn.h"
15 :
16 : #include "osl/file.hxx"
17 : #include "osl/process.h"
18 :
19 : #include "scanner.hxx"
20 :
21 : namespace
22 : {
23 2076 : struct Symbol
24 : {
25 : sal_uInt16 line;
26 : sal_uInt16 col1;
27 : sal_uInt16 col2;
28 : rtl::OUString text;
29 : double number;
30 : SbxDataType type;
31 : };
32 :
33 : /**
34 : * Perform tests on Scanner.
35 : */
36 60 : class ScannerTest : public CppUnit::TestFixture
37 : {
38 : private:
39 : void testBlankLines();
40 : void testOperators();
41 : void testAlphanum();
42 : void testComments();
43 : void testGoto();
44 : void testGotoCompatible();
45 : void testExclamation();
46 : void testNumbers();
47 : void testDataType();
48 : void testHexOctal();
49 :
50 : // Adds code needed to register the test suite
51 4 : CPPUNIT_TEST_SUITE(ScannerTest);
52 :
53 : // Declares the method as a test to call
54 2 : CPPUNIT_TEST(testBlankLines);
55 2 : CPPUNIT_TEST(testOperators);
56 2 : CPPUNIT_TEST(testAlphanum);
57 2 : CPPUNIT_TEST(testComments);
58 2 : CPPUNIT_TEST(testGoto);
59 2 : CPPUNIT_TEST(testGotoCompatible);
60 2 : CPPUNIT_TEST(testExclamation);
61 2 : CPPUNIT_TEST(testNumbers);
62 2 : CPPUNIT_TEST(testDataType);
63 2 : CPPUNIT_TEST(testHexOctal);
64 :
65 : // End of test suite definition
66 4 : CPPUNIT_TEST_SUITE_END();
67 : };
68 :
69 2 : const static rtl::OUString cr(RTL_CONSTASCII_USTRINGPARAM("\n"));
70 2 : const static rtl::OUString rem(RTL_CONSTASCII_USTRINGPARAM("REM"));
71 2 : const static rtl::OUString asdf(RTL_CONSTASCII_USTRINGPARAM("asdf"));
72 2 : const static rtl::OUString dot(RTL_CONSTASCII_USTRINGPARAM("."));
73 2 : const static rtl::OUString goto_(RTL_CONSTASCII_USTRINGPARAM("goto"));
74 2 : const static rtl::OUString excl(RTL_CONSTASCII_USTRINGPARAM("!"));
75 :
76 160 : std::vector<Symbol> getSymbols(const rtl::OUString& source, sal_Int32& errors, bool bCompatible = false)
77 : {
78 160 : std::vector<Symbol> symbols;
79 160 : SbiScanner scanner(source);
80 160 : scanner.EnableErrors();
81 160 : scanner.SetCompatible(bCompatible);
82 706 : while(scanner.NextSym())
83 : {
84 386 : Symbol symbol;
85 386 : symbol.line = scanner.GetLine();
86 386 : symbol.col1 = scanner.GetCol1();
87 386 : symbol.col2 = scanner.GetCol2();
88 386 : symbol.text = scanner.GetSym();
89 386 : symbol.number = scanner.GetDbl();
90 386 : symbol.type = scanner.GetType();
91 386 : symbols.push_back(symbol);
92 386 : }
93 160 : errors = scanner.GetErrors();
94 160 : return symbols;
95 : }
96 :
97 128 : std::vector<Symbol> getSymbols(const rtl::OUString& source, bool bCompatible = false)
98 : {
99 : sal_Int32 i;
100 128 : return getSymbols(source, i, bCompatible);
101 : }
102 :
103 2 : void ScannerTest::testBlankLines()
104 : {
105 2 : const rtl::OUString source1(RTL_CONSTASCII_USTRINGPARAM(""));
106 2 : const rtl::OUString source2(RTL_CONSTASCII_USTRINGPARAM("\r\n"));
107 2 : const rtl::OUString source3(RTL_CONSTASCII_USTRINGPARAM("\n"));
108 2 : const rtl::OUString source4(RTL_CONSTASCII_USTRINGPARAM("\r"));
109 2 : const rtl::OUString source5(RTL_CONSTASCII_USTRINGPARAM("\r\n\r\n"));
110 2 : const rtl::OUString source6(RTL_CONSTASCII_USTRINGPARAM("\n\r"));
111 2 : const rtl::OUString source7(RTL_CONSTASCII_USTRINGPARAM("\n\r\n"));
112 2 : const rtl::OUString source8(RTL_CONSTASCII_USTRINGPARAM("\r\n\r"));
113 2 : const rtl::OUString source9(RTL_CONSTASCII_USTRINGPARAM(" "));
114 :
115 2 : std::vector<Symbol> symbols;
116 2 : symbols = getSymbols(source1);
117 2 : CPPUNIT_ASSERT(symbols.empty());
118 :
119 2 : symbols = getSymbols(source2);
120 2 : CPPUNIT_ASSERT(symbols.size() == 1);
121 2 : CPPUNIT_ASSERT(symbols[0].text == cr);
122 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
123 :
124 2 : symbols = getSymbols(source3);
125 2 : CPPUNIT_ASSERT(symbols.size() == 1);
126 2 : CPPUNIT_ASSERT(symbols[0].text == cr);
127 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
128 :
129 2 : symbols = getSymbols(source4);
130 2 : CPPUNIT_ASSERT(symbols.size() == 1);
131 2 : CPPUNIT_ASSERT(symbols[0].text == cr);
132 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
133 :
134 2 : symbols = getSymbols(source5);
135 2 : CPPUNIT_ASSERT(symbols.size() == 2);
136 2 : CPPUNIT_ASSERT(symbols[0].text == cr);
137 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
138 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
139 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
140 :
141 2 : symbols = getSymbols(source6);
142 2 : CPPUNIT_ASSERT(symbols.size() == 2);
143 2 : CPPUNIT_ASSERT(symbols[0].text == cr);
144 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
145 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
146 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
147 :
148 2 : symbols = getSymbols(source7);
149 2 : CPPUNIT_ASSERT(symbols.size() == 2);
150 2 : CPPUNIT_ASSERT(symbols[0].text == cr);
151 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
152 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
153 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
154 :
155 2 : symbols = getSymbols(source8);
156 2 : CPPUNIT_ASSERT(symbols.size() == 2);
157 2 : CPPUNIT_ASSERT(symbols[0].text == cr);
158 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
159 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
160 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
161 :
162 2 : symbols = getSymbols(source9);
163 2 : CPPUNIT_ASSERT(symbols.size() == 1);
164 2 : CPPUNIT_ASSERT(symbols[0].text == cr);
165 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
166 2 : }
167 :
168 2 : void ScannerTest::testOperators()
169 : {
170 2 : const rtl::OUString sourceE(RTL_CONSTASCII_USTRINGPARAM("="));
171 2 : const rtl::OUString sourceLT(RTL_CONSTASCII_USTRINGPARAM("<"));
172 2 : const rtl::OUString sourceGT(RTL_CONSTASCII_USTRINGPARAM(">"));
173 2 : const rtl::OUString sourceLTE(RTL_CONSTASCII_USTRINGPARAM("<="));
174 2 : const rtl::OUString sourceGTE(RTL_CONSTASCII_USTRINGPARAM(">="));
175 2 : const rtl::OUString sourceEE(RTL_CONSTASCII_USTRINGPARAM("=="));
176 2 : const rtl::OUString sourceNE(RTL_CONSTASCII_USTRINGPARAM("<>"));
177 2 : const rtl::OUString sourceA(RTL_CONSTASCII_USTRINGPARAM(":="));
178 :
179 2 : std::vector<Symbol> symbols;
180 :
181 2 : symbols = getSymbols(sourceE);
182 2 : CPPUNIT_ASSERT(symbols.size() == 2);
183 2 : CPPUNIT_ASSERT(symbols[0].text == sourceE);
184 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
185 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
186 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
187 :
188 2 : symbols = getSymbols(sourceLT);
189 2 : CPPUNIT_ASSERT(symbols.size() == 2);
190 2 : CPPUNIT_ASSERT(symbols[0].text == sourceLT);
191 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
192 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
193 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
194 :
195 2 : symbols = getSymbols(sourceGT);
196 2 : CPPUNIT_ASSERT(symbols.size() == 2);
197 2 : CPPUNIT_ASSERT(symbols[0].text == sourceGT);
198 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
199 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
200 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
201 :
202 2 : symbols = getSymbols(sourceLTE);
203 2 : CPPUNIT_ASSERT(symbols.size() == 2);
204 2 : CPPUNIT_ASSERT(symbols[0].text == sourceLTE);
205 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
206 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
207 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
208 :
209 2 : symbols = getSymbols(sourceGTE);
210 2 : CPPUNIT_ASSERT(symbols.size() == 2);
211 2 : CPPUNIT_ASSERT(symbols[0].text == sourceGTE);
212 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
213 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
214 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
215 :
216 2 : symbols = getSymbols(sourceEE);
217 2 : CPPUNIT_ASSERT(symbols.size() == 3);
218 2 : CPPUNIT_ASSERT(symbols[0].text == sourceE);
219 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
220 2 : CPPUNIT_ASSERT(symbols[1].text == sourceE);
221 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
222 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
223 2 : CPPUNIT_ASSERT(symbols[2].type == SbxVARIANT);
224 :
225 2 : symbols = getSymbols(sourceNE);
226 2 : CPPUNIT_ASSERT(symbols.size() == 2);
227 2 : CPPUNIT_ASSERT(symbols[0].text == sourceNE);
228 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
229 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
230 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
231 :
232 2 : symbols = getSymbols(sourceA);
233 2 : CPPUNIT_ASSERT(symbols.size() == 2);
234 2 : CPPUNIT_ASSERT(symbols[0].text == sourceA);
235 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
236 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
237 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
238 2 : }
239 :
240 2 : void ScannerTest::testAlphanum()
241 : {
242 2 : const rtl::OUString source1(RTL_CONSTASCII_USTRINGPARAM("asdfghefg"));
243 2 : const rtl::OUString source2(RTL_CONSTASCII_USTRINGPARAM("1asfdasfd"));
244 2 : const rtl::OUString source3(RTL_CONSTASCII_USTRINGPARAM("AdfsaAUdsl10987"));
245 2 : const rtl::OUString source4(RTL_CONSTASCII_USTRINGPARAM("asdfa_mnvcnm"));
246 2 : const rtl::OUString source5(RTL_CONSTASCII_USTRINGPARAM("_asdf1"));
247 2 : const rtl::OUString source6(RTL_CONSTASCII_USTRINGPARAM("_6"));
248 2 : const rtl::OUString source7(RTL_CONSTASCII_USTRINGPARAM("joxclk_"));
249 2 : const rtl::OUString source8(RTL_CONSTASCII_USTRINGPARAM(" asdf "));
250 2 : const rtl::OUString source9(RTL_CONSTASCII_USTRINGPARAM(" 19395 asdfa "));
251 2 : const rtl::OUString source10(RTL_CONSTASCII_USTRINGPARAM("\n1\n2\na sdf"));
252 2 : const rtl::OUString source11(RTL_CONSTASCII_USTRINGPARAM("asdf.asdf"));
253 2 : const rtl::OUString source12(RTL_CONSTASCII_USTRINGPARAM(".."));
254 :
255 2 : std::vector<Symbol> symbols;
256 :
257 2 : symbols = getSymbols(source1);
258 2 : CPPUNIT_ASSERT(symbols.size() == 2);
259 2 : CPPUNIT_ASSERT(symbols[0].text == source1);
260 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
261 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
262 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
263 :
264 2 : symbols = getSymbols(source2);
265 2 : CPPUNIT_ASSERT(symbols.size() == 3);
266 2 : CPPUNIT_ASSERT(symbols[0].text.isEmpty()); // Can't start symbol with a digit
267 2 : CPPUNIT_ASSERT(symbols[0].number == 1);
268 2 : CPPUNIT_ASSERT(symbols[0].type == SbxINTEGER);
269 2 : CPPUNIT_ASSERT(symbols[1].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("asfdasfd")));
270 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
271 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
272 2 : CPPUNIT_ASSERT(symbols[2].type == SbxVARIANT);
273 :
274 2 : symbols = getSymbols(source3);
275 2 : CPPUNIT_ASSERT(symbols.size() == 2);
276 2 : CPPUNIT_ASSERT(symbols[0].text == source3);
277 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
278 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
279 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
280 :
281 2 : symbols = getSymbols(source4);
282 2 : CPPUNIT_ASSERT(symbols.size() == 2);
283 2 : CPPUNIT_ASSERT(symbols[0].text == source4);
284 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
285 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
286 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
287 :
288 2 : symbols = getSymbols(source5);
289 2 : CPPUNIT_ASSERT(symbols.size() == 2);
290 2 : CPPUNIT_ASSERT(symbols[0].text == source5);
291 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
292 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
293 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
294 :
295 2 : symbols = getSymbols(source6);
296 2 : CPPUNIT_ASSERT(symbols.size() == 2);
297 2 : CPPUNIT_ASSERT(symbols[0].text == source6);
298 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
299 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
300 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
301 :
302 2 : symbols = getSymbols(source7);
303 2 : CPPUNIT_ASSERT(symbols.size() == 2);
304 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("joxclk_")));
305 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
306 2 : CPPUNIT_ASSERT(source7 == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("joxclk "))); // Change the trailing '_' to a ' '
307 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
308 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
309 :
310 2 : symbols = getSymbols(source8);
311 2 : CPPUNIT_ASSERT(symbols.size() == 2);
312 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("asdf")));
313 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
314 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
315 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
316 :
317 2 : symbols = getSymbols(source9);
318 2 : CPPUNIT_ASSERT(symbols.size() == 3);
319 2 : CPPUNIT_ASSERT(symbols[0].text.isEmpty());
320 2 : CPPUNIT_ASSERT(symbols[0].number = 19395);
321 2 : CPPUNIT_ASSERT(symbols[0].type == SbxINTEGER);
322 2 : CPPUNIT_ASSERT(symbols[1].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("asdfa")));
323 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
324 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
325 2 : CPPUNIT_ASSERT(symbols[2].type == SbxVARIANT);
326 :
327 2 : symbols = getSymbols(source10);
328 2 : CPPUNIT_ASSERT(symbols.size() == 8);
329 2 : CPPUNIT_ASSERT(symbols[0].text == cr);
330 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
331 2 : CPPUNIT_ASSERT(symbols[1].text.isEmpty());
332 2 : CPPUNIT_ASSERT(symbols[1].number == 1);
333 2 : CPPUNIT_ASSERT(symbols[1].type == SbxINTEGER);
334 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
335 2 : CPPUNIT_ASSERT(symbols[2].type == SbxVARIANT);
336 2 : CPPUNIT_ASSERT(symbols[3].text.isEmpty());
337 2 : CPPUNIT_ASSERT(symbols[3].number == 2);
338 2 : CPPUNIT_ASSERT(symbols[3].type == SbxINTEGER);
339 2 : CPPUNIT_ASSERT(symbols[4].text == cr);
340 2 : CPPUNIT_ASSERT(symbols[4].type == SbxVARIANT);
341 2 : CPPUNIT_ASSERT(symbols[5].text.getLength() == 1);
342 2 : CPPUNIT_ASSERT(symbols[5].text[0] == 'a');
343 2 : CPPUNIT_ASSERT(symbols[5].type == SbxVARIANT);
344 2 : CPPUNIT_ASSERT(symbols[6].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdf")));
345 2 : CPPUNIT_ASSERT(symbols[6].type == SbxVARIANT);
346 2 : CPPUNIT_ASSERT(symbols[7].text == cr);
347 2 : CPPUNIT_ASSERT(symbols[7].type == SbxVARIANT);
348 :
349 2 : symbols = getSymbols(source11);
350 2 : CPPUNIT_ASSERT(symbols.size() == 4);
351 2 : CPPUNIT_ASSERT(symbols[0].text == asdf);
352 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
353 2 : CPPUNIT_ASSERT(symbols[1].text == dot);
354 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
355 2 : CPPUNIT_ASSERT(symbols[2].text == asdf);
356 2 : CPPUNIT_ASSERT(symbols[2].type == SbxVARIANT);
357 2 : CPPUNIT_ASSERT(symbols[3].text == cr);
358 2 : CPPUNIT_ASSERT(symbols[3].type == SbxVARIANT);
359 :
360 2 : symbols = getSymbols(source12);
361 2 : CPPUNIT_ASSERT(symbols.size() == 3);
362 2 : CPPUNIT_ASSERT(symbols[0].text == dot);
363 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
364 2 : CPPUNIT_ASSERT(symbols[1].text == dot);
365 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
366 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
367 2 : CPPUNIT_ASSERT(symbols[2].type == SbxVARIANT);
368 2 : }
369 :
370 2 : void ScannerTest::testComments()
371 : {
372 2 : const rtl::OUString source1(RTL_CONSTASCII_USTRINGPARAM("REM asdf"));
373 2 : const rtl::OUString source2(RTL_CONSTASCII_USTRINGPARAM("REMasdf"));
374 2 : const rtl::OUString source3(RTL_CONSTASCII_USTRINGPARAM("'asdf"));
375 2 : const rtl::OUString source4(RTL_CONSTASCII_USTRINGPARAM("asdf _\n'100"));
376 2 : const rtl::OUString source5(RTL_CONSTASCII_USTRINGPARAM("'asdf _\n100"));
377 2 : const rtl::OUString source6(RTL_CONSTASCII_USTRINGPARAM("'asdf _\n'100"));
378 2 : const rtl::OUString source7(RTL_CONSTASCII_USTRINGPARAM("'asdf _\n 1234 _\n asdf'"));
379 :
380 2 : std::vector<Symbol> symbols;
381 :
382 2 : symbols = getSymbols(source1);
383 2 : CPPUNIT_ASSERT(symbols.size() == 1);
384 2 : CPPUNIT_ASSERT(symbols[0].text == rem);
385 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
386 :
387 2 : symbols = getSymbols(source2);
388 2 : CPPUNIT_ASSERT(symbols.size() == 2);
389 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("REMasdf")));
390 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
391 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
392 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
393 :
394 2 : symbols = getSymbols(source3);
395 2 : CPPUNIT_ASSERT(symbols.size() == 1);
396 2 : CPPUNIT_ASSERT(symbols[0].text == rem);
397 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
398 :
399 2 : symbols = getSymbols(source4);
400 2 : CPPUNIT_ASSERT(symbols.size() == 2);
401 2 : CPPUNIT_ASSERT(symbols[0].text == asdf);
402 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
403 2 : CPPUNIT_ASSERT(symbols[1].text == rem);
404 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
405 :
406 2 : symbols = getSymbols(source5);
407 2 : CPPUNIT_ASSERT(symbols.size() == 3);
408 2 : CPPUNIT_ASSERT(symbols[0].text == rem);
409 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
410 2 : CPPUNIT_ASSERT(symbols[1].text.isEmpty());
411 2 : CPPUNIT_ASSERT(symbols[1].number == 100);
412 2 : CPPUNIT_ASSERT(symbols[1].type == SbxINTEGER);
413 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
414 2 : CPPUNIT_ASSERT(symbols[2].type == SbxVARIANT);
415 :
416 2 : symbols = getSymbols(source6);
417 2 : CPPUNIT_ASSERT(symbols.size() == 2);
418 2 : CPPUNIT_ASSERT(symbols[0].text == rem);
419 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
420 2 : CPPUNIT_ASSERT(symbols[1].text == rem);
421 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
422 :
423 2 : symbols = getSymbols(source7);
424 2 : CPPUNIT_ASSERT(symbols.size() == 4);
425 2 : CPPUNIT_ASSERT(symbols[0].text == rem);
426 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
427 2 : CPPUNIT_ASSERT(symbols[1].text.isEmpty());
428 2 : CPPUNIT_ASSERT(symbols[1].number == 1234);
429 2 : CPPUNIT_ASSERT(symbols[1].type == SbxINTEGER);
430 2 : CPPUNIT_ASSERT(symbols[2].text == asdf);
431 2 : CPPUNIT_ASSERT(symbols[2].type == SbxVARIANT);
432 2 : CPPUNIT_ASSERT(symbols[3].text == rem);
433 2 : CPPUNIT_ASSERT(symbols[3].type == SbxVARIANT);
434 2 : }
435 :
436 2 : void ScannerTest::testGoto()
437 : {
438 2 : const rtl::OUString source1(RTL_CONSTASCII_USTRINGPARAM("goto"));
439 2 : const rtl::OUString source2(RTL_CONSTASCII_USTRINGPARAM("go to"));
440 2 : const rtl::OUString source3(RTL_CONSTASCII_USTRINGPARAM("go\nto"));
441 :
442 2 : std::vector<Symbol> symbols;
443 :
444 2 : symbols = getSymbols(source1);
445 2 : CPPUNIT_ASSERT(symbols.size() == 2);
446 2 : CPPUNIT_ASSERT(symbols[0].text == goto_);
447 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
448 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
449 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
450 :
451 2 : symbols = getSymbols(source2);
452 2 : CPPUNIT_ASSERT(symbols.size() == 3);
453 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("go")));
454 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
455 2 : CPPUNIT_ASSERT(symbols[1].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("to")));
456 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
457 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
458 2 : CPPUNIT_ASSERT(symbols[2].type == SbxVARIANT);
459 :
460 2 : symbols = getSymbols(source3);
461 2 : CPPUNIT_ASSERT(symbols.size() == 4);
462 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("go")));
463 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
464 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
465 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
466 2 : CPPUNIT_ASSERT(symbols[2].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("to")));
467 2 : CPPUNIT_ASSERT(symbols[2].type == SbxVARIANT);
468 2 : CPPUNIT_ASSERT(symbols[3].text == cr);
469 2 : CPPUNIT_ASSERT(symbols[3].type == SbxVARIANT);
470 2 : }
471 :
472 2 : void ScannerTest::testGotoCompatible()
473 : {
474 2 : const rtl::OUString source1(RTL_CONSTASCII_USTRINGPARAM("goto"));
475 2 : const rtl::OUString source2(RTL_CONSTASCII_USTRINGPARAM("go to"));
476 2 : const rtl::OUString source3(RTL_CONSTASCII_USTRINGPARAM("go\nto"));
477 :
478 2 : std::vector<Symbol> symbols;
479 :
480 2 : symbols = getSymbols(source1, true);
481 2 : CPPUNIT_ASSERT(symbols.size() == 2);
482 2 : CPPUNIT_ASSERT(symbols[0].text == goto_);
483 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
484 :
485 2 : symbols = getSymbols(source2, true);
486 2 : CPPUNIT_ASSERT(symbols.size() == 2);
487 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString(goto_));
488 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
489 :
490 2 : symbols = getSymbols(source3, true);
491 2 : CPPUNIT_ASSERT(symbols.size() == 4);
492 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("go")));
493 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
494 2 : CPPUNIT_ASSERT(symbols[2].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("to")));
495 2 : CPPUNIT_ASSERT(symbols[3].text == cr);
496 2 : }
497 :
498 2 : void ScannerTest::testExclamation()
499 : {
500 2 : const rtl::OUString source1(RTL_CONSTASCII_USTRINGPARAM("asdf!asdf"));
501 2 : const rtl::OUString source2(RTL_CONSTASCII_USTRINGPARAM("!1234"));
502 2 : const rtl::OUString source3(RTL_CONSTASCII_USTRINGPARAM("!_3"));
503 2 : const rtl::OUString source4(RTL_CONSTASCII_USTRINGPARAM("!$"));
504 2 : const rtl::OUString source5(RTL_CONSTASCII_USTRINGPARAM("!%"));
505 2 : const rtl::OUString source6(RTL_CONSTASCII_USTRINGPARAM("!\n"));
506 :
507 2 : std::vector<Symbol> symbols;
508 :
509 2 : symbols = getSymbols(source1);
510 2 : CPPUNIT_ASSERT(symbols.size() == 4);
511 2 : CPPUNIT_ASSERT(symbols[0].text == asdf);
512 2 : CPPUNIT_ASSERT(symbols[1].text == excl);
513 2 : CPPUNIT_ASSERT(symbols[2].text == asdf);
514 2 : CPPUNIT_ASSERT(symbols[3].text == cr);
515 :
516 2 : symbols = getSymbols(source2);
517 2 : CPPUNIT_ASSERT(symbols.size() == 3);
518 2 : CPPUNIT_ASSERT(symbols[0].text == excl);
519 2 : CPPUNIT_ASSERT(symbols[1].text.isEmpty());
520 2 : CPPUNIT_ASSERT(symbols[1].number == 1234);
521 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
522 :
523 2 : symbols = getSymbols(source3);
524 2 : CPPUNIT_ASSERT(symbols.size() == 3);
525 2 : CPPUNIT_ASSERT(symbols[0].text == excl);
526 2 : CPPUNIT_ASSERT(symbols[1].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_3")));
527 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
528 :
529 2 : symbols = getSymbols(source4);
530 2 : CPPUNIT_ASSERT(symbols.size() == 3);
531 2 : CPPUNIT_ASSERT(symbols[0].text == excl);
532 2 : CPPUNIT_ASSERT(symbols[1].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("$")));
533 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
534 :
535 2 : symbols = getSymbols(source5);
536 2 : CPPUNIT_ASSERT(symbols.size() == 3);
537 2 : CPPUNIT_ASSERT(symbols[0].text == excl);
538 2 : CPPUNIT_ASSERT(symbols[1].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%")));
539 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
540 :
541 2 : symbols = getSymbols(source6);
542 2 : CPPUNIT_ASSERT(symbols.size() == 2);
543 2 : CPPUNIT_ASSERT(symbols[0].text == excl);
544 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
545 2 : }
546 :
547 2 : void ScannerTest::testNumbers()
548 : {
549 2 : const rtl::OUString source1(RTL_CONSTASCII_USTRINGPARAM("12345"));
550 2 : const rtl::OUString source2(RTL_CONSTASCII_USTRINGPARAM("1.2.3"));
551 2 : const rtl::OUString source3(RTL_CONSTASCII_USTRINGPARAM("123.4"));
552 2 : const rtl::OUString source4(RTL_CONSTASCII_USTRINGPARAM("0.5"));
553 2 : const rtl::OUString source5(RTL_CONSTASCII_USTRINGPARAM("5.0"));
554 2 : const rtl::OUString source6(RTL_CONSTASCII_USTRINGPARAM("0.0"));
555 2 : const rtl::OUString source7(RTL_CONSTASCII_USTRINGPARAM("-3"));
556 2 : const rtl::OUString source8(RTL_CONSTASCII_USTRINGPARAM("-0.0"));
557 2 : const rtl::OUString source9(RTL_CONSTASCII_USTRINGPARAM("12dE3"));
558 2 : const rtl::OUString source10(RTL_CONSTASCII_USTRINGPARAM("12e3"));
559 2 : const rtl::OUString source11(RTL_CONSTASCII_USTRINGPARAM("12D+3"));
560 2 : const rtl::OUString source12(RTL_CONSTASCII_USTRINGPARAM("12e++3"));
561 2 : const rtl::OUString source13(RTL_CONSTASCII_USTRINGPARAM("12e-3"));
562 2 : const rtl::OUString source14(RTL_CONSTASCII_USTRINGPARAM("12e-3+"));
563 2 : const rtl::OUString source15(RTL_CONSTASCII_USTRINGPARAM("1,2,3"));
564 2 : const rtl::OUString source16(RTL_CONSTASCII_USTRINGPARAM("1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"));
565 :
566 2 : std::vector<Symbol> symbols;
567 : sal_Int32 errors;
568 :
569 2 : symbols = getSymbols(source1, errors);
570 2 : CPPUNIT_ASSERT(symbols.size() == 2);
571 2 : CPPUNIT_ASSERT(symbols[0].number == 12345);
572 2 : CPPUNIT_ASSERT(symbols[0].type == SbxINTEGER);
573 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
574 2 : CPPUNIT_ASSERT(errors == 0);
575 :
576 2 : symbols = getSymbols(source2, errors);
577 2 : CPPUNIT_ASSERT(symbols.size() == 2);
578 2 : CPPUNIT_ASSERT(symbols[0].number == 1.23);
579 2 : CPPUNIT_ASSERT(symbols[0].type == SbxDOUBLE);
580 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
581 2 : CPPUNIT_ASSERT(errors == 1);
582 :
583 2 : symbols = getSymbols(source3, errors);
584 2 : CPPUNIT_ASSERT(symbols.size() == 2);
585 2 : CPPUNIT_ASSERT(symbols[0].number == 123.4);
586 2 : CPPUNIT_ASSERT(symbols[0].type == SbxDOUBLE);
587 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
588 2 : CPPUNIT_ASSERT(errors == 0);
589 :
590 2 : symbols = getSymbols(source4, errors);
591 2 : CPPUNIT_ASSERT(symbols.size() == 2);
592 2 : CPPUNIT_ASSERT(symbols[0].number == .5);
593 2 : CPPUNIT_ASSERT(symbols[0].type == SbxDOUBLE);
594 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
595 2 : CPPUNIT_ASSERT(errors == 0);
596 :
597 2 : symbols = getSymbols(source5, errors);
598 2 : CPPUNIT_ASSERT(symbols.size() == 2);
599 2 : CPPUNIT_ASSERT(symbols[0].number == 5);
600 2 : CPPUNIT_ASSERT(symbols[0].type == SbxDOUBLE);
601 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
602 2 : CPPUNIT_ASSERT(errors == 0);
603 :
604 2 : symbols = getSymbols(source6, errors);
605 2 : CPPUNIT_ASSERT(symbols.size() == 2);
606 2 : CPPUNIT_ASSERT(symbols[0].number == 0);
607 2 : CPPUNIT_ASSERT(symbols[0].type == SbxDOUBLE);
608 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
609 2 : CPPUNIT_ASSERT(errors == 0);
610 :
611 2 : symbols = getSymbols(source7, errors);
612 2 : CPPUNIT_ASSERT(symbols.size() == 3);
613 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-")));
614 2 : CPPUNIT_ASSERT(symbols[1].number == 3);
615 2 : CPPUNIT_ASSERT(symbols[1].type == SbxINTEGER);
616 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
617 2 : CPPUNIT_ASSERT(errors == 0);
618 :
619 2 : symbols = getSymbols(source8, errors);
620 2 : CPPUNIT_ASSERT(symbols.size() == 3);
621 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-")));
622 2 : CPPUNIT_ASSERT(symbols[1].number == 0);
623 2 : CPPUNIT_ASSERT(symbols[1].type == SbxDOUBLE);
624 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
625 2 : CPPUNIT_ASSERT(errors == 0);
626 :
627 2 : symbols = getSymbols(source9, errors);
628 2 : CPPUNIT_ASSERT(symbols.size() == 2);
629 2 : CPPUNIT_ASSERT(symbols[0].number == 12000);
630 2 : CPPUNIT_ASSERT(symbols[0].type == SbxDOUBLE);
631 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
632 2 : CPPUNIT_ASSERT(errors == 1);
633 :
634 2 : symbols = getSymbols(source10, errors);
635 2 : CPPUNIT_ASSERT(symbols.size() == 2);
636 2 : CPPUNIT_ASSERT(symbols[0].number == 12000);
637 2 : CPPUNIT_ASSERT(symbols[0].type == SbxDOUBLE);
638 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
639 2 : CPPUNIT_ASSERT(errors == 0);
640 :
641 2 : symbols = getSymbols(source11, errors);
642 2 : CPPUNIT_ASSERT(symbols.size() == 2);
643 2 : CPPUNIT_ASSERT(symbols[0].number == 12000);
644 2 : CPPUNIT_ASSERT(symbols[0].type == SbxDOUBLE);
645 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
646 2 : CPPUNIT_ASSERT(errors == 0);
647 :
648 2 : symbols = getSymbols(source12, errors);
649 2 : CPPUNIT_ASSERT(symbols.size() == 4);
650 2 : CPPUNIT_ASSERT(symbols[0].number == 12);
651 2 : CPPUNIT_ASSERT(symbols[0].type == SbxDOUBLE);
652 2 : CPPUNIT_ASSERT(symbols[1].text == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("+")));
653 2 : CPPUNIT_ASSERT(symbols[2].number == 3);
654 2 : CPPUNIT_ASSERT(symbols[2].type == SbxINTEGER);
655 2 : CPPUNIT_ASSERT(symbols[3].text == cr);
656 2 : CPPUNIT_ASSERT(errors == 0);
657 :
658 2 : symbols = getSymbols(source13, errors);
659 2 : CPPUNIT_ASSERT(symbols.size() == 2);
660 2 : CPPUNIT_ASSERT(symbols[0].number == .012);
661 2 : CPPUNIT_ASSERT(symbols[0].type == SbxDOUBLE);
662 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
663 2 : CPPUNIT_ASSERT(errors == 0);
664 :
665 2 : symbols = getSymbols(source14, errors);
666 2 : CPPUNIT_ASSERT(symbols.size() == 3);
667 2 : CPPUNIT_ASSERT(symbols[0].number == .012);
668 2 : CPPUNIT_ASSERT(symbols[0].type == SbxDOUBLE);
669 2 : CPPUNIT_ASSERT(symbols[1].text == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("+")));
670 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
671 2 : CPPUNIT_ASSERT(errors == 0);
672 :
673 2 : symbols = getSymbols(source15, errors);
674 2 : CPPUNIT_ASSERT(symbols.size() == 6);
675 2 : CPPUNIT_ASSERT(symbols[0].number == 1);
676 2 : CPPUNIT_ASSERT(symbols[0].type == SbxINTEGER);
677 2 : CPPUNIT_ASSERT(symbols[1].text == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(",")));
678 2 : CPPUNIT_ASSERT(symbols[2].number == 2);
679 2 : CPPUNIT_ASSERT(symbols[2].type == SbxINTEGER);
680 2 : CPPUNIT_ASSERT(symbols[3].text == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(",")));
681 2 : CPPUNIT_ASSERT(symbols[4].number == 3);
682 2 : CPPUNIT_ASSERT(symbols[4].type == SbxINTEGER);
683 2 : CPPUNIT_ASSERT(symbols[5].text == cr);
684 2 : CPPUNIT_ASSERT(errors == 0);
685 :
686 2 : symbols = getSymbols(source16, errors);
687 2 : CPPUNIT_ASSERT(symbols.size() == 2);
688 2 : CPPUNIT_ASSERT(symbols[0].number == 1);
689 2 : CPPUNIT_ASSERT(symbols[0].type == SbxDOUBLE);
690 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
691 : // This error is from a "buffer overflow" which is stupid because
692 : // the buffer is artificially constrained by the scanner.
693 2 : CPPUNIT_ASSERT(errors == 1); // HACK
694 2 : }
695 :
696 2 : void ScannerTest::testDataType()
697 : {
698 2 : const rtl::OUString source1(RTL_CONSTASCII_USTRINGPARAM("asdf%"));
699 2 : const rtl::OUString source2(RTL_CONSTASCII_USTRINGPARAM("asdf&"));
700 2 : const rtl::OUString source3(RTL_CONSTASCII_USTRINGPARAM("asdf!"));
701 2 : const rtl::OUString source4(RTL_CONSTASCII_USTRINGPARAM("asdf#"));
702 2 : const rtl::OUString source5(RTL_CONSTASCII_USTRINGPARAM("asdf@"));
703 2 : const rtl::OUString source6(RTL_CONSTASCII_USTRINGPARAM("asdf$"));
704 2 : const rtl::OUString source7(RTL_CONSTASCII_USTRINGPARAM("asdf "));
705 :
706 2 : std::vector<Symbol> symbols;
707 :
708 2 : symbols = getSymbols(source1);
709 2 : CPPUNIT_ASSERT(symbols.size() == 2);
710 2 : CPPUNIT_ASSERT(symbols[0].type == SbxINTEGER);
711 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
712 :
713 2 : symbols = getSymbols(source2);
714 2 : CPPUNIT_ASSERT(symbols.size() == 2);
715 2 : CPPUNIT_ASSERT(symbols[0].type == SbxLONG);
716 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
717 :
718 2 : symbols = getSymbols(source3);
719 2 : CPPUNIT_ASSERT(symbols.size() == 2);
720 2 : CPPUNIT_ASSERT(symbols[0].type == SbxSINGLE);
721 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
722 :
723 2 : symbols = getSymbols(source4);
724 2 : CPPUNIT_ASSERT(symbols.size() == 2);
725 2 : CPPUNIT_ASSERT(symbols[0].type == SbxDOUBLE);
726 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
727 :
728 2 : symbols = getSymbols(source5);
729 2 : CPPUNIT_ASSERT(symbols.size() == 2);
730 2 : CPPUNIT_ASSERT(symbols[0].type == SbxCURRENCY);
731 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
732 :
733 2 : symbols = getSymbols(source6);
734 2 : CPPUNIT_ASSERT(symbols.size() == 2);
735 2 : CPPUNIT_ASSERT(symbols[0].type == SbxSTRING);
736 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
737 :
738 2 : symbols = getSymbols(source7);
739 2 : CPPUNIT_ASSERT(symbols.size() == 2);
740 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
741 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
742 2 : }
743 :
744 2 : void ScannerTest::testHexOctal()
745 : {
746 2 : const rtl::OUString source1(RTL_CONSTASCII_USTRINGPARAM("&HA"));
747 2 : const rtl::OUString source2(RTL_CONSTASCII_USTRINGPARAM("&HASDF"));
748 2 : const rtl::OUString source3(RTL_CONSTASCII_USTRINGPARAM("&H10"));
749 2 : const rtl::OUString source4(RTL_CONSTASCII_USTRINGPARAM("&&H&1H1&H1"));
750 2 : const rtl::OUString source5(RTL_CONSTASCII_USTRINGPARAM("&O&O12"));
751 2 : const rtl::OUString source6(RTL_CONSTASCII_USTRINGPARAM("&O10"));
752 2 : const rtl::OUString source7(RTL_CONSTASCII_USTRINGPARAM("&HO"));
753 2 : const rtl::OUString source8(RTL_CONSTASCII_USTRINGPARAM("&O123000000000000000000000"));
754 2 : const rtl::OUString source9(RTL_CONSTASCII_USTRINGPARAM("&H1.23"));
755 :
756 2 : std::vector<Symbol> symbols;
757 :
758 2 : symbols = getSymbols(source1);
759 2 : CPPUNIT_ASSERT(symbols.size() == 2);
760 2 : CPPUNIT_ASSERT(symbols[0].number == 10);
761 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString());
762 2 : CPPUNIT_ASSERT(symbols[0].type == SbxINTEGER);
763 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
764 :
765 2 : symbols = getSymbols(source2);
766 2 : CPPUNIT_ASSERT(symbols.size() == 2);
767 2 : CPPUNIT_ASSERT(symbols[0].number == 2783);
768 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString());
769 2 : CPPUNIT_ASSERT(symbols[0].type = SbxINTEGER);
770 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
771 :
772 2 : symbols = getSymbols(source3);
773 2 : CPPUNIT_ASSERT(symbols.size() == 2);
774 2 : CPPUNIT_ASSERT(symbols[0].number == 16);
775 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString());
776 2 : CPPUNIT_ASSERT(symbols[0].type = SbxINTEGER);
777 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
778 :
779 2 : symbols = getSymbols(source4);
780 2 : CPPUNIT_ASSERT(symbols.size() == 6);
781 2 : CPPUNIT_ASSERT(symbols[0].number == 0);
782 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("&")));
783 2 : CPPUNIT_ASSERT(symbols[0].type == SbxVARIANT);
784 2 : CPPUNIT_ASSERT(symbols[1].number == 0);
785 2 : CPPUNIT_ASSERT(symbols[1].text == rtl::OUString());
786 2 : CPPUNIT_ASSERT(symbols[1].type == SbxINTEGER);
787 2 : CPPUNIT_ASSERT(symbols[2].number == 1);
788 2 : CPPUNIT_ASSERT(symbols[2].text == rtl::OUString());
789 2 : CPPUNIT_ASSERT(symbols[2].type == SbxINTEGER);
790 2 : CPPUNIT_ASSERT(symbols[3].number == 1);
791 2 : CPPUNIT_ASSERT(symbols[3].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("H1")));
792 2 : CPPUNIT_ASSERT(symbols[3].type == SbxLONG);
793 2 : CPPUNIT_ASSERT(symbols[4].number == 1);
794 2 : CPPUNIT_ASSERT(symbols[4].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("H1")));
795 2 : CPPUNIT_ASSERT(symbols[4].type == SbxVARIANT);
796 2 : CPPUNIT_ASSERT(symbols[5].text == cr);
797 :
798 2 : symbols = getSymbols(source5);
799 2 : CPPUNIT_ASSERT(symbols.size() == 3);
800 2 : CPPUNIT_ASSERT(symbols[0].number == 0);
801 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString());
802 2 : CPPUNIT_ASSERT(symbols[0].type == SbxINTEGER);
803 2 : CPPUNIT_ASSERT(symbols[1].number == 0);
804 2 : CPPUNIT_ASSERT(symbols[1].text == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("O12")));
805 2 : CPPUNIT_ASSERT(symbols[1].type == SbxVARIANT);
806 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
807 :
808 2 : symbols = getSymbols(source6);
809 2 : CPPUNIT_ASSERT(symbols.size() == 2);
810 2 : CPPUNIT_ASSERT(symbols[0].number == 8);
811 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString());
812 2 : CPPUNIT_ASSERT(symbols[0].type == SbxINTEGER);
813 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
814 :
815 2 : symbols = getSymbols(source7);
816 2 : CPPUNIT_ASSERT(symbols.size() == 2);
817 2 : CPPUNIT_ASSERT(symbols[0].number == 0);
818 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString());
819 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
820 :
821 2 : symbols = getSymbols(source8);
822 2 : CPPUNIT_ASSERT(symbols.size() == 2);
823 : // TODO: this line fails on 64 bit systems!!!
824 : // CPPUNIT_ASSERT(symbols[0].number == -1744830464);
825 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString());
826 2 : CPPUNIT_ASSERT(symbols[1].text == cr);
827 :
828 2 : symbols = getSymbols(source9);
829 2 : CPPUNIT_ASSERT(symbols.size() == 3);
830 2 : CPPUNIT_ASSERT(symbols[0].text == rtl::OUString());
831 2 : CPPUNIT_ASSERT(symbols[0].number == 1);
832 2 : CPPUNIT_ASSERT(symbols[0].type == SbxINTEGER);
833 2 : CPPUNIT_ASSERT(symbols[1].number == .23);
834 2 : CPPUNIT_ASSERT(symbols[1].text == rtl::OUString());
835 2 : CPPUNIT_ASSERT(symbols[1].type == SbxDOUBLE);
836 2 : CPPUNIT_ASSERT(symbols[2].text == cr);
837 2 : }
838 :
839 : // Put the test suite in the registry
840 2 : CPPUNIT_TEST_SUITE_REGISTRATION(ScannerTest);
841 : } // namespace
842 8 : CPPUNIT_PLUGIN_IMPLEMENT();
843 :
844 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|