]>
git.saurik.com Git - wxWidgets.git/blob - tests/graphics/measuring.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: tests/graphics/measuring.cpp
3 // Purpose: Tests for wxGraphicsRenderer::CreateMeasuringContext
4 // Author: Kevin Ollivier, Vadim Zeitlin (non wxGC parts)
7 // Copyright: (c) 2008 Kevin Ollivier <kevino@theolliviers.com>
8 // (c) 2012 Vadim Zeitlin <vadim@wxwidgets.org>
9 ///////////////////////////////////////////////////////////////////////////////
11 // ----------------------------------------------------------------------------
13 // ----------------------------------------------------------------------------
24 #include "wx/window.h"
27 // wxCairoRenderer::CreateMeasuringContext() is not implement for wxX11
28 #if wxUSE_GRAPHICS_CONTEXT && !defined(__WXX11__)
29 #include "wx/graphics.h"
33 #include "wx/dcclient.h"
35 #include "wx/metafile.h"
37 // ----------------------------------------------------------------------------
39 // ----------------------------------------------------------------------------
41 class MeasuringTextTestCase
: public CppUnit::TestCase
44 MeasuringTextTestCase() { }
47 CPPUNIT_TEST_SUITE( MeasuringTextTestCase
);
48 CPPUNIT_TEST( DCGetTextExtent
);
49 CPPUNIT_TEST( WindowGetTextExtent
);
50 CPPUNIT_TEST( GetPartialTextExtent
);
52 CPPUNIT_TEST( GraphicsGetTextExtent
);
54 CPPUNIT_TEST_SUITE_END();
57 void DoTestGetTextExtent(const T
& obj
);
59 void DCGetTextExtent();
60 void WindowGetTextExtent();
62 void GetPartialTextExtent();
65 void GraphicsGetTextExtent();
68 DECLARE_NO_COPY_CLASS(MeasuringTextTestCase
)
71 // register in the unnamed registry so that these tests are run by default
72 CPPUNIT_TEST_SUITE_REGISTRATION( MeasuringTextTestCase
);
74 // also include in its own registry so that these tests can be run alone
75 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( MeasuringTextTestCase
, "MeasuringTextTestCase" );
77 // ----------------------------------------------------------------------------
79 // ----------------------------------------------------------------------------
82 void MeasuringTextTestCase::DoTestGetTextExtent(const T
& obj
)
84 // Test that getting the height only doesn't crash.
86 obj
.GetTextExtent("H", NULL
, &y
);
88 CPPUNIT_ASSERT( y
> 1 );
90 wxSize size
= obj
.GetTextExtent("Hello");
91 CPPUNIT_ASSERT( size
.x
> 1 );
92 CPPUNIT_ASSERT_EQUAL( y
, size
.y
);
95 void MeasuringTextTestCase::DCGetTextExtent()
97 wxClientDC
dc(wxTheApp
->GetTopWindow());
99 DoTestGetTextExtent(dc
);
102 dc
.GetMultiLineTextExtent("Good\nbye", &w
, NULL
);
103 const wxSize sz
= dc
.GetTextExtent("Good");
104 CPPUNIT_ASSERT_EQUAL( sz
.x
, w
);
106 CPPUNIT_ASSERT( dc
.GetMultiLineTextExtent("Good\nbye").y
>= 2*sz
.y
);
108 // Test the functions with some other DC kinds also.
109 #if wxUSE_PRINTING_ARCHITECTURE && wxUSE_POSTSCRIPT
111 // wxPostScriptDC doesn't have any font set by default but its
112 // GetTextExtent() requires one to be set. This is probably a bug and we
113 // should set the default font in it implicitly but for now just work
115 psdc
.SetFont(*wxNORMAL_FONT
);
116 DoTestGetTextExtent(psdc
);
119 #if wxUSE_ENH_METAFILE
120 wxEnhMetaFileDC metadc
;
121 DoTestGetTextExtent(metadc
);
125 void MeasuringTextTestCase::WindowGetTextExtent()
127 wxWindow
* const win
= wxTheApp
->GetTopWindow();
129 DoTestGetTextExtent(*win
);
132 void MeasuringTextTestCase::GetPartialTextExtent()
134 wxClientDC
dc(wxTheApp
->GetTopWindow());
137 CPPUNIT_ASSERT( dc
.GetPartialTextExtents("Hello", widths
) );
138 CPPUNIT_ASSERT_EQUAL( 5, widths
.size() );
139 CPPUNIT_ASSERT_EQUAL( widths
[0], dc
.GetTextExtent("H").x
);
140 CPPUNIT_ASSERT_EQUAL( widths
[4], dc
.GetTextExtent("Hello").x
);
145 void MeasuringTextTestCase::GraphicsGetTextExtent()
147 wxGraphicsRenderer
* renderer
= wxGraphicsRenderer::GetDefaultRenderer();
148 CPPUNIT_ASSERT(renderer
);
149 wxGraphicsContext
* context
= renderer
->CreateMeasuringContext();
150 CPPUNIT_ASSERT(context
);
151 wxFont
font(12, wxFONTFAMILY_DEFAULT
, wxFONTSTYLE_NORMAL
, wxFONTWEIGHT_NORMAL
);
152 CPPUNIT_ASSERT(font
.IsOk());
153 context
->SetFont(font
, *wxBLACK
);
154 double width
, height
, descent
, externalLeading
= 0.0;
155 context
->GetTextExtent("x", &width
, &height
, &descent
, &externalLeading
);
157 // TODO: Determine a way to make these tests more robust.
158 CPPUNIT_ASSERT(width
> 0.0);
159 CPPUNIT_ASSERT(height
> 0.0);