Add a unit test for wxAffineMatrix2D class and its support in wxDC.

Verify that applying a world transformation to wxDC really does result in the
expected transformation.

See #13092.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67617 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2011-04-26 22:57:20 +00:00
parent a25b5bbfc9
commit ab797d5d34
11 changed files with 176 additions and 0 deletions

View File

@@ -155,6 +155,7 @@ TEST_GUI_OBJECTS = \
test_gui_colour.o \ test_gui_colour.o \
test_gui_ellipsization.o \ test_gui_ellipsization.o \
test_gui_measuring.o \ test_gui_measuring.o \
test_gui_affinematrix.o \
test_gui_config.o \ test_gui_config.o \
test_gui_bitmapcomboboxtest.o \ test_gui_bitmapcomboboxtest.o \
test_gui_bitmaptogglebuttontest.o \ test_gui_bitmaptogglebuttontest.o \
@@ -696,6 +697,9 @@ test_gui_ellipsization.o: $(srcdir)/graphics/ellipsization.cpp $(TEST_GUI_ODEP)
test_gui_measuring.o: $(srcdir)/graphics/measuring.cpp $(TEST_GUI_ODEP) test_gui_measuring.o: $(srcdir)/graphics/measuring.cpp $(TEST_GUI_ODEP)
$(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/graphics/measuring.cpp $(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/graphics/measuring.cpp
test_gui_affinematrix.o: $(srcdir)/graphics/affinematrix.cpp $(TEST_GUI_ODEP)
$(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/graphics/affinematrix.cpp
test_gui_config.o: $(srcdir)/config/config.cpp $(TEST_GUI_ODEP) test_gui_config.o: $(srcdir)/config/config.cpp $(TEST_GUI_ODEP)
$(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/config/config.cpp $(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/config/config.cpp

View File

@@ -0,0 +1,140 @@
///////////////////////////////////////////////////////////////////////////////
// Name: tests/graphics/affinetransform.cpp
// Purpose: Unit test for transformations implemented for wxAffineMatrix2D
// Author: Catalin Raceanu
// Created: 2011-04-14
// Copyright: (c) 2011 wxWidgets development team
///////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include "testprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include "wx/dcmemory.h"
#include "wx/affinematrix2d.h"
#include "wx/math.h"
#include "testimage.h"
// ----------------------------------------------------------------------------
// test class
// ----------------------------------------------------------------------------
class AffineTransformTestCase : public CppUnit::TestCase
{
public:
AffineTransformTestCase()
{
wxImage::AddHandler(new wxJPEGHandler);
}
virtual void setUp();
private:
CPPUNIT_TEST_SUITE( AffineTransformTestCase );
CPPUNIT_TEST( InvertMatrix );
CPPUNIT_TEST( VMirrorAndTranslate );
CPPUNIT_TEST( Rotate90Clockwise );
CPPUNIT_TEST_SUITE_END();
void InvertMatrix();
void VMirrorAndTranslate();
void Rotate90Clockwise();
wxImage m_imgOrig;
wxBitmap m_bmpOrig;
DECLARE_NO_COPY_CLASS(AffineTransformTestCase)
};
// register in the unnamed registry so that these tests are run by default
CPPUNIT_TEST_SUITE_REGISTRATION( AffineTransformTestCase );
// also include in it's own registry so that these tests can be run alone
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( AffineTransformTestCase, "AffineTransformTestCase" );
void AffineTransformTestCase::setUp()
{
m_imgOrig.LoadFile("horse.jpg");
CPPUNIT_ASSERT( m_imgOrig.IsOk() );
m_bmpOrig = wxBitmap(m_imgOrig);
}
void AffineTransformTestCase::InvertMatrix()
{
wxAffineMatrix2D matrix1;
matrix1.Set(wxMatrix2D(2, 1, 1, 1), wxPoint2DDouble(1, 1));
wxAffineMatrix2D matrix2(matrix1);
matrix2.Invert();
wxMatrix2D m;
wxPoint2DDouble p;
matrix2.Get(&m, &p);
CPPUNIT_ASSERT_EQUAL( 1, (int)m.m_11 );
CPPUNIT_ASSERT_EQUAL( -1, (int)m.m_12 );
CPPUNIT_ASSERT_EQUAL( -1, (int)m.m_21 );
CPPUNIT_ASSERT_EQUAL( 2, (int)m.m_22 );
CPPUNIT_ASSERT_EQUAL( 0, (int)p.m_x );
CPPUNIT_ASSERT_EQUAL( -1, (int)p.m_y );
matrix2.Concat(matrix1);
CPPUNIT_ASSERT( matrix2.IsIdentity() );
}
void AffineTransformTestCase::VMirrorAndTranslate()
{
wxBitmap bmpUsingMatrix(m_bmpOrig.GetWidth(), m_bmpOrig.GetHeight());
// build the mirrored image using the transformation matrix
{
wxMemoryDC dc(bmpUsingMatrix);
if ( !dc.CanUseTransformMatrix() )
return;
wxAffineMatrix2D matrix;
matrix.Mirror(wxVERTICAL);
matrix.Translate(0, m_bmpOrig.GetHeight() - 1);
dc.SetTransformMatrix(matrix);
dc.DrawBitmap(m_bmpOrig, 0, 0);
}
wxImage imgUsingMatrix = bmpUsingMatrix.ConvertToImage();
wxImage imgOrigVMirrored = m_imgOrig.Mirror(false);
CPPUNIT_ASSERT_EQUAL( imgUsingMatrix, imgOrigVMirrored );
}
void AffineTransformTestCase::Rotate90Clockwise()
{
wxBitmap bmpUsingMatrix(m_bmpOrig.GetHeight(), m_bmpOrig.GetWidth());
// build the rotated image using the transformation matrix
{
wxMemoryDC dc(bmpUsingMatrix);
if ( !dc.CanUseTransformMatrix() )
return;
wxAffineMatrix2D matrix;
matrix.Rotate(-0.5 * M_PI);
matrix.Translate(m_bmpOrig.GetHeight(), 0);
dc.SetTransformMatrix(matrix);
dc.DrawBitmap(m_bmpOrig, 0, 0);
}
wxImage imgUsingMatrix = bmpUsingMatrix.ConvertToImage();
wxImage imgOrigRotate90Clockwise = m_imgOrig.Rotate90(true);
CPPUNIT_ASSERT_EQUAL( imgUsingMatrix, imgOrigRotate90Clockwise );
}

View File

@@ -140,6 +140,7 @@ TEST_GUI_OBJECTS = \
$(OBJS)\test_gui_colour.obj \ $(OBJS)\test_gui_colour.obj \
$(OBJS)\test_gui_ellipsization.obj \ $(OBJS)\test_gui_ellipsization.obj \
$(OBJS)\test_gui_measuring.obj \ $(OBJS)\test_gui_measuring.obj \
$(OBJS)\test_gui_affinematrix.obj \
$(OBJS)\test_gui_config.obj \ $(OBJS)\test_gui_config.obj \
$(OBJS)\test_gui_bitmapcomboboxtest.obj \ $(OBJS)\test_gui_bitmapcomboboxtest.obj \
$(OBJS)\test_gui_bitmaptogglebuttontest.obj \ $(OBJS)\test_gui_bitmaptogglebuttontest.obj \
@@ -744,6 +745,9 @@ $(OBJS)\test_gui_ellipsization.obj: .\graphics\ellipsization.cpp
$(OBJS)\test_gui_measuring.obj: .\graphics\measuring.cpp $(OBJS)\test_gui_measuring.obj: .\graphics\measuring.cpp
$(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\graphics\measuring.cpp $(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\graphics\measuring.cpp
$(OBJS)\test_gui_affinematrix.obj: .\graphics\affinematrix.cpp
$(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\graphics\affinematrix.cpp
$(OBJS)\test_gui_config.obj: .\config\config.cpp $(OBJS)\test_gui_config.obj: .\config\config.cpp
$(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\config\config.cpp $(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\config\config.cpp

View File

@@ -133,6 +133,7 @@ TEST_GUI_OBJECTS = \
$(OBJS)\test_gui_colour.o \ $(OBJS)\test_gui_colour.o \
$(OBJS)\test_gui_ellipsization.o \ $(OBJS)\test_gui_ellipsization.o \
$(OBJS)\test_gui_measuring.o \ $(OBJS)\test_gui_measuring.o \
$(OBJS)\test_gui_affinematrix.o \
$(OBJS)\test_gui_config.o \ $(OBJS)\test_gui_config.o \
$(OBJS)\test_gui_bitmapcomboboxtest.o \ $(OBJS)\test_gui_bitmapcomboboxtest.o \
$(OBJS)\test_gui_bitmaptogglebuttontest.o \ $(OBJS)\test_gui_bitmaptogglebuttontest.o \
@@ -725,6 +726,9 @@ $(OBJS)\test_gui_ellipsization.o: ./graphics/ellipsization.cpp
$(OBJS)\test_gui_measuring.o: ./graphics/measuring.cpp $(OBJS)\test_gui_measuring.o: ./graphics/measuring.cpp
$(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $< $(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\test_gui_affinematrix.o: ./graphics/affinematrix.cpp
$(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\test_gui_config.o: ./config/config.cpp $(OBJS)\test_gui_config.o: ./config/config.cpp
$(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $< $(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<

View File

@@ -135,6 +135,7 @@ TEST_GUI_OBJECTS = \
$(OBJS)\test_gui_colour.obj \ $(OBJS)\test_gui_colour.obj \
$(OBJS)\test_gui_ellipsization.obj \ $(OBJS)\test_gui_ellipsization.obj \
$(OBJS)\test_gui_measuring.obj \ $(OBJS)\test_gui_measuring.obj \
$(OBJS)\test_gui_affinematrix.obj \
$(OBJS)\test_gui_config.obj \ $(OBJS)\test_gui_config.obj \
$(OBJS)\test_gui_bitmapcomboboxtest.obj \ $(OBJS)\test_gui_bitmapcomboboxtest.obj \
$(OBJS)\test_gui_bitmaptogglebuttontest.obj \ $(OBJS)\test_gui_bitmaptogglebuttontest.obj \
@@ -870,6 +871,9 @@ $(OBJS)\test_gui_ellipsization.obj: .\graphics\ellipsization.cpp
$(OBJS)\test_gui_measuring.obj: .\graphics\measuring.cpp $(OBJS)\test_gui_measuring.obj: .\graphics\measuring.cpp
$(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\graphics\measuring.cpp $(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\graphics\measuring.cpp
$(OBJS)\test_gui_affinematrix.obj: .\graphics\affinematrix.cpp
$(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\graphics\affinematrix.cpp
$(OBJS)\test_gui_config.obj: .\config\config.cpp $(OBJS)\test_gui_config.obj: .\config\config.cpp
$(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\config\config.cpp $(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\config\config.cpp

View File

@@ -379,6 +379,7 @@ TEST_GUI_OBJECTS = &
$(OBJS)\test_gui_colour.obj & $(OBJS)\test_gui_colour.obj &
$(OBJS)\test_gui_ellipsization.obj & $(OBJS)\test_gui_ellipsization.obj &
$(OBJS)\test_gui_measuring.obj & $(OBJS)\test_gui_measuring.obj &
$(OBJS)\test_gui_affinematrix.obj &
$(OBJS)\test_gui_config.obj & $(OBJS)\test_gui_config.obj &
$(OBJS)\test_gui_bitmapcomboboxtest.obj & $(OBJS)\test_gui_bitmapcomboboxtest.obj &
$(OBJS)\test_gui_bitmaptogglebuttontest.obj & $(OBJS)\test_gui_bitmaptogglebuttontest.obj &
@@ -784,6 +785,9 @@ $(OBJS)\test_gui_ellipsization.obj : .AUTODEPEND .\graphics\ellipsization.cpp
$(OBJS)\test_gui_measuring.obj : .AUTODEPEND .\graphics\measuring.cpp $(OBJS)\test_gui_measuring.obj : .AUTODEPEND .\graphics\measuring.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $< $(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<
$(OBJS)\test_gui_affinematrix.obj : .AUTODEPEND .\graphics\affinematrix.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<
$(OBJS)\test_gui_config.obj : .AUTODEPEND .\config\config.cpp $(OBJS)\test_gui_config.obj : .AUTODEPEND .\config\config.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $< $(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<

View File

@@ -136,6 +136,7 @@
graphics/colour.cpp graphics/colour.cpp
graphics/ellipsization.cpp graphics/ellipsization.cpp
graphics/measuring.cpp graphics/measuring.cpp
graphics/affinematrix.cpp
config/config.cpp config/config.cpp
controls/bitmapcomboboxtest.cpp controls/bitmapcomboboxtest.cpp
controls/bitmaptogglebuttontest.cpp controls/bitmaptogglebuttontest.cpp

View File

@@ -239,6 +239,10 @@ SOURCE=.\menu\accelentry.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\graphics\affinematrix.cpp
# End Source File
# Begin Source File
SOURCE=.\asserthelper.cpp SOURCE=.\asserthelper.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File

View File

@@ -569,6 +569,9 @@
RelativePath=".\menu\accelentry.cpp"> RelativePath=".\menu\accelentry.cpp">
</File> </File>
<File <File
RelativePath=".\graphics\affinematrix.cpp">
</File>
<File
RelativePath=".\asserthelper.cpp"> RelativePath=".\asserthelper.cpp">
</File> </File>
<File <File

View File

@@ -832,6 +832,10 @@
> >
</File> </File>
<File <File
RelativePath=".\graphics\affinematrix.cpp"
>
</File>
<File
RelativePath=".\asserthelper.cpp" RelativePath=".\asserthelper.cpp"
> >
</File> </File>

View File

@@ -804,6 +804,10 @@
> >
</File> </File>
<File <File
RelativePath=".\graphics\affinematrix.cpp"
>
</File>
<File
RelativePath=".\asserthelper.cpp" RelativePath=".\asserthelper.cpp"
> >
</File> </File>