private:
CPPUNIT_TEST_SUITE( EllipsizationTestCase );
- CPPUNIT_TEST( Ellipsize );
+ CPPUNIT_TEST( NormalCase );
+ CPPUNIT_TEST( EnoughSpace );
+ CPPUNIT_TEST( VeryLittleSpace );
+ CPPUNIT_TEST( HasThreeDots );
CPPUNIT_TEST_SUITE_END();
- void Ellipsize();
+ void NormalCase();
+ void EnoughSpace();
+ void VeryLittleSpace();
+ void HasThreeDots();
DECLARE_NO_COPY_CLASS(EllipsizationTestCase)
};
// register in the unnamed registry so that these tests are run by default
CPPUNIT_TEST_SUITE_REGISTRATION( EllipsizationTestCase );
-// also include in it's own registry so that these tests can be run alone
+// also include in its own registry so that these tests can be run alone
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( EllipsizationTestCase, "EllipsizationTestCase" );
-void EllipsizationTestCase::Ellipsize()
+void EllipsizationTestCase::NormalCase()
{
wxMemoryDC dc;
- wxString stringsToTest[] =
- {
- "N", ".", "x", "foobar", wxS("\u03B1"), "Another test", "a very very very very very very very long string",
- "\xCE\xB1\xCE\xB2\xCE\xB3\xCE\xB4\xCE\xB5\xCE\xB6\xCE\xB7\xCE\xB8\xCE\xB9",
- // alpha+beta+gamma+delta+epsilon+zeta+eta+theta+iota
+ static const char *stringsToTest[] =
+ {
+ "N",
+ ".",
+ "x",
+ "foobar",
+ "\xCE\xB1", // U03B1 (GREEK SMALL LETTER ALPHA)
+ "Another test",
+ "a very very very very very very very long string",
+ // alpha+beta+gamma+delta+epsilon+zeta+eta+theta+iota
+ "\xCE\xB1\xCE\xB2\xCE\xB3\xCE\xB4\xCE\xB5\xCE\xB6\xCE\xB7\xCE\xB8\xCE\xB9",
"\t", "\t\t\t\t\t", "a\tstring\twith\ttabs",
"\n", "\n\n\n\n\n", "a\nstring\nwith\nnewlines",
"&", "&&&&&&&", "a&string&with&newlines",
"\t\n&", "a\t\n&string\t\n&with\t\n&many\t\n&chars"
};
- int flagsToTest[] = { 0, wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS, wxELLIPSIZE_FLAGS_EXPAND_TABS,
- wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS|wxELLIPSIZE_FLAGS_EXPAND_TABS };
- wxEllipsizeMode modesToTest[] = { wxELLIPSIZE_START, wxELLIPSIZE_MIDDLE, wxELLIPSIZE_END };
- int widthsToTest[] = { 0, 1, 2, 3, 10, 20, 100 };
-
- for (unsigned int s=0; s<WXSIZEOF(stringsToTest); s++)
- for (unsigned int f=0; f<WXSIZEOF(flagsToTest); f++)
- for (unsigned int m=0; m<WXSIZEOF(modesToTest); m++)
- for (unsigned int w=0; w<WXSIZEOF(widthsToTest); w++)
+
+ static const int flagsToTest[] =
+ {
+ 0,
+ wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS,
+ wxELLIPSIZE_FLAGS_EXPAND_TABS,
+ wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS | wxELLIPSIZE_FLAGS_EXPAND_TABS
+ };
+
+ static const wxEllipsizeMode modesToTest[] =
+ {
+ wxELLIPSIZE_START,
+ wxELLIPSIZE_MIDDLE,
+ wxELLIPSIZE_END
+ };
+
+ int widthsToTest[] = { 50, 100, 150 };
+
+ for ( unsigned int s = 0; s < WXSIZEOF(stringsToTest); s++ )
+ {
+ const wxString str = wxString::FromUTF8(stringsToTest[s]);
+
+ for ( unsigned int f = 0; f < WXSIZEOF(flagsToTest); f++ )
+ {
+ for ( unsigned int m = 0; m < WXSIZEOF(modesToTest); m++ )
+ {
+ for ( unsigned int w = 0; w < WXSIZEOF(widthsToTest); w++ )
{
- wxString ret = wxControlBase::Ellipsize(stringsToTest[s], dc, modesToTest[m],
- widthsToTest[w], flagsToTest[f]);
+ wxString ret = wxControl::Ellipsize
+ (
+ str,
+ dc,
+ modesToTest[m],
+ widthsToTest[w],
+ flagsToTest[f]
+ );
- CPPUNIT_ASSERT_MESSAGE((std::string)("invalid ellipsization for: " + stringsToTest[s]),
- dc.GetMultiLineTextExtent(ret).GetWidth() <= widthsToTest[w]);
+ WX_ASSERT_MESSAGE
+ (
+ (
+ "invalid ellipsization for \"%s\" (%dpx, should be <=%dpx)",
+ str,
+ dc.GetMultiLineTextExtent(ret).GetWidth(),
+ widthsToTest[w]
+ ),
+ dc.GetMultiLineTextExtent(ret).GetWidth() <= widthsToTest[w]
+ );
}
+ }
+ }
+ }
+}
+
+
+void EllipsizationTestCase::EnoughSpace()
+{
+ // No ellipsization should occur if there's plenty of space.
+
+ wxMemoryDC dc;
+
+ CPPUNIT_ASSERT_EQUAL("some label",
+ wxControl::Ellipsize("some label", dc, wxELLIPSIZE_START, 200));
+ CPPUNIT_ASSERT_EQUAL("some label",
+ wxControl::Ellipsize("some label", dc, wxELLIPSIZE_MIDDLE, 200));
+ CPPUNIT_ASSERT_EQUAL("some label",
+ wxControl::Ellipsize("some label", dc, wxELLIPSIZE_END, 200));
+}
+
+
+void EllipsizationTestCase::VeryLittleSpace()
+{
+ // If there's not enough space, the shortened label should still contain "..." and one character
+
+ wxMemoryDC dc;
+
+ CPPUNIT_ASSERT_EQUAL("...l",
+ wxControl::Ellipsize("some label", dc, wxELLIPSIZE_START, 5));
+ CPPUNIT_ASSERT_EQUAL("s...",
+ wxControl::Ellipsize("some label", dc, wxELLIPSIZE_MIDDLE, 5));
+ CPPUNIT_ASSERT_EQUAL("s...",
+ wxControl::Ellipsize("some label1", dc, wxELLIPSIZE_MIDDLE, 5));
+ CPPUNIT_ASSERT_EQUAL("s...",
+ wxControl::Ellipsize("some label", dc, wxELLIPSIZE_END, 5));
+}
+
+
+void EllipsizationTestCase::HasThreeDots()
+{
+ wxMemoryDC dc;
+
+ CPPUNIT_ASSERT( wxControl::Ellipsize("some longer text", dc, wxELLIPSIZE_START, 80).StartsWith("...") );
+ CPPUNIT_ASSERT( !wxControl::Ellipsize("some longer text", dc, wxELLIPSIZE_START, 80).EndsWith("...") );
+
+ CPPUNIT_ASSERT( wxControl::Ellipsize("some longer text", dc, wxELLIPSIZE_END, 80).EndsWith("...") );
+
+ CPPUNIT_ASSERT( wxControl::Ellipsize("some longer text", dc, wxELLIPSIZE_MIDDLE, 80).Contains("...") );
+ CPPUNIT_ASSERT( !wxControl::Ellipsize("some longer text", dc, wxELLIPSIZE_MIDDLE, 80).StartsWith("...") );
+ CPPUNIT_ASSERT( !wxControl::Ellipsize("some longer text", dc, wxELLIPSIZE_MIDDLE, 80).EndsWith("...") );
}