| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- ///////////////////////////////////////////////////////////////////////////////
- // Name: tests/geometry/region.cpp
- // Purpose: wxRegion unit test
- // Author: Vadim Zeitlin
- // Created: 2011-10-12
- // Copyright: (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
- ///////////////////////////////////////////////////////////////////////////////
- // ----------------------------------------------------------------------------
- // headers
- // ----------------------------------------------------------------------------
- #include "testprec.h"
- #ifdef __BORLANDC__
- #pragma hdrstop
- #endif
- #ifndef WX_PRECOMP
- #include "wx/region.h"
- #endif // WX_PRECOMP
- #include "wx/iosfwrap.h"
- // ----------------------------------------------------------------------------
- // helper functions
- // ----------------------------------------------------------------------------
- namespace
- {
- // This function could be easily added to wxRegionIterator itself, where it
- // could be implemented far more efficiently as all major platforms store the
- // number of rectangles anyhow, but as we only use it for debugging purposes,
- // just keep it here for now.
- unsigned GetRectsCount(const wxRegion& rgn)
- {
- unsigned count = 0;
- for ( wxRegionIterator iter(rgn); iter.HaveRects(); ++iter )
- count++;
- return count;
- }
- } // anonymous namespace
- // this operator is needed to use CPPUNIT_ASSERT_EQUAL with wxRegions
- std::ostream& operator<<(std::ostream& os, const wxRegion& rgn)
- {
- wxRect r = rgn.GetBox();
- os << "# rects = " << GetRectsCount(rgn)
- << "; bounding box {"
- << r.x << ", " << r.y << ", " << r.width << ", " << r.height
- << "}";
- return os;
- }
- // ----------------------------------------------------------------------------
- // test class
- // ----------------------------------------------------------------------------
- class RegionTestCase : public CppUnit::TestCase
- {
- public:
- RegionTestCase() { }
- private:
- CPPUNIT_TEST_SUITE( RegionTestCase );
- CPPUNIT_TEST( Validity );
- CPPUNIT_TEST( Intersect );
- CPPUNIT_TEST_SUITE_END();
- void Validity();
- void Intersect();
- wxDECLARE_NO_COPY_CLASS(RegionTestCase);
- };
- // register in the unnamed registry so that these tests are run by default
- CPPUNIT_TEST_SUITE_REGISTRATION( RegionTestCase );
- // also include in its own registry so that these tests can be run alone
- CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( RegionTestCase, "RegionTestCase" );
- void RegionTestCase::Validity()
- {
- wxRegion r;
- CPPUNIT_ASSERT_MESSAGE
- (
- "Default constructed region must be invalid",
- !r.IsOk()
- );
- CPPUNIT_ASSERT_MESSAGE
- (
- "Invalid region should be empty",
- r.IsEmpty()
- );
- // Offsetting an invalid region doesn't make sense.
- WX_ASSERT_FAILS_WITH_ASSERT( r.Offset(1, 1) );
- CPPUNIT_ASSERT_MESSAGE
- (
- "Combining with a valid region should create a valid region",
- r.Union(0, 0, 10, 10)
- );
- CPPUNIT_ASSERT_EQUAL_MESSAGE
- (
- "Union() with invalid region should give the same region",
- wxRegion(0, 0, 10, 10),
- r
- );
- }
- void RegionTestCase::Intersect()
- {
- const wxPoint points1[] = {
- wxPoint(310, 392),
- wxPoint(270, 392),
- wxPoint(270, 421),
- wxPoint(310, 421)
- };
- wxRegion region1(WXSIZEOF(points1), points1);
- const wxPoint points2[] = {
- wxPoint(54, 104),
- wxPoint(85, 82),
- wxPoint(68, 58),
- wxPoint(37, 80)
- };
- wxRegion region2(4,points2);
- CPPUNIT_ASSERT( region1.Intersect(region2) );
- CPPUNIT_ASSERT( region1.IsEmpty() );
- }
|