summaryrefslogtreecommitdiff
path: root/basebmp/test/linetest.cxx
diff options
context:
space:
mode:
authorThorsten Behrens <thb@openoffice.org>2006-05-31 08:49:45 +0000
committerThorsten Behrens <thb@openoffice.org>2006-05-31 08:49:45 +0000
commitef0bbaaf42d5d1784ab158d1b6b0535459702823 (patch)
tree89fa01c3069b3fc4f3afbe8850b001c755b8e787 /basebmp/test/linetest.cxx
parentc16e3ab6fba4dc9a7217c97b198a801dcca94ee0 (diff)
#i65904# Initial revision
Diffstat (limited to 'basebmp/test/linetest.cxx')
-rw-r--r--basebmp/test/linetest.cxx178
1 files changed, 178 insertions, 0 deletions
diff --git a/basebmp/test/linetest.cxx b/basebmp/test/linetest.cxx
new file mode 100644
index 000000000000..12e82cd0de3a
--- /dev/null
+++ b/basebmp/test/linetest.cxx
@@ -0,0 +1,178 @@
+// autogenerated file with codegen.pl
+
+#include <cppunit/simpleheader.hxx>
+
+#include <basegfx/vector/b2isize.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+
+#include <basebmp/color.hxx>
+#include <basebmp/scanlineformats.hxx>
+#include <basebmp/bitmapdevice.hxx>
+#include <basebmp/debug.hxx>
+
+#include <iostream>
+#include <fstream>
+
+using namespace ::basebmp;
+
+namespace
+{
+/*
+ std::ofstream output("32bpp_test.dump");
+ debugDump( mpDevice32bpp, output );
+*/
+
+class LineTest : public CppUnit::TestFixture
+{
+private:
+ BitmapDeviceSharedPtr mpDevice1bpp;
+ BitmapDeviceSharedPtr mpDevice32bpp;
+
+ int countPixel( const BitmapDeviceSharedPtr& rDevice,
+ Color checkColor ) const
+ {
+ int count(0);
+ const basegfx::B2ISize& rSize( rDevice->getSize() );
+ for( sal_Int32 y=0; y<rSize.getY(); ++y )
+ for( sal_Int32 x=0; x<rSize.getX(); ++x )
+ if( rDevice->getPixel( basegfx::B2IPoint(x,y) ) == checkColor )
+ ++count;
+
+ return count;
+ }
+
+ void implTestBasicDiagonalLines(const BitmapDeviceSharedPtr& rDevice)
+ {
+ rDevice->clear(Color(0));
+
+ const basegfx::B2IPoint aPt1(1,1);
+ const basegfx::B2IPoint aPt2(9,9);
+ const Color aCol(0xFFFFFFFF);
+ rDevice->drawLine( aPt1, aPt2, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("first pixel set",
+ rDevice->getPixel(aPt1) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("last pixel set",
+ rDevice->getPixel(aPt2) == aCol);
+ const basegfx::B2IPoint aPt3(0,0);
+ CPPUNIT_ASSERT_MESSAGE("topmost pixel not set",
+ rDevice->getPixel(aPt3) != aCol);
+ const basegfx::B2IPoint aPt4(10,10);
+ CPPUNIT_ASSERT_MESSAGE("bottommost pixel not set",
+ rDevice->getPixel(aPt4) != aCol);
+
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 9",
+ countPixel( rDevice, aCol ) == 9);
+
+ rDevice->drawLine( aPt2, aPt1, aCol, DrawMode_PAINT );
+
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel after "
+ "reversed paint is not 9",
+ countPixel( rDevice, aCol ) == 9);
+ }
+
+ void implTestBasicVerticalLines(const BitmapDeviceSharedPtr& rDevice)
+ {
+ rDevice->clear(Color(0));
+
+ const basegfx::B2IPoint aPt1(1,1);
+ const basegfx::B2IPoint aPt2(1,9);
+ const Color aCol(0xFFFFFFFF);
+ rDevice->drawLine( aPt1, aPt2, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("first pixel set",
+ rDevice->getPixel(aPt1) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("last pixel set",
+ rDevice->getPixel(aPt2) == aCol);
+ const basegfx::B2IPoint aPt3(0,0);
+ CPPUNIT_ASSERT_MESSAGE("topmost pixel not set",
+ rDevice->getPixel(aPt3) != aCol);
+ const basegfx::B2IPoint aPt4(0,10);
+ CPPUNIT_ASSERT_MESSAGE("bottommost pixel not set",
+ rDevice->getPixel(aPt4) != aCol);
+
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 9",
+ countPixel( rDevice, aCol ) == 9);
+ }
+
+ // test pixel rounding (should always tend towards start point of
+ // the line)
+ void implTestTieBreaking(const BitmapDeviceSharedPtr& rDevice)
+ {
+ rDevice->clear(Color(0));
+
+ const basegfx::B2IPoint aPt1(1,1);
+ const basegfx::B2IPoint aPt2(3,2);
+ const Color aCol(0xFFFFFFFF);
+ rDevice->drawLine( aPt1, aPt2, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("first pixel set",
+ rDevice->getPixel(aPt1) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("second pixel set",
+ rDevice->getPixel(basegfx::B2IPoint(2,1)) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("last pixel set",
+ rDevice->getPixel(aPt2) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel after "
+ "reversed paint is not 3",
+ countPixel( rDevice, aCol ) == 3);
+
+ rDevice->drawLine( aPt2, aPt1, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("alternate second pixel set",
+ rDevice->getPixel(basegfx::B2IPoint(2,2)) == aCol);
+
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel after "
+ "reversed paint is not 4",
+ countPixel( rDevice, aCol ) == 4);
+ }
+
+public:
+ void setUp()
+ {
+ const basegfx::B2ISize aSize(11,11);
+ mpDevice1bpp = createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_PAL );
+ mpDevice32bpp = createBitmapDevice( aSize,
+ true,
+ Format::THIRTYTWO_BIT_TC_MASK );
+ }
+
+ void testBasicDiagonalLines()
+ {
+ implTestBasicDiagonalLines( mpDevice1bpp );
+ implTestBasicDiagonalLines( mpDevice32bpp );
+ }
+
+ void testBasicVerticalLines()
+ {
+ implTestBasicVerticalLines( mpDevice1bpp );
+ //implTestBasicVerticalLines( mpDevice32bpp );
+ }
+
+ // test pixel rounding (should always tend towards start point of
+ // the line)
+ void testTieBreaking()
+ {
+ implTestTieBreaking( mpDevice1bpp );
+ implTestTieBreaking( mpDevice32bpp );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(LineTest);
+ CPPUNIT_TEST(testBasicDiagonalLines);
+ CPPUNIT_TEST(testBasicVerticalLines);
+ CPPUNIT_TEST(testTieBreaking);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(LineTest, "LineTest");
+}
+
+
+// -----------------------------------------------------------------------------
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+//NOADDITIONAL;
+