| 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() );
 
- }
 
 
  |