LCOV - code coverage report
Current view: top level - libreoffice/basic/qa/cppunit - test_scanner.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 663 663 100.0 %
Date: 2012-12-17 Functions: 24 25 96.0 %
Legend: Lines: hit not hit

          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: */

Generated by: LCOV version 1.10