| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 | 
							- ///////////////////////////////////////////////////////////////////////////////
 
- // Name:        tests/strings/strings.cpp
 
- // Purpose:     wxStringTokenizer unit test
 
- // Author:      Vadim Zeitlin
 
- // Created:     2005-12-20 (extacted from strings.cpp)
 
- // Copyright:   (c) 2004-2005 Vadim Zeitlin
 
- ///////////////////////////////////////////////////////////////////////////////
 
- // ----------------------------------------------------------------------------
 
- // headers
 
- // ----------------------------------------------------------------------------
 
- #include "testprec.h"
 
- #ifdef __BORLANDC__
 
-     #pragma hdrstop
 
- #endif
 
- #ifndef WX_PRECOMP
 
-     #include "wx/wx.h"
 
- #endif // WX_PRECOMP
 
- #include "wx/tokenzr.h"
 
- // ----------------------------------------------------------------------------
 
- // test class
 
- // ----------------------------------------------------------------------------
 
- class TokenizerTestCase : public CppUnit::TestCase
 
- {
 
- public:
 
-     TokenizerTestCase() { }
 
- private:
 
-     CPPUNIT_TEST_SUITE( TokenizerTestCase );
 
-         CPPUNIT_TEST( GetCount );
 
-         CPPUNIT_TEST( GetPosition );
 
-         CPPUNIT_TEST( GetString );
 
-         CPPUNIT_TEST( LastDelimiter );
 
-         CPPUNIT_TEST( StrtokCompat );
 
-     CPPUNIT_TEST_SUITE_END();
 
-     void GetCount();
 
-     void GetPosition();
 
-     void GetString();
 
-     void LastDelimiter();
 
-     void StrtokCompat();
 
-     DECLARE_NO_COPY_CLASS(TokenizerTestCase)
 
- };
 
- // register in the unnamed registry so that these tests are run by default
 
- CPPUNIT_TEST_SUITE_REGISTRATION( TokenizerTestCase );
 
- // also include in its own registry so that these tests can be run alone
 
- CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( TokenizerTestCase, "TokenizerTestCase" );
 
- // ----------------------------------------------------------------------------
 
- // test data
 
- // ----------------------------------------------------------------------------
 
- static const struct TokenizerTestData
 
- {
 
-     // the string to tokenize
 
-     const wxChar *str;
 
-     // the delimiters to use
 
-     const wxChar *delims;
 
-     // the tokenizer mode
 
-     wxStringTokenizerMode mode;
 
-     // expected number of tokens
 
-     size_t count;
 
- }
 
- gs_testData[] =
 
