From: <bl...@us...> - 2003-05-04 22:13:54
|
Update of /cvsroot/cpptool/rfta/src/rftaparser In directory sc8-pr-cvs1:/tmp/cvs-serv24589/src/rftaparser Modified Files: MiniParserTest.cpp MiniParserTest.h Log Message: * added 'at least one spaces parser': space * added repeat parser * added trivial callback mecanism using Boost.Function. Index: MiniParserTest.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rftaparser/MiniParserTest.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** MiniParserTest.cpp 4 May 2003 18:19:28 -0000 1.1 --- MiniParserTest.cpp 4 May 2003 22:13:51 -0000 1.2 *************** *** 30,40 **** int expectedEnd = -1 ) { ! if ( expectedEnd ) expectedEnd = text.length(); Xtl::ParseResult result = parse( text, parser ); failIf( !result.matched_, "parsing failed" ); ! checkEquals( text.c_str(), result.matchStart_, "wrong match start" ); ! checkEquals( text.c_str() + expectedEnd, result.matchEnd_ , "wrong match end" ); } --- 30,41 ---- int expectedEnd = -1 ) { ! if ( expectedEnd == -1 ) expectedEnd = text.length(); Xtl::ParseResult result = parse( text, parser ); failIf( !result.matched_, "parsing failed" ); ! const char *start = text.c_str(); ! checkEquals( 0, result.matchStart_ - start, "wrong match start" ); ! checkEquals( expectedEnd, result.matchEnd_ - start, "wrong match end" ); } *************** *** 169,172 **** --- 170,226 ---- RFTA_ASSERT_MINIPARSER_FAIL( "+", parser2 ); RFTA_ASSERT_MINIPARSER_FAIL( "", parser2 ); + } + + + void + MiniParserTest::testParseRepeat() + { + const Xtl::MiniParser &parser = Xtl::makeRepeatParser( Xtl::StringMiniParser( "ab" ) ); + RFTA_ASSERT_MINIPARSER_PASS( "", parser ); + RFTA_ASSERT_MINIPARSER_PASS( "ab", parser ); + RFTA_ASSERT_MINIPARSER_PASS( "ababababab", parser ); + RFTA_ASSERT_MINIPARSER_PASS( "ababa", parser, 4 ); + + const Xtl::MiniParser &parser2 = Xtl::makeOnceOrMoreParser( Xtl::StringMiniParser( "ab" ) ); + RFTA_ASSERT_MINIPARSER_FAIL( "", parser2 ); + RFTA_ASSERT_MINIPARSER_PASS( "ab", parser2 ); + RFTA_ASSERT_MINIPARSER_PASS( "ababababab", parser2 ); + RFTA_ASSERT_MINIPARSER_PASS( "ababa", parser2, 4 ); + + const Xtl::MiniParser &parser3 = Xtl::makeRepeatParser( Xtl::StringMiniParser( "ab" ), 3 ); + RFTA_ASSERT_MINIPARSER_FAIL( "", parser3 ); + RFTA_ASSERT_MINIPARSER_FAIL( "ab", parser3 ); + RFTA_ASSERT_MINIPARSER_PASS( "ababab", parser3 ); + RFTA_ASSERT_MINIPARSER_PASS( "ababababa", parser3, 8 ); + RFTA_ASSERT_MINIPARSER_FAIL( "ababa", parser3 ); + } + + + void + MiniParserTest::testParseSpaces() + { + RFTA_ASSERT_MINIPARSER_PASS( " ", Xtl::spaces ); + RFTA_ASSERT_MINIPARSER_PASS( " ", Xtl::spaces ); + RFTA_ASSERT_MINIPARSER_FAIL( "", Xtl::spaces ); + RFTA_ASSERT_MINIPARSER_FAIL( "a", Xtl::spaces ); + RFTA_ASSERT_MINIPARSER_PASS( " a", Xtl::spaces, 2 ); + } + + + namespace { + static Xtl::CStringView callback1Text; + static void callback1( const Xtl::CStringView &text ) + { + callback1Text = text; + } + } + + void + MiniParserTest::testParseCallback() + { + const Xtl::MiniParser &parser = Xtl::spaces>> Xtl::StringMiniParser( "ab" )[&callback1] >> Xtl::spaces; + const std::string text( " ab " ); + RFTA_ASSERT_MINIPARSER_PASS( text, parser ); + RFTA_ASSERT_EQUAL( "ab", callback1Text.str() ); } Index: MiniParserTest.h =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rftaparser/MiniParserTest.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** MiniParserTest.h 4 May 2003 18:19:28 -0000 1.1 --- MiniParserTest.h 4 May 2003 22:13:51 -0000 1.2 *************** *** 25,28 **** --- 25,31 ---- CPPUNIT_TEST( testParseOptional ); CPPUNIT_TEST( testParseAlternative ); + CPPUNIT_TEST( testParseRepeat ); + CPPUNIT_TEST( testParseSpaces ); + CPPUNIT_TEST( testParseCallback ); CPPUNIT_TEST_SUITE_END(); *************** *** 49,52 **** --- 52,61 ---- void testParseAlternative(); + + void testParseRepeat(); + + void testParseSpaces(); + + void testParseCallback(); private: |