diff --git a/include/wx/string.h b/include/wx/string.h index 4591e1b075..03c21a7acf 100644 --- a/include/wx/string.h +++ b/include/wx/string.h @@ -2669,7 +2669,7 @@ public: wxString& assign(const char *sz, size_t n) { - wxSTRING_SET_CACHED_LENGTH(n); + wxSTRING_INVALIDATE_CACHE(); SubstrBufFromMB str(ImplStr(sz, n)); m_impl.assign(str.data, str.len); diff --git a/tests/strings/strings.cpp b/tests/strings/strings.cpp index 879fab7907..13904976ac 100644 --- a/tests/strings/strings.cpp +++ b/tests/strings/strings.cpp @@ -192,6 +192,12 @@ void StringTestCase::Constructors() CPPUNIT_ASSERT_EQUAL( 0, wxString(wxString(), 17).length() ); + // This string has 3 characters (, and ), not 4! + wxString s3("h\xc3\xa9llo", 4); + CPPUNIT_ASSERT_EQUAL( 3, s3.length() ); + CPPUNIT_ASSERT_EQUAL( 'l', (char)s3[2] ); + + static const char *s = "?really!"; const char *start = wxStrchr(s, 'r'); const char *end = wxStrchr(s, '!'); @@ -219,6 +225,9 @@ void StringTestCase::StaticConstructors() 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() ); }