- {
 
-     { wxT(""),                   wxT(" "),              wxTOKEN_DEFAULT,       0 },
 
-     { wxT(""),                   wxT(" "),              wxTOKEN_RET_EMPTY,     0 },
 
-     { wxT(""),                   wxT(" "),              wxTOKEN_RET_EMPTY_ALL, 0 },
 
-     { wxT(""),                   wxT(" "),              wxTOKEN_RET_DELIMS,    0 },
 
-     { wxT(":"),                  wxT(":"),              wxTOKEN_RET_EMPTY,     1 },
 
-     { wxT(":"),                  wxT(":"),              wxTOKEN_RET_DELIMS,    1 },
 
-     { wxT(":"),                  wxT(":"),              wxTOKEN_RET_EMPTY_ALL, 2 },
 
-     { wxT("::"),                 wxT(":"),              wxTOKEN_RET_EMPTY,     1 },
 
-     { wxT("::"),                 wxT(":"),              wxTOKEN_RET_DELIMS,    1 },
 
-     { wxT("::"),                 wxT(":"),              wxTOKEN_RET_EMPTY_ALL, 3 },
 
-     { wxT("Hello, world"),       wxT(" "),              wxTOKEN_DEFAULT,       2 },
 
-     { wxT("Hello,   world  "),   wxT(" "),              wxTOKEN_DEFAULT,       2 },
 
-     { wxT("Hello, world"),       wxT(","),              wxTOKEN_DEFAULT,       2 },
 
-     { wxT("Hello, world!"),      wxT(",!"),             wxTOKEN_DEFAULT,       2 },
 
-     { wxT("Hello,, world!"),     wxT(",!"),             wxTOKEN_DEFAULT,       3 },
 
-     { wxT("Hello,, world!"),     wxT(",!"),             wxTOKEN_STRTOK,        2 },
 
-     { wxT("Hello, world!"),      wxT(",!"),             wxTOKEN_RET_EMPTY_ALL, 3 },
 
-     { wxT("username:password:uid:gid:gecos:home:shell"),
 
-                                 wxT(":"),              wxTOKEN_DEFAULT,       7 },
 
-     { wxT("1:2::3:"),            wxT(":"),              wxTOKEN_DEFAULT,       4 },
 
-     { wxT("1:2::3:"),            wxT(":"),              wxTOKEN_RET_EMPTY,     4 },
 
-     { wxT("1:2::3:"),            wxT(":"),              wxTOKEN_RET_EMPTY_ALL, 5 },
 
-     { wxT("1:2::3:"),            wxT(":"),              wxTOKEN_RET_DELIMS,    4 },
 
-     { wxT("1:2::3:"),            wxT(":"),              wxTOKEN_STRTOK,        3 },
 
-     { wxT("1:2::3::"),           wxT(":"),              wxTOKEN_DEFAULT,       4 },
 
-     { wxT("1:2::3::"),           wxT(":"),              wxTOKEN_RET_EMPTY,     4 },
 
-     { wxT("1:2::3::"),           wxT(":"),              wxTOKEN_RET_EMPTY_ALL, 6 },
 
-     { wxT("1:2::3::"),           wxT(":"),              wxTOKEN_RET_DELIMS,    4 },
 
-     { wxT("1:2::3::"),           wxT(":"),              wxTOKEN_STRTOK,        3 },
 
-     { wxT("1 \t3\t4  6   "),     wxDEFAULT_DELIMITERS, wxTOKEN_DEFAULT,       4 },
 
-     { wxT("1 \t3\t4  6   "),     wxDEFAULT_DELIMITERS, wxTOKEN_STRTOK,        4 },
 
-     { wxT("1 \t3\t4  6   "),     wxDEFAULT_DELIMITERS, wxTOKEN_RET_EMPTY,     6 },
 
-     { wxT("1 \t3\t4  6   "),     wxDEFAULT_DELIMITERS, wxTOKEN_RET_EMPTY_ALL, 9 },
 
-     { wxT("01/02/99"),           wxT("/-"),             wxTOKEN_DEFAULT,       3 },
 
-     { wxT("01-02/99"),           wxT("/-"),             wxTOKEN_RET_DELIMS,    3 },
 
- };
 
- // helper function returning the string showing the index for which the test
 
- // fails in the diagnostic message
 
- static std::string Nth(size_t n)
 
- {
 
-     return std::string(wxString::Format(wxT("for loop index %lu"),
 
-                                         (unsigned long)n).mb_str());
 
- }
 
- // ----------------------------------------------------------------------------
 
- // the tests
 
- // ----------------------------------------------------------------------------
 
- void TokenizerTestCase::GetCount()
 
- {
 
-     for ( size_t n = 0; n < WXSIZEOF(gs_testData); n++ )
 
-     {
 
-         const TokenizerTestData& ttd = gs_testData[n];
 
-         wxStringTokenizer tkz(ttd.str, ttd.delims, ttd.mode);
 
-         CPPUNIT_ASSERT_EQUAL_MESSAGE( Nth(n), ttd.count, tkz.CountTokens() );
 
-         size_t count = 0;
 
-         while ( tkz.HasMoreTokens() )
 
-         {
 
-             tkz.GetNextToken();
 
-             count++;
 
-         }
 
-         CPPUNIT_ASSERT_EQUAL_MESSAGE( Nth(n), ttd.count, count );
 
-     }
 
- }
 
- // call this with the string to tokenize, delimeters to use and the expected
 
- // positions (i.e. results of GetPosition()) after each GetNextToken() call,
 
- // terminate positions with 0
 
- static void
 
- DoTestGetPosition(const wxChar *s, const wxChar *delims, int pos, ...)
 
