summaryrefslogtreecommitdiff
path: root/vcl/backendtest
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2019-04-15 21:52:46 +0900
committerTomaž Vajngerl <quikee@gmail.com>2019-04-16 03:48:28 +0200
commit3083fe569f96bf0289da1e9d0ef7da15ab22e2f6 (patch)
tree7009b2023d374e15d718cc2bd30b98295dc78263 /vcl/backendtest
parent25a28cee10736e8a72b40b5ab2d11dea8d5254c3 (diff)
Add backend tests as CPPUNIT tests
This (finally) adds backend tests as CPPUNIT tests too. In the future they'll also be added into LibreOffice directly as a way to test if the backend is OK, which will be useful especially for the OpenGL backend, which draw quality depends on the driver. Currently all the tests are ignored because of the bugs in the backend, which need to be addressed first and tests then can be enabled one by one. The main reason for the test is to identify issues when drawing is done at a wrong position, which is a very common problem. Also other types of tests will be added in time, which will have a big role in the refactoring of VCL that will happen in the future. Change-Id: I92237d47d49fa0db01b73b8bc39f7a621b65961e Reviewed-on: https://gerrit.libreoffice.org/70769 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'vcl/backendtest')
-rw-r--r--vcl/backendtest/VisualBackendTest.cxx12
-rw-r--r--vcl/backendtest/outputdevice/common.cxx16
-rw-r--r--vcl/backendtest/outputdevice/line.cxx4
-rw-r--r--vcl/backendtest/outputdevice/pixel.cxx4
-rw-r--r--vcl/backendtest/outputdevice/polygon.cxx6
-rw-r--r--vcl/backendtest/outputdevice/polyline.cxx4
-rw-r--r--vcl/backendtest/outputdevice/polyline_b2d.cxx50
-rw-r--r--vcl/backendtest/outputdevice/polypolygon.cxx10
-rw-r--r--vcl/backendtest/outputdevice/polypolygon_b2d.cxx65
-rw-r--r--vcl/backendtest/outputdevice/rectangle.cxx8
10 files changed, 153 insertions, 26 deletions
diff --git a/vcl/backendtest/VisualBackendTest.cxx b/vcl/backendtest/VisualBackendTest.cxx
index b06610493073..398e5e2d3643 100644
--- a/vcl/backendtest/VisualBackendTest.cxx
+++ b/vcl/backendtest/VisualBackendTest.cxx
@@ -186,7 +186,7 @@ public:
aRectangle = aRegions[index++];
{
vcl::test::OutputDeviceTestRect aOutDevTest;
- Bitmap aBitmap = aOutDevTest.setupRectangle();
+ Bitmap aBitmap = aOutDevTest.setupRectangle(false);
assertAndSetBackground(vcl::test::OutputDeviceTestCommon::checkRectangle(aBitmap), aRectangle, rRenderContext);
drawBitmapScaledAndCentered(aRectangle, aBitmap, rRenderContext);
}
@@ -194,7 +194,7 @@ public:
aRectangle = aRegions[index++];
{
vcl::test::OutputDeviceTestPixel aOutDevTest;
- Bitmap aBitmap = aOutDevTest.setupRectangle();
+ Bitmap aBitmap = aOutDevTest.setupRectangle(false);
assertAndSetBackground(vcl::test::OutputDeviceTestCommon::checkRectangle(aBitmap), aRectangle, rRenderContext);
drawBitmapScaledAndCentered(aRectangle, aBitmap, rRenderContext);
}
@@ -202,7 +202,7 @@ public:
aRectangle = aRegions[index++];
{
vcl::test::OutputDeviceTestLine aOutDevTest;
- Bitmap aBitmap = aOutDevTest.setupRectangle();
+ Bitmap aBitmap = aOutDevTest.setupRectangle(false);
assertAndSetBackground(vcl::test::OutputDeviceTestCommon::checkRectangle(aBitmap), aRectangle, rRenderContext);
drawBitmapScaledAndCentered(aRectangle, aBitmap, rRenderContext);
}
@@ -210,7 +210,7 @@ public:
aRectangle = aRegions[index++];
{
vcl::test::OutputDeviceTestPolygon aOutDevTest;
- Bitmap aBitmap = aOutDevTest.setupRectangle();
+ Bitmap aBitmap = aOutDevTest.setupRectangle(false);
assertAndSetBackground(vcl::test::OutputDeviceTestCommon::checkRectangle(aBitmap), aRectangle, rRenderContext);
drawBitmapScaledAndCentered(aRectangle, aBitmap, rRenderContext);
}
@@ -218,7 +218,7 @@ public:
aRectangle = aRegions[index++];
{
vcl::test::OutputDeviceTestPolyLine aOutDevTest;
- Bitmap aBitmap = aOutDevTest.setupRectangle();
+ Bitmap aBitmap = aOutDevTest.setupRectangle(false);
assertAndSetBackground(vcl::test::OutputDeviceTestCommon::checkRectangle(aBitmap), aRectangle, rRenderContext);
drawBitmapScaledAndCentered(aRectangle, aBitmap, rRenderContext);
}
@@ -226,7 +226,7 @@ public:
aRectangle = aRegions[index++];
{
vcl::test::OutputDeviceTestPolyPolygon aOutDevTest;
- Bitmap aBitmap = aOutDevTest.setupRectangle();
+ Bitmap aBitmap = aOutDevTest.setupRectangle(false);
assertAndSetBackground(vcl::test::OutputDeviceTestCommon::checkRectangle(aBitmap), aRectangle, rRenderContext);
drawBitmapScaledAndCentered(aRectangle, aBitmap, rRenderContext);
}
diff --git a/vcl/backendtest/outputdevice/common.cxx b/vcl/backendtest/outputdevice/common.cxx
index 8124676d93aa..d6f1d50f8456 100644
--- a/vcl/backendtest/outputdevice/common.cxx
+++ b/vcl/backendtest/outputdevice/common.cxx
@@ -225,10 +225,14 @@ OutputDeviceTestCommon::OutputDeviceTestCommon()
: mpVirtualDevice(VclPtr<VirtualDevice>::Create())
{}
-void OutputDeviceTestCommon::initialSetup(long nWidth, long nHeight, Color aColor)
+void OutputDeviceTestCommon::initialSetup(long nWidth, long nHeight, Color aColor, bool bEnableAA)
{
maVDRectangle = tools::Rectangle(Point(), Size (nWidth, nHeight));
mpVirtualDevice->SetOutputSizePixel(maVDRectangle.GetSize());
+ if (bEnableAA)
+ mpVirtualDevice->SetAntialiasing(AntialiasingFlags::EnableB2dDraw | AntialiasingFlags::PixelSnapHairline);
+ else
+ mpVirtualDevice->SetAntialiasing(AntialiasingFlags::NONE);
mpVirtualDevice->SetBackground(Wallpaper(aColor));
mpVirtualDevice->Erase();
}
@@ -253,6 +257,16 @@ TestResult OutputDeviceTestCommon::checkRectangle(Bitmap& aBitmap)
return checkRectangles(aBitmap, aExpected);
}
+TestResult OutputDeviceTestCommon::checkRectangleAA(Bitmap& aBitmap)
+{
+ std::vector<Color> aExpected
+ {
+ constBackgroundColor, constBackgroundColor, constLineColor,
+ constBackgroundColor, constBackgroundColor, constLineColor, constBackgroundColor
+ };
+ return checkRectangles(aBitmap, aExpected);
+}
+
TestResult OutputDeviceTestCommon::checkFilledRectangle(Bitmap& aBitmap)
{
std::vector<Color> aExpected
diff --git a/vcl/backendtest/outputdevice/line.cxx b/vcl/backendtest/outputdevice/line.cxx
index 59a2294bfa38..ff03a777771e 100644
--- a/vcl/backendtest/outputdevice/line.cxx
+++ b/vcl/backendtest/outputdevice/line.cxx
@@ -31,9 +31,9 @@ void drawLineOffset(OutputDevice& rDevice, tools::Rectangle const & rRect, int n
} // end anonymous namespace
-Bitmap OutputDeviceTestLine::setupRectangle()
+Bitmap OutputDeviceTestLine::setupRectangle(bool bEnableAA)
{
- initialSetup(13, 13, constBackgroundColor);
+ initialSetup(13, 13, constBackgroundColor, bEnableAA);
mpVirtualDevice->SetLineColor(constLineColor);
mpVirtualDevice->SetFillColor();
diff --git a/vcl/backendtest/outputdevice/pixel.cxx b/vcl/backendtest/outputdevice/pixel.cxx
index eef758f9851e..b231396ab7ff 100644
--- a/vcl/backendtest/outputdevice/pixel.cxx
+++ b/vcl/backendtest/outputdevice/pixel.cxx
@@ -39,9 +39,9 @@ void drawPixelOffset(OutputDevice& rDevice, tools::Rectangle const & rRect, int
} // end anonymous namespace
-Bitmap OutputDeviceTestPixel::setupRectangle()
+Bitmap OutputDeviceTestPixel::setupRectangle(bool bEnableAA)
{
- initialSetup(13, 13, constBackgroundColor);
+ initialSetup(13, 13, constBackgroundColor, bEnableAA);
mpVirtualDevice->SetLineColor(constLineColor);
mpVirtualDevice->SetFillColor();
diff --git a/vcl/backendtest/outputdevice/polygon.cxx b/vcl/backendtest/outputdevice/polygon.cxx
index 785bc5dab72c..4a0fac9f92ed 100644
--- a/vcl/backendtest/outputdevice/polygon.cxx
+++ b/vcl/backendtest/outputdevice/polygon.cxx
@@ -30,9 +30,9 @@ void drawPolygonOffset(OutputDevice& rDevice, tools::Rectangle const & rRect, in
} // end anonymous namespace
-Bitmap OutputDeviceTestPolygon::setupRectangle()
+Bitmap OutputDeviceTestPolygon::setupRectangle(bool bEnableAA)
{
- initialSetup(13, 13, constBackgroundColor);
+ initialSetup(13, 13, constBackgroundColor, bEnableAA);
mpVirtualDevice->SetLineColor(constLineColor);
mpVirtualDevice->SetFillColor();
@@ -47,7 +47,7 @@ Bitmap OutputDeviceTestPolygon::setupFilledRectangle()
{
initialSetup(13, 13, constBackgroundColor);
- mpVirtualDevice->SetLineColor(constFillColor);
+ mpVirtualDevice->SetLineColor();
mpVirtualDevice->SetFillColor(constFillColor);
drawPolygonOffset(*mpVirtualDevice, maVDRectangle, 2);
diff --git a/vcl/backendtest/outputdevice/polyline.cxx b/vcl/backendtest/outputdevice/polyline.cxx
index 49894a1a2186..53a9edab9d11 100644
--- a/vcl/backendtest/outputdevice/polyline.cxx
+++ b/vcl/backendtest/outputdevice/polyline.cxx
@@ -30,9 +30,9 @@ void drawPolyLineOffset(OutputDevice& rDevice, tools::Rectangle const & rRect, i
} // end anonymous namespace
-Bitmap OutputDeviceTestPolyLine::setupRectangle()
+Bitmap OutputDeviceTestPolyLine::setupRectangle(bool bEnableAA)
{
- initialSetup(13, 13, constBackgroundColor);
+ initialSetup(13, 13, constBackgroundColor, bEnableAA);
mpVirtualDevice->SetLineColor(constLineColor);
mpVirtualDevice->SetFillColor();
diff --git a/vcl/backendtest/outputdevice/polyline_b2d.cxx b/vcl/backendtest/outputdevice/polyline_b2d.cxx
new file mode 100644
index 000000000000..d6b9886b41ee
--- /dev/null
+++ b/vcl/backendtest/outputdevice/polyline_b2d.cxx
@@ -0,0 +1,50 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#include <test/outputdevice.hxx>
+
+namespace vcl
+{
+namespace test
+{
+namespace
+{
+void drawPolyLineOffset(OutputDevice& rDevice, tools::Rectangle const& rRect, int nOffset)
+{
+ basegfx::B2DPolygon aPolygon{
+ basegfx::B2DPoint(rRect.Left() + nOffset, rRect.Top() + nOffset),
+ basegfx::B2DPoint(rRect.Right() - nOffset, rRect.Top() + nOffset),
+ basegfx::B2DPoint(rRect.Right() - nOffset, rRect.Bottom() - nOffset),
+ basegfx::B2DPoint(rRect.Left() + nOffset, rRect.Bottom() - nOffset),
+ };
+ aPolygon.setClosed(true);
+
+ rDevice.DrawPolyLine(aPolygon, 0.0); // draw hairline
+}
+
+} // end anonymous namespace
+
+Bitmap OutputDeviceTestPolyLineB2D::setupRectangle(bool bEnableAA)
+{
+ initialSetup(13, 13, constBackgroundColor, bEnableAA);
+
+ mpVirtualDevice->SetLineColor(constLineColor);
+ mpVirtualDevice->SetFillColor();
+
+ drawPolyLineOffset(*mpVirtualDevice, maVDRectangle, 2);
+ drawPolyLineOffset(*mpVirtualDevice, maVDRectangle, 5);
+
+ return mpVirtualDevice->GetBitmapEx(maVDRectangle.TopLeft(), maVDRectangle.GetSize())
+ .GetBitmap();
+}
+}
+} // end namespace vcl::test
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/backendtest/outputdevice/polypolygon.cxx b/vcl/backendtest/outputdevice/polypolygon.cxx
index 10ebc85e2d62..f36db1e9fd65 100644
--- a/vcl/backendtest/outputdevice/polypolygon.cxx
+++ b/vcl/backendtest/outputdevice/polypolygon.cxx
@@ -30,9 +30,9 @@ tools::Polygon createPolygonOffset(tools::Rectangle const & rRect, int nOffset)
} // end anonymous namespace
-Bitmap OutputDeviceTestPolyPolygon::setupRectangle()
+Bitmap OutputDeviceTestPolyPolygon::setupRectangle(bool bEnableAA)
{
- initialSetup(13, 13, constBackgroundColor);
+ initialSetup(13, 13, constBackgroundColor, bEnableAA);
mpVirtualDevice->SetLineColor(constLineColor);
mpVirtualDevice->SetFillColor();
@@ -50,13 +50,11 @@ Bitmap OutputDeviceTestPolyPolygon::setupFilledRectangle()
{
initialSetup(13, 13, constBackgroundColor);
- mpVirtualDevice->SetLineColor(constFillColor);
+ mpVirtualDevice->SetLineColor();
mpVirtualDevice->SetFillColor(constFillColor);
- tools::PolyPolygon aPolyPolygon(3);
+ tools::PolyPolygon aPolyPolygon(1);
aPolyPolygon.Insert(createPolygonOffset(maVDRectangle, 2));
- aPolyPolygon.Insert(createPolygonOffset(maVDRectangle, 4));
- aPolyPolygon.Insert(createPolygonOffset(maVDRectangle, 4));
mpVirtualDevice->DrawPolyPolygon(aPolyPolygon);
diff --git a/vcl/backendtest/outputdevice/polypolygon_b2d.cxx b/vcl/backendtest/outputdevice/polypolygon_b2d.cxx
new file mode 100644
index 000000000000..808e8637c3d8
--- /dev/null
+++ b/vcl/backendtest/outputdevice/polypolygon_b2d.cxx
@@ -0,0 +1,65 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#include <test/outputdevice.hxx>
+
+namespace vcl
+{
+namespace test
+{
+namespace
+{
+basegfx::B2DPolygon createPolygonOffset(tools::Rectangle const& rRect, int nOffset)
+{
+ basegfx::B2DPolygon aPolygon{
+ basegfx::B2DPoint(rRect.Left() + nOffset, rRect.Top() + nOffset),
+ basegfx::B2DPoint(rRect.Right() - nOffset, rRect.Top() + nOffset),
+ basegfx::B2DPoint(rRect.Right() - nOffset, rRect.Bottom() - nOffset),
+ basegfx::B2DPoint(rRect.Left() + nOffset, rRect.Bottom() - nOffset),
+ };
+ aPolygon.setClosed(true);
+ return aPolygon;
+}
+
+} // end anonymous namespace
+
+Bitmap OutputDeviceTestPolyPolygonB2D::setupRectangle(bool bEnableAA)
+{
+ initialSetup(13, 13, constBackgroundColor, bEnableAA);
+
+ mpVirtualDevice->SetLineColor(constLineColor);
+ mpVirtualDevice->SetFillColor();
+
+ basegfx::B2DPolyPolygon aPolyPolygon;
+ aPolyPolygon.append(createPolygonOffset(maVDRectangle, 2));
+ aPolyPolygon.append(createPolygonOffset(maVDRectangle, 5));
+
+ mpVirtualDevice->DrawPolyPolygon(aPolyPolygon);
+
+ return mpVirtualDevice->GetBitmap(maVDRectangle.TopLeft(), maVDRectangle.GetSize());
+}
+
+Bitmap OutputDeviceTestPolyPolygonB2D::setupFilledRectangle()
+{
+ initialSetup(13, 13, constBackgroundColor);
+
+ mpVirtualDevice->SetLineColor();
+ mpVirtualDevice->SetFillColor(constFillColor);
+
+ basegfx::B2DPolyPolygon aPolyPolygon(createPolygonOffset(maVDRectangle, 2));
+
+ mpVirtualDevice->DrawPolyPolygon(aPolyPolygon);
+
+ return mpVirtualDevice->GetBitmap(maVDRectangle.TopLeft(), maVDRectangle.GetSize());
+}
+}
+} // end namespace vcl::test
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/backendtest/outputdevice/rectangle.cxx b/vcl/backendtest/outputdevice/rectangle.cxx
index 199c299b2b2d..a491d67f5c52 100644
--- a/vcl/backendtest/outputdevice/rectangle.cxx
+++ b/vcl/backendtest/outputdevice/rectangle.cxx
@@ -27,18 +27,17 @@ Bitmap OutputDeviceTestRect::setupFilledRectangle()
{
initialSetup(13, 13, constBackgroundColor);
- mpVirtualDevice->SetLineColor(constFillColor);
+ mpVirtualDevice->SetLineColor();
mpVirtualDevice->SetFillColor(constFillColor);
drawRectOffset(*mpVirtualDevice, maVDRectangle, 2);
- drawRectOffset(*mpVirtualDevice, maVDRectangle, 5);
return mpVirtualDevice->GetBitmap(maVDRectangle.TopLeft(), maVDRectangle.GetSize());
}
-Bitmap OutputDeviceTestRect::setupRectangle()
+Bitmap OutputDeviceTestRect::setupRectangle(bool bEnableAA)
{
- initialSetup(13, 13, constBackgroundColor);
+ initialSetup(13, 13, constBackgroundColor, bEnableAA);
mpVirtualDevice->SetLineColor(constLineColor);
mpVirtualDevice->SetFillColor();
@@ -49,6 +48,7 @@ Bitmap OutputDeviceTestRect::setupRectangle()
return mpVirtualDevice->GetBitmap(maVDRectangle.TopLeft(), maVDRectangle.GetSize());
}
+
}} // end namespace vcl::test
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */