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" );
}
|