diff --git a/tests/Makefile.in b/tests/Makefile.in index c389570dda..a931266acb 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -182,6 +182,7 @@ TEST_GUI_OBJECTS = \ test_gui_measuring.o \ test_gui_affinematrix.o \ test_gui_boundingbox.o \ + test_gui_clippingbox.o \ test_gui_config.o \ test_gui_bitmapcomboboxtest.o \ test_gui_bitmaptogglebuttontest.o \ @@ -820,6 +821,9 @@ test_gui_affinematrix.o: $(srcdir)/graphics/affinematrix.cpp $(TEST_GUI_ODEP) test_gui_boundingbox.o: $(srcdir)/graphics/boundingbox.cpp $(TEST_GUI_ODEP) $(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/graphics/boundingbox.cpp +test_gui_clippingbox.o: $(srcdir)/graphics/clippingbox.cpp $(TEST_GUI_ODEP) + $(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/graphics/clippingbox.cpp + test_gui_config.o: $(srcdir)/config/config.cpp $(TEST_GUI_ODEP) $(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/config/config.cpp diff --git a/tests/graphics/clippingbox.cpp b/tests/graphics/clippingbox.cpp new file mode 100644 index 0000000000..0e666e6b65 --- /dev/null +++ b/tests/graphics/clippingbox.cpp @@ -0,0 +1,335 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: tests/graphics/clippingbox.cpp +// Purpose: clipping box unit tests +// Author: Artur Wieczorek +// Created: 2016-06-29 +// Copyright: (c) 2016 wxWidgets development team +/////////////////////////////////////////////////////////////////////////////// + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +#include "testprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#include "wx/bitmap.h" +#include "wx/dcmemory.h" +#include "wx/dcgraph.h" + + +// ---------------------------------------------------------------------------- +// test class +// ---------------------------------------------------------------------------- + +class ClippingBoxTestCase : public CppUnit::TestCase +{ +public: + ClippingBoxTestCase() + { + m_bmp.Create(100, 100); + m_dc.SelectObject(m_bmp); + m_gcdc = new wxGCDC(m_dc); + } + + ~ClippingBoxTestCase() + { + delete m_gcdc; + m_dc.SelectObject(wxNullBitmap); + m_bmp = wxNullBitmap; + } + + virtual void setUp() + { + m_dc.DestroyClippingRegion(); + m_gcdc->DestroyClippingRegion(); + } + +private: + CPPUNIT_TEST_SUITE( ClippingBoxTestCase ); + CPPUNIT_TEST( InitialStateDC ); + CPPUNIT_TEST( OneRegionDC ); + CPPUNIT_TEST( OneLargeRegionDC ); + CPPUNIT_TEST( OneRegionNegDimDC ); + CPPUNIT_TEST( OneRegionAndResetDC ); + CPPUNIT_TEST( OneRegionAndEmptyDC ); + CPPUNIT_TEST( TwoRegionsOverlappingDC ); + CPPUNIT_TEST( TwoRegionsOverlappingNegDimDC ); + CPPUNIT_TEST( TwoRegionsNonOverlappingDC ); + CPPUNIT_TEST( TwoRegionsNonOverlappingNegDimDC ); + + CPPUNIT_TEST( InitialStateGCDC ); + CPPUNIT_TEST( OneRegionGCDC ); + CPPUNIT_TEST( OneLargeRegionGCDC ); + CPPUNIT_TEST( OneRegionNegDimGCDC ); + CPPUNIT_TEST( OneRegionAndResetGCDC ); + CPPUNIT_TEST( OneRegionAndEmptyGCDC ); + CPPUNIT_TEST( TwoRegionsOverlappingGCDC ); + CPPUNIT_TEST( TwoRegionsOverlappingNegDimGCDC ); + CPPUNIT_TEST( TwoRegionsNonOverlappingGCDC ); + CPPUNIT_TEST( TwoRegionsNonOverlappingNegDimGCDC ); + CPPUNIT_TEST_SUITE_END(); + + void CheckBox(const wxDC& dc, int x, int y, int width, int height); + + void InitialStateDC(); + void OneRegionDC(); + void OneLargeRegionDC(); + void OneRegionNegDimDC(); + void OneRegionAndResetDC(); + void OneRegionAndEmptyDC(); + void TwoRegionsOverlappingDC(); + void TwoRegionsOverlappingNegDimDC(); + void TwoRegionsNonOverlappingDC(); + void TwoRegionsNonOverlappingNegDimDC(); + + void InitialStateGCDC(); + void OneRegionGCDC(); + void OneLargeRegionGCDC(); + void OneRegionNegDimGCDC(); + void OneRegionAndResetGCDC(); + void OneRegionAndEmptyGCDC(); + void TwoRegionsOverlappingGCDC(); + void TwoRegionsOverlappingNegDimGCDC(); + void TwoRegionsNonOverlappingGCDC(); + void TwoRegionsNonOverlappingNegDimGCDC(); + + void InitialState(wxDC& dc); + void OneRegion(wxDC& dc); + void OneLargeRegion(wxDC& dc); + void OneRegionNegDim(wxDC& dc); + void OneRegionAndReset(wxDC& dc); + void OneRegionAndEmpty(wxDC& dc); + void TwoRegionsOverlapping(wxDC& dc); + void TwoRegionsOverlappingNegDim(wxDC& dc); + void TwoRegionsNonOverlapping(wxDC& dc); + void TwoRegionsNonOverlappingNegDim(wxDC& dc); + + wxBitmap m_bmp; + wxMemoryDC m_dc; + wxGCDC *m_gcdc; + + wxDECLARE_NO_COPY_CLASS(ClippingBoxTestCase); +}; + +// register in the unnamed registry so that these tests are run by default +CPPUNIT_TEST_SUITE_REGISTRATION( ClippingBoxTestCase ); + +// also include in it's own registry so that these tests can be run alone +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( ClippingBoxTestCase, "ClippingBoxTestCase" ); + +void ClippingBoxTestCase::CheckBox(const wxDC& dc, int x, int y, int width, int height) +{ + int clipX, clipY, clipW, clipH; + dc.GetClippingBox(&clipX, &clipY, &clipW, &clipH); + + wxString msgPos; + if ( x != clipX || y != clipY ) + { + msgPos = + wxString::Format(wxS("Invalid position: Actual: (%i, %i) Expected: (%i, %i)"), + clipX, clipY, x, y); + } + wxString msgDim; + if ( width != clipW || height != clipH ) + { + msgDim = + wxString::Format(wxS("Invalid dimension: Actual: %i x %i Expected: %i x %i"), + clipW, clipH, width, height); + } + + wxString msg; + if ( !msgPos.empty() ) + { + msg = msgPos; + if ( !msgDim.empty() ) + { + msg += wxS("\n- "); + msg += msgDim; + } + } + else if ( !msgDim.empty() ) + { + msg = msgDim; + } + + if( !msg.empty() ) + { + wxCharBuffer buffer = msg.ToUTF8(); + CPPUNIT_FAIL( buffer.data() ); + } +} + +// wxDC tests + +void ClippingBoxTestCase::InitialStateDC() +{ + InitialState(m_dc); +} + +void ClippingBoxTestCase::OneRegionDC() +{ + OneRegion(m_dc); +} + +void ClippingBoxTestCase::OneLargeRegionDC() +{ + OneLargeRegion(m_dc); +} + +void ClippingBoxTestCase::OneRegionNegDimDC() +{ + OneRegionNegDim(m_dc); +} + +void ClippingBoxTestCase::OneRegionAndResetDC() +{ + OneRegionAndReset(m_dc); +} + +void ClippingBoxTestCase::OneRegionAndEmptyDC() +{ + OneRegionAndEmpty(m_dc); +} + +void ClippingBoxTestCase::TwoRegionsOverlappingDC() +{ + TwoRegionsOverlapping(m_dc); +} + +void ClippingBoxTestCase::TwoRegionsOverlappingNegDimDC() +{ + TwoRegionsOverlappingNegDim(m_dc); +} + +void ClippingBoxTestCase::TwoRegionsNonOverlappingDC() +{ + TwoRegionsNonOverlapping(m_dc); +} + +void ClippingBoxTestCase::TwoRegionsNonOverlappingNegDimDC() +{ + TwoRegionsNonOverlappingNegDim(m_dc); +} + +// wxGCDC tests + +void ClippingBoxTestCase::InitialStateGCDC() +{ + InitialState(*m_gcdc); +} + +void ClippingBoxTestCase::OneRegionGCDC() +{ + OneRegion(*m_gcdc); +} + +void ClippingBoxTestCase::OneLargeRegionGCDC() +{ + OneLargeRegion(*m_gcdc); +} + +void ClippingBoxTestCase::OneRegionNegDimGCDC() +{ + OneRegionNegDim(*m_gcdc); +} + +void ClippingBoxTestCase::OneRegionAndResetGCDC() +{ + OneRegionAndReset(*m_gcdc); +} + +void ClippingBoxTestCase::OneRegionAndEmptyGCDC() +{ + OneRegionAndEmpty(*m_gcdc); +} + +void ClippingBoxTestCase::TwoRegionsOverlappingGCDC() +{ + TwoRegionsOverlapping(*m_gcdc); +} + +void ClippingBoxTestCase::TwoRegionsOverlappingNegDimGCDC() +{ + TwoRegionsOverlappingNegDim(*m_gcdc); +} + +void ClippingBoxTestCase::TwoRegionsNonOverlappingGCDC() +{ + TwoRegionsNonOverlapping(*m_gcdc); +} + +void ClippingBoxTestCase::TwoRegionsNonOverlappingNegDimGCDC() +{ + TwoRegionsNonOverlappingNegDim(*m_gcdc); +} + +// Actual tests + +void ClippingBoxTestCase::InitialState(wxDC& dc) +{ + CheckBox(dc, 0, 0, 0, 0); +} + +void ClippingBoxTestCase::OneRegion(wxDC& dc) +{ + dc.SetClippingRegion(10, 20, 80, 75); + CheckBox(dc, 10, 20, 80, 75); +} + +void ClippingBoxTestCase::OneLargeRegion(wxDC& dc) +{ + dc.SetClippingRegion(-10, -20, 130, 150); + CheckBox(dc, 0, 0, 100, 100); +} + +void ClippingBoxTestCase::OneRegionNegDim(wxDC& dc) +{ + dc.SetClippingRegion(10, 20, -80, -75); + CheckBox(dc, 0, 0, 11, 21); +} + +void ClippingBoxTestCase::OneRegionAndReset(wxDC& dc) +{ + dc.SetClippingRegion(10, 20, 80, 75); + dc.DestroyClippingRegion(); + CheckBox(dc, 0, 0, 0, 0); +} + +void ClippingBoxTestCase::OneRegionAndEmpty(wxDC& dc) +{ + dc.SetClippingRegion(10, 20, 80, 75); + dc.SetClippingRegion(0, 0, 0, 0); + CheckBox(dc, 0, 0, 0, 0); +} + +void ClippingBoxTestCase::TwoRegionsOverlapping(wxDC& dc) +{ + dc.SetClippingRegion(10, 20, 80, 75); + dc.SetClippingRegion(50, 60, 50, 40); + CheckBox(dc, 50, 60, 40, 35); +} + +void ClippingBoxTestCase::TwoRegionsOverlappingNegDim(wxDC& dc) +{ + dc.SetClippingRegion(90, 95, -80, -75); + dc.SetClippingRegion(50, 60, 50, 40); + CheckBox(dc, 50, 60, 41, 36); +} + +void ClippingBoxTestCase::TwoRegionsNonOverlapping(wxDC& dc) +{ + dc.SetClippingRegion(10, 20, 30, 30); + dc.SetClippingRegion(50, 60, 50, 40); + CheckBox(dc, 0, 0, 0, 0); +} + +void ClippingBoxTestCase::TwoRegionsNonOverlappingNegDim(wxDC& dc) +{ + dc.SetClippingRegion(10, 20, -80, -75); + dc.SetClippingRegion(50, 60, 50, 40); + CheckBox(dc, 0, 0, 0, 0); +} diff --git a/tests/makefile.bcc b/tests/makefile.bcc index 0c131e6393..de249aee29 100644 --- a/tests/makefile.bcc +++ b/tests/makefile.bcc @@ -166,6 +166,7 @@ TEST_GUI_OBJECTS = \ $(OBJS)\test_gui_measuring.obj \ $(OBJS)\test_gui_affinematrix.obj \ $(OBJS)\test_gui_boundingbox.obj \ + $(OBJS)\test_gui_clippingbox.obj \ $(OBJS)\test_gui_config.obj \ $(OBJS)\test_gui_bitmapcomboboxtest.obj \ $(OBJS)\test_gui_bitmaptogglebuttontest.obj \ @@ -856,6 +857,9 @@ $(OBJS)\test_gui_affinematrix.obj: .\graphics\affinematrix.cpp $(OBJS)\test_gui_boundingbox.obj: .\graphics\boundingbox.cpp $(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\graphics\boundingbox.cpp +$(OBJS)\test_gui_clippingbox.obj: .\graphics\clippingbox.cpp + $(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\graphics\clippingbox.cpp + $(OBJS)\test_gui_config.obj: .\config\config.cpp $(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\config\config.cpp diff --git a/tests/makefile.gcc b/tests/makefile.gcc index c390f2567d..b86bcc0062 100644 --- a/tests/makefile.gcc +++ b/tests/makefile.gcc @@ -160,6 +160,7 @@ TEST_GUI_OBJECTS = \ $(OBJS)\test_gui_measuring.o \ $(OBJS)\test_gui_affinematrix.o \ $(OBJS)\test_gui_boundingbox.o \ + $(OBJS)\test_gui_clippingbox.o \ $(OBJS)\test_gui_config.o \ $(OBJS)\test_gui_bitmapcomboboxtest.o \ $(OBJS)\test_gui_bitmaptogglebuttontest.o \ @@ -832,6 +833,9 @@ $(OBJS)\test_gui_affinematrix.o: ./graphics/affinematrix.cpp $(OBJS)\test_gui_boundingbox.o: ./graphics/boundingbox.cpp $(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $< +$(OBJS)\test_gui_clippingbox.o: ./graphics/clippingbox.cpp + $(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $< + $(OBJS)\test_gui_config.o: ./config/config.cpp $(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $< diff --git a/tests/makefile.vc b/tests/makefile.vc index 075f84b817..34c88d0738 100644 --- a/tests/makefile.vc +++ b/tests/makefile.vc @@ -170,6 +170,7 @@ TEST_GUI_OBJECTS = \ $(OBJS)\test_gui_measuring.obj \ $(OBJS)\test_gui_affinematrix.obj \ $(OBJS)\test_gui_boundingbox.obj \ + $(OBJS)\test_gui_clippingbox.obj \ $(OBJS)\test_gui_config.obj \ $(OBJS)\test_gui_bitmapcomboboxtest.obj \ $(OBJS)\test_gui_bitmaptogglebuttontest.obj \ @@ -1033,6 +1034,9 @@ $(OBJS)\test_gui_affinematrix.obj: .\graphics\affinematrix.cpp $(OBJS)\test_gui_boundingbox.obj: .\graphics\boundingbox.cpp $(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\graphics\boundingbox.cpp +$(OBJS)\test_gui_clippingbox.obj: .\graphics\clippingbox.cpp + $(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\graphics\clippingbox.cpp + $(OBJS)\test_gui_config.obj: .\config\config.cpp $(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\config\config.cpp diff --git a/tests/test.bkl b/tests/test.bkl index 10595fd001..03998d257b 100644 --- a/tests/test.bkl +++ b/tests/test.bkl @@ -180,6 +180,7 @@ graphics/measuring.cpp graphics/affinematrix.cpp graphics/boundingbox.cpp + graphics/clippingbox.cpp config/config.cpp controls/bitmapcomboboxtest.cpp controls/bitmaptogglebuttontest.cpp diff --git a/tests/test_gui.vcxproj b/tests/test_gui.vcxproj index d2c3ecc9d1..b5199fe130 100644 --- a/tests/test_gui.vcxproj +++ b/tests/test_gui.vcxproj @@ -528,6 +528,7 @@ + diff --git a/tests/test_gui.vcxproj.filters b/tests/test_gui.vcxproj.filters index dd95bfb3e9..801080ba5e 100644 --- a/tests/test_gui.vcxproj.filters +++ b/tests/test_gui.vcxproj.filters @@ -281,6 +281,9 @@ Source Files + + Source Files + diff --git a/tests/test_vc7_test_gui.vcproj b/tests/test_vc7_test_gui.vcproj index 543b3a648e..3ed9e92602 100644 --- a/tests/test_vc7_test_gui.vcproj +++ b/tests/test_vc7_test_gui.vcproj @@ -319,6 +319,9 @@ + + diff --git a/tests/test_vc8_test_gui.vcproj b/tests/test_vc8_test_gui.vcproj index ba40ec6085..2e9f8f1806 100644 --- a/tests/test_vc8_test_gui.vcproj +++ b/tests/test_vc8_test_gui.vcproj @@ -862,6 +862,10 @@ RelativePath=".\graphics\boundingbox.cpp" > + + diff --git a/tests/test_vc9_test_gui.vcproj b/tests/test_vc9_test_gui.vcproj index 243a5e0c29..8083fd6285 100644 --- a/tests/test_vc9_test_gui.vcproj +++ b/tests/test_vc9_test_gui.vcproj @@ -834,6 +834,10 @@ RelativePath=".\graphics\boundingbox.cpp" > + +