- {
 
-     wxStringTokenizer tkz(s, delims);
 
-     CPPUNIT_ASSERT_EQUAL( (size_t)0, tkz.GetPosition() );
 
-     va_list ap;
 
-     va_start(ap, pos);
 
-     for ( ;; )
 
-     {
 
-         if ( !pos )
 
-         {
 
-             CPPUNIT_ASSERT( !tkz.HasMoreTokens() );
 
-             break;
 
-         }
 
-         tkz.GetNextToken();
 
-         CPPUNIT_ASSERT_EQUAL( (size_t)pos, tkz.GetPosition() );
 
-         pos = va_arg(ap, int);
 
-     }
 
-     va_end(ap);
 
- }
 
- void TokenizerTestCase::GetPosition()
 
- {
 
-     DoTestGetPosition(wxT("foo"), wxT("_"), 3, 0);
 
-     DoTestGetPosition(wxT("foo_bar"), wxT("_"), 4, 7, 0);
 
-     DoTestGetPosition(wxT("foo_bar_"), wxT("_"), 4, 8, 0);
 
- }
 
- // helper for GetString(): the parameters are the same as for DoTestGetPosition
 
- // but it checks GetString() return value instead of GetPosition()
 
- static void
 
- DoTestGetString(const wxChar *s, const wxChar *delims, int pos, ...)
 
- {
 
-     wxStringTokenizer tkz(s, delims);
 
-     CPPUNIT_ASSERT_EQUAL( wxString(s), tkz.GetString() );
 
-     va_list ap;
 
-     va_start(ap, pos);
 
-     for ( ;; )
 
-     {
 
-         if ( !pos )
 
-         {
 
-             CPPUNIT_ASSERT( tkz.GetString().empty() ) ;
 
-             break;
 
-         }
 
-         tkz.GetNextToken();
 
-         CPPUNIT_ASSERT_EQUAL( wxString(s + pos), tkz.GetString() );
 
-         pos = va_arg(ap, int);
 
-     }
 
-     va_end(ap);
 
- }
 
- void TokenizerTestCase::GetString()
 
- {
 
-     DoTestGetString(wxT("foo"), wxT("_"), 3, 0);
 
-     DoTestGetString(wxT("foo_bar"), wxT("_"), 4, 7, 0);
 
-     DoTestGetString(wxT("foo_bar_"), wxT("_"), 4, 8, 0);
 
- }
 
- void TokenizerTestCase::LastDelimiter()
 
- {
 
-     wxStringTokenizer tkz(wxT("a+-b=c"), wxT("+-="));
 
-     tkz.GetNextToken();
 
-     CPPUNIT_ASSERT_EQUAL( wxT('+'), tkz.GetLastDelimiter() );
 
-     tkz.GetNextToken();
 
-     CPPUNIT_ASSERT_EQUAL( wxT('-'), tkz.GetLastDelimiter() );
 
-     tkz.GetNextToken();
 
-     CPPUNIT_ASSERT_EQUAL( wxT('='), tkz.GetLastDelimiter() );
 
-     tkz.GetNextToken();
 
-     CPPUNIT_ASSERT_EQUAL( wxT('\0'), tkz.GetLastDelimiter() );
 
- }
 
- void TokenizerTestCase::StrtokCompat()
 
- {
 
-     for ( size_t n = 0; n < WXSIZEOF(gs_testData); n++ )
 
-     {
 
-         const TokenizerTestData& ttd = gs_testData[n];
 
-         if ( ttd.mode != wxTOKEN_STRTOK )
 
-             continue;
 
- #if wxUSE_UNICODE
 
-         wxWCharBuffer
 
- #else
 
-         wxCharBuffer
 
- #endif
 
-             buf(ttd.str);
 
-         wxChar *last;
 
-         wxChar *s = wxStrtok(buf.data(), ttd.delims, &last);
 
-         wxStringTokenizer tkz(ttd.str, ttd.delims, ttd.mode);
 
-         while ( tkz.HasMoreTokens() )
 
-         {
 
-             CPPUNIT_ASSERT_EQUAL( wxString(s), tkz.GetNextToken() );
 
-             s = wxStrtok(NULL, ttd.delims, &last);
 
-         }
 
-     }
 
- }
 
 
  |