From dd1f5aa68a133d4498f23ac0f23add1c0e73da04 Mon Sep 17 00:00:00 2001
From: Denis Gofman <denis@vikingsoftware.com>
Date: Fri, 2 Feb 2024 11:43:05 +0100
Subject: [PATCH] Unit test for topohelp::geom::polygon

---
 .../topohelper/geometry/tst_polygon.cpp       | 49 +++++++++++++++++--
 1 file changed, 46 insertions(+), 3 deletions(-)

diff --git a/tests/unittests/topohelper/geometry/tst_polygon.cpp b/tests/unittests/topohelper/geometry/tst_polygon.cpp
index 869da9b365..a9b5229a93 100644
--- a/tests/unittests/topohelper/geometry/tst_polygon.cpp
+++ b/tests/unittests/topohelper/geometry/tst_polygon.cpp
@@ -30,13 +30,56 @@ class TestPolygon : public QObject
 private slots:
     void testPolygon_data()
     {
-        QSKIP("Not implemented yet");
+        QTest::addColumn<QVector<qint32>>("coordinates");
+        QTest::addColumn<PointsList>("expectedResult");
+
+        auto fillPoints = [](int count) {
+            PointsList points;
+            constexpr int step = 10;
+
+            int counter = 0;
+            for (int i = 0; i < count; ++i) {
+                points << QPointF(counter, counter + step);
+                counter += 2 * step;
+            }
+            return points;
+        };
+
+        constexpr int MaxPointCount = 10;
+
+        for (int i = 0; i < MaxPointCount; ++i) {
+            const QString &validCaseName = QString("ValidPoints%1").arg(i);
+
+            const PointsList &validPoints = fillPoints(i);
+            QVector<qint32> validNumbers;
+
+            for (const auto &pointF : validPoints) {
+                const QPoint &point = pointF.toPoint();
+                validNumbers << point.x() << point.y();
+            }
+
+            QTest::newRow(validCaseName.toUtf8().data()) << validNumbers << validPoints;
+
+#ifdef QT_NO_DEBUG
+            const QString &invalidCaseName = QString("InvalidPoints%1").arg(i);
+            QVector<qint32> invalidNumbers(validNumbers);
+            if (!invalidNumbers.isEmpty()) {
+                invalidNumbers.takeLast();
+            }
+
+            QTest::newRow(invalidCaseName.toUtf8().data()) << invalidNumbers << PointsList();
+#endif
+        }
     }
 
     void testPolygon()
     {
-        QSKIP("Not implemented yet");
-        // const auto &actualResult = polygon(replaceMe);
+        QFETCH(QVector<qint32>, coordinates);
+        QFETCH(PointsList, expectedResult);
+
+        const auto &actualResult = polygon(coordinates);
+
+        QCOMPARE(actualResult, expectedResult);
     }
 };
 
-- 
GitLab