#include #include using namespace lw; class StringsIteratorTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( StringsIteratorTest ); CPPUNIT_TEST( testGet ); CPPUNIT_TEST( testMove ); CPPUNIT_TEST( testEmpty ); CPPUNIT_TEST( testCharacters ); CPPUNIT_TEST( testIndex ); CPPUNIT_TEST( testCopyCons ); CPPUNIT_TEST( testCopyAss ); CPPUNIT_TEST( testMoveCons ); CPPUNIT_TEST( testMoveAss ); CPPUNIT_TEST( testSwap ); CPPUNIT_TEST_SUITE_END( ); public: void testGet( ); void testMove( ); void testEmpty( ); void testCharacters( ); void testIndex( ); void testCopyCons( ); void testCopyAss( ); void testMoveCons( ); void testMoveAss( ); void testSwap( ); }; CPPUNIT_TEST_SUITE_REGISTRATION( StringsIteratorTest ); /*----------------------------------------------------------------------------*/ void StringsIteratorTest::testGet( ) { T_String str( "wargl" ); T_StringIterator it( str ); CPPUNIT_ASSERT( !it.atEnd( ) ); } void StringsIteratorTest::testMove( ) { T_String str( "wargl" ); T_StringIterator it( str ); int counter( 0 ); while ( !it.atEnd( ) ) { counter ++; it.next( ); } CPPUNIT_ASSERT_EQUAL( 5 , counter ); } void StringsIteratorTest::testEmpty( ) { T_String str; T_StringIterator it( str ); CPPUNIT_ASSERT( it.atEnd( ) ); } void StringsIteratorTest::testCharacters( ) { char const* const s( "wa\xe2\x82\xacrgl" ); T_String str( s ); T_StringIterator it( str ); int counter( 0 ); while ( !it.atEnd( ) ) { T_Character c( it ); if ( counter < 2 ) { CPPUNIT_ASSERT( c == s[ counter ] ); } else if ( counter == 2 ) { CPPUNIT_ASSERT( c == 0x20ac ); } else { CPPUNIT_ASSERT( c == s[ counter + 2 ] ); } counter ++; it.next( ); } } void StringsIteratorTest::testIndex( ) { char const* const s( "wa\xe2\x82\xacrgl" ); T_String str( s ); T_StringIterator it( str ); uint32_t counter( 0 ); while ( !it.atEnd( ) ) { CPPUNIT_ASSERT_EQUAL( counter , it.index( ) ); counter ++; it.next( ); } } /*----------------------------------------------------------------------------*/ void StringsIteratorTest::testCopyCons( ) { T_String str( "wargl" ); T_StringIterator it( str ); it.next( ); T_StringIterator copy( it ); copy.next( ); CPPUNIT_ASSERT( T_Character( it ) == 'a' ); CPPUNIT_ASSERT( T_Character( copy ) == 'r' ); } void StringsIteratorTest::testCopyAss( ) { T_String str( "wargl" ); T_StringIterator it( str ); T_StringIterator copy( str ); it.next( ); copy = it; copy.next( ); CPPUNIT_ASSERT( T_Character( it ) == 'a' ); CPPUNIT_ASSERT( T_Character( copy ) == 'r' ); } void StringsIteratorTest::testMoveCons( ) { T_String str( "wargl" ); T_StringIterator it( str ); it.next( ); T_StringIterator copy( std::move( it ) ); copy.next( ); CPPUNIT_ASSERT( it.atEnd( ) ); CPPUNIT_ASSERT( T_Character( copy ) == 'r' ); } void StringsIteratorTest::testMoveAss( ) { T_String str( "wargl" ); T_StringIterator it( str ); T_StringIterator copy( str ); it.next( ); copy = std::move( it ); copy.next( ); CPPUNIT_ASSERT( T_Character( it ) == 'w' ); CPPUNIT_ASSERT( T_Character( copy ) == 'r' ); } void StringsIteratorTest::testSwap( ) { T_String str( "wargl" ); T_StringIterator it( str ); T_StringIterator copy( str ); it.next( ); swap( it , copy ); CPPUNIT_ASSERT( T_Character( it ) == 'w' ); CPPUNIT_ASSERT( T_Character( copy ) == 'a' ); }