root/src/tests/kits/interface/bregion/RegionOffsetBy.cpp
/*
        $Id: RegionOffsetBy.cpp 4235 2003-08-06 06:46:06Z jackburton $
        
        This file implements the OffsetBy test for the Haiku BRegion
        code.
        
        */


#include "RegionOffsetBy.h"
#include <Region.h>
#include <Rect.h>

#include <assert.h>


/*
 *  Method:  RegionOffsetBy::RegionOffsetBy()
 *   Descr:  This is the constructor for this class.
 */             

RegionOffsetBy::RegionOffsetBy(std::string name) :
        RegionTestcase(name)
{
        }


/*
 *  Method:  RegionOffsetBy::~RegionOffsetBy()
 *   Descr:  This is the destructor for this class.
 */
 
RegionOffsetBy::~RegionOffsetBy()
{
        }


/*
 *  Method:  RegionOffsetBy::testOneRegion()
 *   Descr:  This member function performs a test on a single passed in
 *           region.
 */     

void RegionOffsetBy::testOneRegion(BRegion *testRegion)
{
        BRegion tempRegion1(*testRegion);
        CheckFrame(&tempRegion1);
        
        tempRegion1.OffsetBy(10.0, 20.0);
        if (RegionIsEmpty(testRegion)) {
                assert(RegionsAreEqual(&tempRegion1, testRegion));
        } else {
                assert(!RegionsAreEqual(&tempRegion1, testRegion));
        }
        
        BRegion tempRegion2;
        CheckFrame(&tempRegion2);
        assert(RegionIsEmpty(&tempRegion2));
        
        for(int i = testRegion->CountRects() - 1; i >= 0; i--) {
                BRect tempRect = testRegion->RectAt(i);
                tempRect.OffsetBy(10.0, 20.0);
                tempRegion2.Include(tempRect);
                CheckFrame(&tempRegion2);
                assert(!RegionIsEmpty(&tempRegion2));
        }
        assert(RegionsAreEqual(&tempRegion1, &tempRegion2));
        if (RegionIsEmpty(testRegion)) {
                assert(RegionsAreEqual(&tempRegion2, testRegion));
        } else {
                assert(!RegionsAreEqual(&tempRegion2, testRegion));
        }
        
        tempRegion1.OffsetBy(-10.0, -20.0);
        CheckFrame(&tempRegion1);
        if (RegionIsEmpty(testRegion)) {
                assert(RegionsAreEqual(&tempRegion1, testRegion));
                assert(RegionsAreEqual(&tempRegion1, &tempRegion2));
        } else {
                assert(RegionsAreEqual(&tempRegion1, testRegion));
                assert(!RegionsAreEqual(&tempRegion1, &tempRegion2));
        }
        
        tempRegion2.OffsetBy(-10.0, -20.0);
        CheckFrame(&tempRegion2);
        assert(RegionsAreEqual(&tempRegion1, testRegion));
        assert(RegionsAreEqual(&tempRegion2, testRegion));
        assert(RegionsAreEqual(&tempRegion1, &tempRegion2));
}


/*
 *  Method:  RegionOffsetBy::testTwoRegions()
 *   Descr:  This member function performs a test on two regions passed in.
 */     

void RegionOffsetBy::testTwoRegions(BRegion *testRegionA, BRegion *testRegionB)
{

}
        

/*
 *  Method:  RegionOffsetBy::suite()
 *   Descr:  This static member function returns a test caller for performing 
 *           all combinations of "RegionOffsetBy".
 */

 Test *RegionOffsetBy::suite(void)
{       
        typedef CppUnit::TestCaller<RegionOffsetBy>
                RegionOffsetByCaller;
                
        return(new RegionOffsetByCaller("BRegion::OffsetBy Test", &RegionOffsetBy::PerformTest));
        }