1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
///////////////////////////////////////////////////////////////////////////////
// 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"
#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("...") );
}
|