CPPUNIT_TEST( String );
CPPUNIT_TEST( PChar );
CPPUNIT_TEST( Format );
+ CPPUNIT_TEST( FormatUnicode );
CPPUNIT_TEST( Constructors );
CPPUNIT_TEST( StaticConstructors );
CPPUNIT_TEST( Extraction );
void String();
void PChar();
void Format();
+ void FormatUnicode();
void Constructors();
void StaticConstructors();
void Extraction();
);
}
+void StringTestCase::FormatUnicode()
+{
+#if wxUSE_UNICODE
+ const char *UNICODE_STR = "Iestat\xC4\xAB %i%i";
+ //const char *UNICODE_STR = "Iestat\xCC\x84 %i%i";
+
+ wxString fmt = wxString::FromUTF8(UNICODE_STR);
+ wxString s = wxString::Format(fmt, 1, 1);
+ wxString expected(fmt);
+ expected.Replace("%i", "1");
+ CPPUNIT_ASSERT_EQUAL( expected, s );
+#endif // wxUSE_UNICODE
+}
+
void StringTestCase::Constructors()
{
CPPUNIT_ASSERT_EQUAL( "", wxString('Z', 0) );
CPPUNIT_ASSERT_EQUAL( 0, wxString(wxString(), 17).length() );
+#if wxUSE_UNICODE_UTF8
+ // This string has 3 characters (<h>, <e'> and <l>), not 4 when using UTF-8
+ // locale!
+ if ( wxConvLibc.IsUTF8() )
+ {
+ wxString s3("h\xc3\xa9llo", 4);
+ CPPUNIT_ASSERT_EQUAL( 3, s3.length() );
+ CPPUNIT_ASSERT_EQUAL( 'l', (char)s3[2] );
+ }
+#endif // wxUSE_UNICODE_UTF8
+
+
static const char *s = "?really!";
const char *start = wxStrchr(s, 'r');
const char *end = wxStrchr(s, '!');
CPPUNIT_ASSERT_EQUAL( "Hello", wxString::FromUTF8("Hello", 5) );
CPPUNIT_ASSERT_EQUAL( "Hello", wxString::FromUTF8("Hello") );
+ CPPUNIT_ASSERT_EQUAL( 2, wxString::FromUTF8("h\xc3\xa9llo", 3).length() );
+
+
//CPPUNIT_ASSERT_EQUAL( 1, wxString::FromUTF8("", 1).length() );
}
long value;
#endif // wxLongLong_t
int flags;
+ int base;
long LValue() const { return value; }
unsigned long ULValue() const { return value; }
{ wxT("9223372036854775808"), wxULL(9223372036854775808), Number_LongLong |
Number_Unsigned },
#endif // wxLongLong_t
+
+ // Base tests.
+ { wxT("010"), 10, Number_Ok, 10 },
+ { wxT("010"), 8, Number_Ok, 0 },
+ { wxT("010"), 8, Number_Ok, 8 },
+ { wxT("010"), 16, Number_Ok, 16 },
+
+ { wxT("0010"), 10, Number_Ok, 10 },
+ { wxT("0010"), 8, Number_Ok, 0 },
+ { wxT("0010"), 8, Number_Ok, 8 },
+ { wxT("0010"), 16, Number_Ok, 16 },
+
+ { wxT("0x11"), 0, Number_Invalid, 10 },
+ { wxT("0x11"), 17, Number_Ok, 0 },
+ { wxT("0x11"), 0, Number_Invalid, 8 },
+ { wxT("0x11"), 17, Number_Ok, 16 },
};
void StringTestCase::ToLong()
// NOTE: unless you're using some exotic locale, ToCLong and ToLong
// should behave the same for our test data set:
- CPPUNIT_ASSERT_EQUAL( ld.IsOk(), wxString(ld.str).ToCLong(&l) );
+ CPPUNIT_ASSERT_EQUAL( ld.IsOk(),
+ wxString(ld.str).ToCLong(&l, ld.base) );
if ( ld.IsOk() )
CPPUNIT_ASSERT_EQUAL( ld.LValue(), l );
- CPPUNIT_ASSERT_EQUAL( ld.IsOk(), wxString(ld.str).ToLong(&l) );
+ CPPUNIT_ASSERT_EQUAL( ld.IsOk(),
+ wxString(ld.str).ToLong(&l, ld.base) );
if ( ld.IsOk() )
CPPUNIT_ASSERT_EQUAL( ld.LValue(), l );
}
// NOTE: unless you're using some exotic locale, ToCLong and ToLong
// should behave the same for our test data set:
- CPPUNIT_ASSERT_EQUAL( ld.IsOk(), wxString(ld.str).ToCULong(&ul) );
+ CPPUNIT_ASSERT_EQUAL( ld.IsOk(),
+ wxString(ld.str).ToCULong(&ul, ld.base) );
if ( ld.IsOk() )
CPPUNIT_ASSERT_EQUAL( ld.ULValue(), ul );
- CPPUNIT_ASSERT_EQUAL( ld.IsOk(), wxString(ld.str).ToULong(&ul) );
+ CPPUNIT_ASSERT_EQUAL( ld.IsOk(),
+ wxString(ld.str).ToULong(&ul, ld.base) );
if ( ld.IsOk() )
CPPUNIT_ASSERT_EQUAL( ld.ULValue(), ul );
}
if ( ld.flags & (Number_Long | Number_Unsigned) )
continue;
- CPPUNIT_ASSERT_EQUAL( ld.IsOk(), wxString(ld.str).ToLongLong(&l) );
+ CPPUNIT_ASSERT_EQUAL( ld.IsOk(),
+ wxString(ld.str).ToLongLong(&l, ld.base) );
if ( ld.IsOk() )
CPPUNIT_ASSERT_EQUAL( ld.LLValue(), l );
}
if ( ld.flags & (Number_Long | Number_Signed) )
continue;
- CPPUNIT_ASSERT_EQUAL( ld.IsOk(), wxString(ld.str).ToULongLong(&ul) );
+ CPPUNIT_ASSERT_EQUAL( ld.IsOk(),
+ wxString(ld.str).ToULongLong(&ul, ld.base) );
if ( ld.IsOk() )
CPPUNIT_ASSERT_EQUAL( ld.ULLValue(), ul );
}