[Libreoffice-commits] core.git: include/vcl vcl/backendtest vcl/inc vcl/Library_vcl.mk vcl/qa
homeboy445 (via logerrit)
logerrit at kemper.freedesktop.org
Thu Aug 26 03:53:09 UTC 2021
include/vcl/test/GraphicsRenderTests.hxx | 1
vcl/Library_vcl.mk | 1
vcl/backendtest/GraphicsRenderTests.cxx | 20 +++++++-
vcl/backendtest/outputdevice/common.cxx | 73 +++++++++++++++++++++++++++++++
vcl/backendtest/outputdevice/text.cxx | 34 ++++++++++++++
vcl/inc/test/outputdevice.hxx | 6 ++
vcl/qa/cppunit/BackendTest.cxx | 12 +++++
7 files changed, 145 insertions(+), 2 deletions(-)
New commits:
commit 2b8d3d9a209b8020dac734b96a43292332aa5d44
Author: homeboy445 <akshitsan13 at gmail.com>
AuthorDate: Thu Jul 15 16:01:09 2021 +0530
Commit: Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Thu Aug 26 05:52:34 2021 +0200
backendtest: Text Drawing test
This test revolves around drawing text to a Virtual device
and testing if it's rendered at the expected position.
Change-Id: Iccfe382103632822befe84d5933d64eacefffa24
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118976
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/include/vcl/test/GraphicsRenderTests.hxx b/include/vcl/test/GraphicsRenderTests.hxx
index 974c47135271..8599cb5893fc 100644
--- a/include/vcl/test/GraphicsRenderTests.hxx
+++ b/include/vcl/test/GraphicsRenderTests.hxx
@@ -117,6 +117,7 @@ class VCL_PLUGIN_PUBLIC GraphicsRenderTests
void testClosedBezierWithPolyline();
void testClosedBezierWithPolygon();
void testFilledAsymmetricalDropShape();
+ void testTextDrawing();
static OUString returnTestStatus(vcl::test::TestResult const result);
void runALLTests();
void appendTestResult(OUString aTestName, OUString aTestStatus, Bitmap aTestBitmap = Bitmap());
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index ec5445f2968c..0f714a0ec9b3 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -503,6 +503,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
vcl/backendtest/outputdevice/polypolygon_b2d \
vcl/backendtest/outputdevice/polyline \
vcl/backendtest/outputdevice/polyline_b2d \
+ vcl/backendtest/outputdevice/text \
vcl/backendtest/outputdevice/rectangle \
vcl/backendtest/GraphicsRenderTests \
vcl/jsdialog/enabled \
diff --git a/vcl/backendtest/GraphicsRenderTests.cxx b/vcl/backendtest/GraphicsRenderTests.cxx
index 1ffc8d835cd6..1b98dead0264 100644
--- a/vcl/backendtest/GraphicsRenderTests.cxx
+++ b/vcl/backendtest/GraphicsRenderTests.cxx
@@ -1472,13 +1472,28 @@ void GraphicsRenderTests::testFilledAsymmetricalDropShape()
vcl::test::OutputDeviceTestPolygon aOutDevTest;
Bitmap aBitmap = aOutDevTest.setupFilledAsymmetricalDropShape();
OUString aTestName = "testFilledAsymmetricalDropShape";
+ vcl::test::TestResult eResult
+ = vcl::test::OutputDeviceTestLine::checkFilledAsymmetricalDropShape(aBitmap);
+ appendTestResult(aTestName, returnTestStatus(eResult),
+ (m_aStoreResultantBitmap ? aBitmap : Bitmap()));
+ if (m_aStoreResultantBitmap)
+ {
+ BitmapEx aBitmapEx(aBitmap);
+ exportBitmapExToImage(m_aUserInstallPath + aTestName + ".png", aBitmapEx);
+ }
+}
+
+void GraphicsRenderTests::testTextDrawing()
+{
+ vcl::test::OutputDeviceTestText aOutDevTest;
+ Bitmap aBitmap = aOutDevTest.setupTextBitmap();
+ OUString aTestName = "testTextDrawing";
if (!SHOULD_ASSERT)
{
appendTestResult(aTestName, "SKIPPED");
return;
}
- vcl::test::TestResult eResult
- = vcl::test::OutputDeviceTestLine::checkFilledAsymmetricalDropShape(aBitmap);
+ vcl::test::TestResult eResult = vcl::test::OutputDeviceTestLine::checkTextLocation(aBitmap);
appendTestResult(aTestName, returnTestStatus(eResult),
(m_aStoreResultantBitmap ? aBitmap : Bitmap()));
if (m_aStoreResultantBitmap)
@@ -1559,6 +1574,7 @@ void GraphicsRenderTests::runALLTests()
testClosedBezierWithPolyline();
testClosedBezierWithPolygon();
testFilledAsymmetricalDropShape();
+ testTextDrawing();
}
void GraphicsRenderTests::appendTestResult(OUString aTestName, OUString aTestStatus,
diff --git a/vcl/backendtest/outputdevice/common.cxx b/vcl/backendtest/outputdevice/common.cxx
index ccf78b1c2df2..b548571e22bb 100644
--- a/vcl/backendtest/outputdevice/common.cxx
+++ b/vcl/backendtest/outputdevice/common.cxx
@@ -895,6 +895,79 @@ TestResult OutputDeviceTestCommon::checkFilledAsymmetricalDropShape(Bitmap& rBit
return aResult;
}
+TestResult OutputDeviceTestCommon::checkTextLocation(Bitmap& rBitmap)
+{
+ BitmapScopedWriteAccess pAccess(rBitmap);
+
+ TestResult aResult = TestResult::Passed;
+
+ //The limit to which error would be tolerated.
+ tools::Long textThreshold = 3;
+ tools::Long textWidth = 3, textHeight = 8;
+ tools::Long deviationX = 0, deviationY = 0;
+ tools::Long verticalStart = 0, verticalEnd = 0;
+ tools::Long horizontalStart = 0, horizontalEnd = 0;
+ tools::Long midX = pAccess->Width() / 2.0;
+ tools::Long midY = pAccess->Height() / 2.0;
+ bool insideFlag = false;
+
+ //Traversing horizontally
+ for (tools::Long x = 0, y = pAccess->Height() / 2.0; x < pAccess->Width(); ++x)
+ {
+ if (pAccess->GetPixel(y, x) != constBackgroundColor)
+ {
+ if (!insideFlag)
+ {
+ horizontalStart = x;
+ insideFlag = true;
+ }
+ else
+ {
+ horizontalEnd = x;
+ }
+ }
+ }
+
+ deviationX = abs(midX - horizontalStart);
+ midY -= midY / 2.0;
+ midY += 1;
+
+ insideFlag = false;
+ //Traversing vertically
+ for (tools::Long x = 0, y = pAccess->Height() / 2.0; x < pAccess->Height(); ++x)
+ {
+ if (pAccess->GetPixel(x, y) != constBackgroundColor)
+ {
+ if (!insideFlag)
+ {
+ verticalStart = x;
+ insideFlag = true;
+ }
+ else
+ {
+ verticalEnd = x;
+ }
+ }
+ }
+
+ deviationY = abs(midY - verticalStart);
+
+ if (deviationX != 0 || deviationY != 0 || abs(horizontalStart - horizontalEnd) + 1 != textWidth
+ || abs(verticalStart - verticalEnd) + 1 != textHeight)
+ {
+ aResult = TestResult::PassedWithQuirks;
+ }
+
+ if (deviationX > textThreshold || deviationY > textThreshold
+ || abs((abs(horizontalStart - horizontalEnd) + 1) - textWidth) > textThreshold
+ || abs((abs(verticalStart - verticalEnd) + 1) - textHeight) > textThreshold)
+ {
+ aResult = TestResult::Failed;
+ }
+
+ return aResult;
+}
+
// Check 'count' pixels from (x,y) in (addX,addY) direction, the color values must not decrease.
static bool checkGradient(BitmapScopedWriteAccess& pAccess, int x, int y, int count, int addX, int addY)
{
diff --git a/vcl/backendtest/outputdevice/text.cxx b/vcl/backendtest/outputdevice/text.cxx
new file mode 100644
index 000000000000..5e53d900babd
--- /dev/null
+++ b/vcl/backendtest/outputdevice/text.cxx
@@ -0,0 +1,34 @@
+/* -*- Mode: C++; tab-width: offset; indent-tabs-mode: nil; c-basic-offset: offset -*- */
+/*
+ * 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::test
+{
+Bitmap OutputDeviceTestText::setupTextBitmap()
+{
+ initialSetup(21, 21, constBackgroundColor);
+
+ mpVirtualDevice->SetLineColor(constLineColor);
+ mpVirtualDevice->SetFillColor();
+
+ tools::Long midX = (maVDRectangle.Right() - maVDRectangle.Left()) / 2.0;
+ tools::Long midY = (maVDRectangle.Bottom() - maVDRectangle.Top()) / 2.0;
+
+ vcl::Font Font("DejaVu Sans", "Book", Size(0, 10));
+
+ mpVirtualDevice->Erase();
+ mpVirtualDevice->SetFont(Font);
+ mpVirtualDevice->SetTextColor(COL_LIGHTRED);
+ mpVirtualDevice->DrawText(Point(midX, midY - midY / 2), "I");
+
+ return mpVirtualDevice->GetBitmap(maVDRectangle.TopLeft(), maVDRectangle.GetSize());
+}
+}
\ No newline at end of file
diff --git a/vcl/inc/test/outputdevice.hxx b/vcl/inc/test/outputdevice.hxx
index eceb3dd8f81e..df10da2bbe51 100644
--- a/vcl/inc/test/outputdevice.hxx
+++ b/vcl/inc/test/outputdevice.hxx
@@ -92,6 +92,7 @@ public:
static TestResult checkHalfEllipse(Bitmap& rBitmap, bool aEnableAA = false);
static TestResult checkClosedBezier(Bitmap& rBitmap);
static TestResult checkFilledAsymmetricalDropShape(Bitmap& rBitmap);
+ static TestResult checkTextLocation(Bitmap& rBitmap);
private:
static TestResult checkLineCap(Bitmap& rBitmap, css::drawing::LineCap lineCap);
static TestResult checkLineJoin(Bitmap& rBitmap, basegfx::B2DLineJoin lineJoin);
@@ -260,6 +261,11 @@ public:
static TestResult checkClip(Bitmap& rBitmap);
};
+class VCL_DLLPUBLIC OutputDeviceTestText : public OutputDeviceTestCommon
+{
+public:
+ Bitmap setupTextBitmap();
+};
} // end namespace vcl::test
diff --git a/vcl/qa/cppunit/BackendTest.cxx b/vcl/qa/cppunit/BackendTest.cxx
index 157489731c13..0146d1dabd50 100644
--- a/vcl/qa/cppunit/BackendTest.cxx
+++ b/vcl/qa/cppunit/BackendTest.cxx
@@ -1111,6 +1111,16 @@ public:
#endif
}
+ void testDrawingText()
+ {
+ vcl::test::OutputDeviceTestText aOutDevTest;
+ Bitmap aBitmap = aOutDevTest.setupTextBitmap();
+ auto eResult = vcl::test::OutputDeviceTestCommon::checkTextLocation(aBitmap);
+ exportImage("17-01_test_text_Drawing.png", aBitmap);
+ if (SHOULD_ASSERT)
+ CPPUNIT_ASSERT(eResult != vcl::test::TestResult::Failed);
+ }
+
void testTdf124848()
{
// TODO: This unit test is not executed for macOS unless bitmap scaling is implemented
@@ -1270,6 +1280,8 @@ public:
CPPUNIT_TEST(testDrawBlendExtended);
CPPUNIT_TEST(testDrawAlphaBitmapMirrored);
+ CPPUNIT_TEST(testDrawingText);
+
CPPUNIT_TEST(testTdf124848);
CPPUNIT_TEST(testTdf136171);
More information about the Libreoffice-commits
mailing list