Handle quotes in wxTranslateFromUnicodeFormat.

When parsing Unicode date formats text inside single quotes should not be
escaped and instead treated as literal text. In addition two single quotes
(either inside or outside quoted text) should be interpreted as a single
quote.

Fixes #16118.
This commit is contained in:
Dimitri Schoolwerth
2015-04-09 04:39:35 +04:00
parent e44df8e12f
commit adbc9863b2
2 changed files with 103 additions and 9 deletions

View File

@@ -232,6 +232,7 @@ private:
CPPUNIT_TEST( TestTimeArithmetics );
CPPUNIT_TEST( TestDSTBug );
CPPUNIT_TEST( TestDateOnly );
CPPUNIT_TEST( TestTranslateFromUnicodeFormat );
CPPUNIT_TEST_SUITE_END();
void TestLeapYears();
@@ -252,6 +253,7 @@ private:
void TestTimeArithmetics();
void TestDSTBug();
void TestDateOnly();
void TestTranslateFromUnicodeFormat();
DECLARE_NO_COPY_CLASS(DateTimeTestCase)
};
@@ -1447,4 +1449,37 @@ void DateTimeTestCase::TestDateOnly()
CPPUNIT_ASSERT_EQUAL( wxDateTime::Today(), wxDateTime::Now().GetDateOnly() );
}
// Forward declaration
wxString wxTranslateFromUnicodeFormat(const wxString& fmt);
void DateTimeTestCase::TestTranslateFromUnicodeFormat()
{
// Test single quote handling...
CPPUNIT_ASSERT_EQUAL("", wxTranslateFromUnicodeFormat("'"));
CPPUNIT_ASSERT_EQUAL("%H", wxTranslateFromUnicodeFormat("H'"));
CPPUNIT_ASSERT_EQUAL("H", wxTranslateFromUnicodeFormat("'H"));
CPPUNIT_ASSERT_EQUAL("'", wxTranslateFromUnicodeFormat("''"));
CPPUNIT_ASSERT_EQUAL("%H'", wxTranslateFromUnicodeFormat("H''"));
CPPUNIT_ASSERT_EQUAL("H", wxTranslateFromUnicodeFormat("'H'"));
CPPUNIT_ASSERT_EQUAL("'%H", wxTranslateFromUnicodeFormat("''H"));
CPPUNIT_ASSERT_EQUAL("'", wxTranslateFromUnicodeFormat("'''"));
CPPUNIT_ASSERT_EQUAL("%H'", wxTranslateFromUnicodeFormat("H'''"));
CPPUNIT_ASSERT_EQUAL("H'", wxTranslateFromUnicodeFormat("'H''"));
CPPUNIT_ASSERT_EQUAL("'%H", wxTranslateFromUnicodeFormat("''H'"));
CPPUNIT_ASSERT_EQUAL("'H", wxTranslateFromUnicodeFormat("'''H"));
CPPUNIT_ASSERT_EQUAL("''", wxTranslateFromUnicodeFormat("''''"));
CPPUNIT_ASSERT_EQUAL("%H''", wxTranslateFromUnicodeFormat("H''''"));
CPPUNIT_ASSERT_EQUAL("H'", wxTranslateFromUnicodeFormat("'H'''"));
CPPUNIT_ASSERT_EQUAL("'%H'", wxTranslateFromUnicodeFormat("''H''"));
CPPUNIT_ASSERT_EQUAL("'H", wxTranslateFromUnicodeFormat("'''H'"));
CPPUNIT_ASSERT_EQUAL("''%H", wxTranslateFromUnicodeFormat("''''H"));
CPPUNIT_ASSERT_EQUAL("'%H o'clock: It's about time'",
wxTranslateFromUnicodeFormat("''H 'o''clock: It''s about time'''"));
}
#endif // wxUSE_DATETIME