No real changes, just don't use a text fixture which does nothing, this is useless and confusing.
		
			
				
	
	
		
			160 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        tests/graphics/ellipsization.cpp
 | |
| // Purpose:     wxControlBase::*Ellipsize* unit test
 | |
| // Author:      Francesco Montorsi
 | |
| // Created:     2010-03-10
 | |
| // Copyright:   (c) 2010 Francesco Montorsi
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // headers
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| #include "testprec.h"
 | |
| 
 | |
| #ifdef __BORLANDC__
 | |
|     #pragma hdrstop
 | |
| #endif
 | |
| 
 | |
| #include "wx/control.h"
 | |
| #include "wx/dcmemory.h"
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // test class
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| TEST_CASE("Ellipsization::NormalCase", "[ellipsization]")
 | |
| {
 | |
|     wxMemoryDC dc;
 | |
| 
 | |
|     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"
 | |
|     };
 | |
| 
 | |
|     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
 | |
|     };
 | |
| 
 | |
|     const int charWidth = dc.GetCharWidth();
 | |
|     int widthsToTest[] = { 6*charWidth, 10*charWidth, 15*charWidth };
 | |
| 
 | |
|     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 = wxControl::Ellipsize
 | |
|                                    (
 | |
|                                     str,
 | |
|                                     dc,
 | |
|                                     modesToTest[m],
 | |
|                                     widthsToTest[w],
 | |
|                                     flagsToTest[f]
 | |
|                                    );
 | |
| 
 | |
|                     // Note that we must measure the width of the text that
 | |
|                     // will be rendered, and when mnemonics are used, this
 | |
|                     // means we have to remove them first.
 | |
|                     const wxString
 | |
|                         displayed = flagsToTest[f] & wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS
 | |
|                                         ? wxControl::RemoveMnemonics(ret)
 | |
|                                         : ret;
 | |
|                     const int
 | |
|                         width = dc.GetMultiLineTextExtent(displayed).GetWidth();
 | |
| 
 | |
|                     WX_ASSERT_MESSAGE
 | |
|                     (
 | |
|                      (
 | |
|                         "Test #(%u,%u.%u): %s\n\"%s\" -> \"%s\"; width=%dpx > %dpx",
 | |
|                         s, f, m,
 | |
|                         dc.GetFont().GetNativeFontInfoUserDesc(),
 | |
|                         str,
 | |
|                         ret,
 | |
|                         width,
 | |
|                         widthsToTest[w]
 | |
|                      ),
 | |
|                      width <= widthsToTest[w]
 | |
|                     );
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| TEST_CASE("Ellipsization::EnoughSpace", "[ellipsization]")
 | |
| {
 | |
|     // No ellipsization should occur if there's plenty of space.
 | |
| 
 | |
|     wxMemoryDC dc;
 | |
| 
 | |
|     wxString testString("some label");
 | |
|     const int width = dc.GetTextExtent(testString).GetWidth() + 50;
 | |
| 
 | |
|     CHECK( wxControl::Ellipsize(testString, dc, wxELLIPSIZE_START, width) == testString );
 | |
|     CHECK( wxControl::Ellipsize(testString, dc, wxELLIPSIZE_MIDDLE, width) == testString );
 | |
|     CHECK( wxControl::Ellipsize(testString, dc, wxELLIPSIZE_END, width) == testString );
 | |
| }
 | |
| 
 | |
| 
 | |
| TEST_CASE("Ellipsization::VeryLittleSpace", "[ellipsization]")
 | |
| {
 | |
|     // If there's not enough space, the shortened label should still contain "..." and one character
 | |
| 
 | |
|     wxMemoryDC dc;
 | |
| 
 | |
|     const int width = dc.GetTextExtent("s...").GetWidth();
 | |
| 
 | |
|     CHECK( wxControl::Ellipsize("some label", dc, wxELLIPSIZE_START, width) == "...l" );
 | |
|     CHECK( wxControl::Ellipsize("some label", dc, wxELLIPSIZE_MIDDLE, width) == "s..." );
 | |
|     CHECK( wxControl::Ellipsize("some label1", dc, wxELLIPSIZE_MIDDLE, width) == "s..." );
 | |
|     CHECK( wxControl::Ellipsize("some label", dc, wxELLIPSIZE_END, width) == "s..." );
 | |
| }
 | |
| 
 | |
| 
 | |
| TEST_CASE("Ellipsization::HasThreeDots", "[ellipsization]")
 | |
| {
 | |
|     wxMemoryDC dc;
 | |
| 
 | |
|     wxString testString("some longer text");
 | |
|     const int width = dc.GetTextExtent(testString).GetWidth() - 5;
 | |
| 
 | |
|     CHECK( wxControl::Ellipsize(testString, dc, wxELLIPSIZE_START, width).StartsWith("...") );
 | |
|     CHECK( !wxControl::Ellipsize(testString, dc, wxELLIPSIZE_START, width).EndsWith("...") );
 | |
| 
 | |
|     CHECK( wxControl::Ellipsize(testString, dc, wxELLIPSIZE_END, width).EndsWith("...") );
 | |
| 
 | |
|     CHECK( wxControl::Ellipsize(testString, dc, wxELLIPSIZE_MIDDLE, width).Contains("...") );
 | |
|     CHECK( !wxControl::Ellipsize(testString, dc, wxELLIPSIZE_MIDDLE, width).StartsWith("...") );
 | |
|     CHECK( !wxControl::Ellipsize(testString, dc, wxELLIPSIZE_MIDDLE, width).EndsWith("...") );
 | |
| }
 |