From: <net...@us...> - 2003-04-29 09:46:42
|
Update of /cvsroot/cpptool/rfta/src/rftaparser In directory sc8-pr-cvs1:/tmp/cvs-serv21691/src/rftaparser Modified Files: ParserToolsTest.h ParserToolsTest.cpp Log Message: -- function + test for backward skipping over identifiers Index: ParserToolsTest.h =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rftaparser/ParserToolsTest.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ParserToolsTest.h 28 Apr 2003 11:08:41 -0000 1.1 --- ParserToolsTest.h 29 Apr 2003 09:46:07 -0000 1.2 *************** *** 20,23 **** --- 20,24 ---- CPPUNIT_TEST( testTryReadIdentifier ); CPPUNIT_TEST( testTryReadKeyword ); + CPPUNIT_TEST( testBacktrackSkippingOverIdentifier ); CPPUNIT_TEST_SUITE_END(); *************** *** 36,39 **** --- 37,41 ---- void testTryReadIdentifier(); void testTryReadKeyword(); + void testBacktrackSkippingOverIdentifier(); private: Index: ParserToolsTest.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rftaparser/ParserToolsTest.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ParserToolsTest.cpp 28 Apr 2003 11:08:41 -0000 1.1 --- ParserToolsTest.cpp 29 Apr 2003 09:46:08 -0000 1.2 *************** *** 77,88 **** // check non an identifier ! en = Xtl::CStringEnumerator( Xtl::CStringView( en.getCurrentPos(), textend ).enumerate() ); ident = ParserTools::tryReadKeyword( en, keywords ); CPPUNIT_ASSERT( ident.empty() ); // check not registered ! en = Xtl::CStringEnumerator( Xtl::CStringView( en.getCurrentPos()+3, textend ).enumerate() ); ident = ParserTools::tryReadKeyword( en, keywords ); CPPUNIT_ASSERT( ident.empty() ); } --- 77,117 ---- // check non an identifier ! en = Xtl::CStringView( en.getCurrentPos(), textend ).enumerate(); ident = ParserTools::tryReadKeyword( en, keywords ); CPPUNIT_ASSERT( ident.empty() ); // check not registered ! en = Xtl::CStringView( en.getCurrentPos()+3, textend ).enumerate(); ident = ParserTools::tryReadKeyword( en, keywords ); CPPUNIT_ASSERT( ident.empty() ); + } + + void + ParserToolsTest::testBacktrackSkippingOverIdentifier() + { + const char * textbeg = "a * test "; + const char * textend = textbeg + strlen(textbeg); + Xtl::CStringView cv ( textbeg, textend ); + Xtl::CStringBackEnumerator enu( cv.enumerate()+=strlen(textbeg)-1 ); + Xtl::CStringBackEnumerator end = enu; + + CPPUNIT_ASSERT( ParserTools::backtrackSkippingOverIdentifier(enu) ); + + // the back enumerator returns a current position which is one + // character beyond the character lookup by 'operator*' + std::string ident = Xtl::CStringView(enu.getCurrentPos(),end.getCurrentPos() ).str(); + CPPUNIT_ASSERT( ident == "test" ); + + cv = Xtl::CStringView( textbeg , enu.getCurrentPos()-1); // skip ' ' + enu = cv.enumerate()+cv.getLength(); + CPPUNIT_ASSERT( !ParserTools::backtrackSkippingOverIdentifier(enu) ); + + cv = Xtl::CStringView( textbeg , enu.getCurrentPos()-2); // skip ' *' + enu = cv.enumerate()+cv.getLength(); + end = enu; + CPPUNIT_ASSERT( ParserTools::backtrackSkippingOverIdentifier(enu) ); + + ident = Xtl::CStringView(enu.getCurrentPos(),end.getCurrentPos()).str(); + CPPUNIT_ASSERT( ident == "a" ); } |