summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui/painting/qpageranges/tst_qpageranges.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/gui/painting/qpageranges/tst_qpageranges.cpp')
-rw-r--r--tests/auto/gui/painting/qpageranges/tst_qpageranges.cpp158
1 files changed, 158 insertions, 0 deletions
diff --git a/tests/auto/gui/painting/qpageranges/tst_qpageranges.cpp b/tests/auto/gui/painting/qpageranges/tst_qpageranges.cpp
new file mode 100644
index 0000000000..d2dbf990e3
--- /dev/null
+++ b/tests/auto/gui/painting/qpageranges/tst_qpageranges.cpp
@@ -0,0 +1,158 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+#include <qpageranges.h>
+
+typedef QList<QPageRanges::Range> PageRangeList;
+
+class tst_QPageRanges : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void basics();
+
+ void addPage_data();
+ void addPage();
+
+ void addRange_data();
+ void addRange();
+
+ void fromToString_data();
+ void fromToString();
+};
+
+void tst_QPageRanges::basics()
+{
+ QPageRanges empty;
+ QVERIFY(empty.isEmpty());
+ QVERIFY(!empty.contains(0));
+ QCOMPARE(empty.firstPage(), 0);
+ QCOMPARE(empty.lastPage(), 0);
+
+ QPageRanges single;
+ single.addPage(1);
+
+ QVERIFY(!single.isEmpty());
+ QVERIFY(single.contains(1));
+ QCOMPARE(single.firstPage(), 1);
+ QCOMPARE(single.firstPage(), 1);
+
+ QPageRanges copy(single);
+ QCOMPARE(copy, single);
+
+ QPageRanges moved(std::move(copy));
+ QCOMPARE(moved, single);
+ QVERIFY(copy.isEmpty());
+
+ single.clear();
+ QVERIFY(single.isEmpty());
+ QVERIFY(!moved.isEmpty());
+}
+
+void tst_QPageRanges::addPage_data()
+{
+ QTest::addColumn<QList<int>>("pageNumbers");
+ QTest::addColumn<PageRangeList>("expected");
+
+ QTest::newRow("single") << QList<int>{5} << PageRangeList{{5, 5}};
+ QTest::newRow("duplicate") << QList<int>{5, 5} << PageRangeList{{5, 5}};
+ QTest::newRow("adjacent") << QList<int>{5, 6, 7} << PageRangeList{{5, 7}};
+ QTest::newRow("separate") << QList<int>{1, 3, 5} << PageRangeList{{1, 1}, {3, 3}, {5, 5}};
+ QTest::newRow("unsorted") << QList<int>{5, 3, 4, 1} << PageRangeList{{1, 1}, {3, 5}};
+ QTest::newRow("invalid") << QList<int>{-1} << PageRangeList{};
+}
+
+void tst_QPageRanges::addPage()
+{
+ QFETCH(QList<int>, pageNumbers);
+ QFETCH(PageRangeList, expected);
+
+ QPageRanges result;
+ for (int pageNumber : std::as_const(pageNumbers)) {
+ if (QByteArrayView(QTest::currentDataTag()) == "invalid")
+ QTest::ignoreMessage(QtWarningMsg, "QPageRanges::addPage: 'pageNumber' must be greater than 0");
+ result.addPage(pageNumber);
+ }
+
+ QCOMPARE(result.toRangeList(), expected);
+}
+
+void tst_QPageRanges::addRange_data()
+{
+ QTest::addColumn<PageRangeList>("ranges");
+ QTest::addColumn<PageRangeList>("expected");
+
+ QTest::newRow("single") << PageRangeList{{5, 5}}
+ << PageRangeList{{5, 5}};
+ QTest::newRow("duplicate") << PageRangeList{{5, 5}, {5, 5}}
+ << PageRangeList{{5, 5}};
+ QTest::newRow("adjacent") << PageRangeList{{1, 3}, {4, 6}, {7, 10}}
+ << PageRangeList{{1, 10}};
+ QTest::newRow("separate") << PageRangeList{{1, 2}, {4, 5}, {7, 8}}
+ << PageRangeList{{1, 2}, {4, 5}, {7, 8}};
+ QTest::newRow("overlap") << PageRangeList{{1, 5}, {4, 8}, {8, 10}}
+ << PageRangeList{{1, 10}};
+ QTest::newRow("included") << PageRangeList{{1, 5}, {2, 3}, {8, 9}, {7, 10}}
+ << PageRangeList{{1, 5}, {7, 10}};
+ QTest::newRow("unsorted") << PageRangeList{{7, 8}, {1, 4}, {9, 10}}
+ << PageRangeList{{1, 4}, {7, 10}};
+ QTest::newRow("flipped") << PageRangeList{{5, 1}}
+ << PageRangeList{{1, 5}};
+ QTest::newRow("invalid1") << PageRangeList{{-1, 2}}
+ << PageRangeList{};
+ QTest::newRow("invalid2") << PageRangeList{{0, -1}}
+ << PageRangeList{};
+}
+
+void tst_QPageRanges::addRange()
+{
+ QFETCH(PageRangeList, ranges);
+ QFETCH(PageRangeList, expected);
+
+ QPageRanges result;
+ for (const auto &range : std::as_const(ranges)) {
+ const QByteArrayView testdata(QTest::currentDataTag());
+ if (testdata.startsWith("invalid"))
+ QTest::ignoreMessage(QtWarningMsg, "QPageRanges::addRange: 'from' and 'to' must be greater than 0");
+
+ result.addRange(range.from, range.to);
+ }
+
+ QCOMPARE(result.toRangeList(), expected);
+}
+
+void tst_QPageRanges::fromToString_data()
+{
+ QTest::addColumn<QString>("fromString");
+ QTest::addColumn<PageRangeList>("rangeList");
+ QTest::addColumn<QString>("toString");
+
+ QTest::newRow("invalid") << QString(",-8")
+ << PageRangeList{}
+ << QString();
+
+ QTest::newRow("overlapping") << QString("1-3,5-9,6-7,8-11")
+ << PageRangeList{{1, 3}, {5, 11}}
+ << QString("1-3,5-11");
+
+ QTest::newRow("spacy") << QString("1 -2, 3- 4 ,\t5-6\t,7 - 8 ,\n9 - 10")
+ << PageRangeList{{1, 10}}
+ << QString("1-10");
+}
+
+void tst_QPageRanges::fromToString()
+{
+ QFETCH(QString, fromString);
+ QFETCH(PageRangeList, rangeList);
+ QFETCH(QString, toString);
+
+ QPageRanges ranges = QPageRanges::fromString(fromString);
+ QCOMPARE(ranges.toRangeList(), rangeList);
+ QCOMPARE(ranges.toString(), toString);
+}
+
+QTEST_APPLESS_MAIN(tst_QPageRanges)
+
+#include "tst_qpageranges.moc"