X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bb996f289574defb0ae4339ae8e46ff3cf6fa54c..c2f8c2b245959f612f0ebac31ab8d80bef6ea9e2:/tests/graphics/measuring.cpp diff --git a/tests/graphics/measuring.cpp b/tests/graphics/measuring.cpp index a45d45032d..36b100be0e 100644 --- a/tests/graphics/measuring.cpp +++ b/tests/graphics/measuring.cpp @@ -3,7 +3,6 @@ // Purpose: Tests for wxGraphicsRenderer::CreateMeasuringContext // Author: Kevin Ollivier, Vadim Zeitlin (non wxGC parts) // Created: 2008-02-12 -// RCS-ID: $Id$ // Copyright: (c) 2008 Kevin Ollivier // (c) 2012 Vadim Zeitlin /////////////////////////////////////////////////////////////////////////////// @@ -31,6 +30,8 @@ #endif #include "wx/dcclient.h" +#include "wx/dcps.h" +#include "wx/metafile.h" // ---------------------------------------------------------------------------- // test class @@ -44,6 +45,7 @@ public: private: CPPUNIT_TEST_SUITE( MeasuringTextTestCase ); CPPUNIT_TEST( DCGetTextExtent ); + CPPUNIT_TEST( LeadingAndDescent ); CPPUNIT_TEST( WindowGetTextExtent ); CPPUNIT_TEST( GetPartialTextExtent ); #ifdef TEST_GC @@ -51,10 +53,8 @@ private: #endif // TEST_GC CPPUNIT_TEST_SUITE_END(); - template - void DoTestGetTextExtent(const T& obj); - void DCGetTextExtent(); + void LeadingAndDescent(); void WindowGetTextExtent(); void GetPartialTextExtent(); @@ -73,28 +73,36 @@ CPPUNIT_TEST_SUITE_REGISTRATION( MeasuringTextTestCase ); CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( MeasuringTextTestCase, "MeasuringTextTestCase" ); // ---------------------------------------------------------------------------- -// tests themselves +// helper for XXXTextExtent() methods // ---------------------------------------------------------------------------- template -void MeasuringTextTestCase::DoTestGetTextExtent(const T& obj) +struct GetTextExtentTester { - // Test that getting the height only doesn't crash. - int y; - obj.GetTextExtent("H", NULL, &y); - - CPPUNIT_ASSERT( y > 1 ); + // Constructor runs a couple of simple tests for GetTextExtent(). + GetTextExtentTester(const T& obj) + { + // Test that getting the height only doesn't crash. + int y; + obj.GetTextExtent("H", NULL, &y); + + CPPUNIT_ASSERT( y > 1 ); + + wxSize size = obj.GetTextExtent("Hello"); + CPPUNIT_ASSERT( size.x > 1 ); + CPPUNIT_ASSERT_EQUAL( y, size.y ); + } +}; - wxSize size = obj.GetTextExtent("Hello"); - CPPUNIT_ASSERT( size.x > 1 ); - CPPUNIT_ASSERT_EQUAL( y, size.y ); -} +// ---------------------------------------------------------------------------- +// tests themselves +// ---------------------------------------------------------------------------- void MeasuringTextTestCase::DCGetTextExtent() { wxClientDC dc(wxTheApp->GetTopWindow()); - DoTestGetTextExtent(dc); + GetTextExtentTester testDC(dc); int w; dc.GetMultiLineTextExtent("Good\nbye", &w, NULL); @@ -102,13 +110,53 @@ void MeasuringTextTestCase::DCGetTextExtent() CPPUNIT_ASSERT_EQUAL( sz.x, w ); CPPUNIT_ASSERT( dc.GetMultiLineTextExtent("Good\nbye").y >= 2*sz.y ); + + // Test the functions with some other DC kinds also. +#if wxUSE_PRINTING_ARCHITECTURE && wxUSE_POSTSCRIPT + wxPostScriptDC psdc; + // wxPostScriptDC doesn't have any font set by default but its + // GetTextExtent() requires one to be set. This is probably a bug and we + // should set the default font in it implicitly but for now just work + // around it. + psdc.SetFont(*wxNORMAL_FONT); + GetTextExtentTester testPS(psdc); +#endif + +#if wxUSE_ENH_METAFILE + wxEnhMetaFileDC metadc; + GetTextExtentTester testMF(metadc); +#endif +} + +void MeasuringTextTestCase::LeadingAndDescent() +{ + wxClientDC dc(wxTheApp->GetTopWindow()); + + // Retrieving just the descent should work. + int descent = -17; + dc.GetTextExtent("foo", NULL, NULL, &descent); + CPPUNIT_ASSERT( descent != -17 ); + + // Same for external leading. + int leading = -289; + dc.GetTextExtent("foo", NULL, NULL, NULL, &leading); + CPPUNIT_ASSERT( leading != -289 ); + + // And both should also work for the empty string as they retrieve the + // values valid for the entire font and not just this string. + int descent2, + leading2; + dc.GetTextExtent("", NULL, NULL, &descent2, &leading2); + + CPPUNIT_ASSERT_EQUAL( descent, descent2 ); + CPPUNIT_ASSERT_EQUAL( leading, leading2 ); } void MeasuringTextTestCase::WindowGetTextExtent() { wxWindow* const win = wxTheApp->GetTopWindow(); - DoTestGetTextExtent(*win); + GetTextExtentTester testWin(*win); } void MeasuringTextTestCase::GetPartialTextExtent()