aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/tests/qtxmltosphinxtest/qtxmltosphinxtest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken6/tests/qtxmltosphinxtest/qtxmltosphinxtest.cpp')
-rw-r--r--sources/shiboken6/tests/qtxmltosphinxtest/qtxmltosphinxtest.cpp511
1 files changed, 511 insertions, 0 deletions
diff --git a/sources/shiboken6/tests/qtxmltosphinxtest/qtxmltosphinxtest.cpp b/sources/shiboken6/tests/qtxmltosphinxtest/qtxmltosphinxtest.cpp
new file mode 100644
index 000000000..45cecd1a1
--- /dev/null
+++ b/sources/shiboken6/tests/qtxmltosphinxtest/qtxmltosphinxtest.cpp
@@ -0,0 +1,511 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "qtxmltosphinxtest.h"
+#include "qtxmltosphinx.h"
+#include <QtTest/QTest>
+
+#include <QtCore/QBuffer>
+#include <QtCore/QDebug>
+#include <QtCore/QLoggingCategory>
+
+using namespace Qt::StringLiterals;
+
+Q_LOGGING_CATEGORY(lcQtXmlToSphinxTest, "qt.sphinxtabletest");
+
+// QtXmlToSphinxDocGeneratorInterface
+QString QtXmlToSphinxTest::expandFunction(const QString &) const
+{
+ return {};
+}
+
+QString QtXmlToSphinxTest::expandClass(const QString &, const QString &) const
+{
+ return {};
+}
+
+QString QtXmlToSphinxTest::resolveContextForMethod(const QString &, const QString &) const
+{
+ return {};
+}
+
+const QLoggingCategory &QtXmlToSphinxTest::loggingCategory() const
+{
+ return lcQtXmlToSphinxTest();
+}
+
+QtXmlToSphinxLink QtXmlToSphinxTest::resolveLink(const QtXmlToSphinxLink &link) const
+{
+ return link;
+}
+
+QString QtXmlToSphinxTest::transformXml(const QString &xml) const
+{
+ return QtXmlToSphinx(this, m_parameters, xml).result();
+}
+
+void QtXmlToSphinxTest::testTable_data()
+{
+ QTest::addColumn<QString>("xml");
+ QTest::addColumn<QString>("expected");
+
+ QTest::newRow("emptyString") << QString() << QString();
+
+ // testSimpleTable
+ const char *xml = R"(<table>
+ <header>
+ <item>
+ <para>Header 1</para>
+ </item>
+ <item>
+ <para>Header 2</para>
+ </item>
+ </header>
+ <row>
+ <item>
+ <para>1 1</para>
+ </item>
+ <item>
+ <para>1 2</para>
+ </item>
+ </row>
+ <row>
+ <item>
+ <para>2 1</para>
+ </item>
+ <item>
+ <para>2 2</para>
+ </item>
+ </row>
+</table>)";
+
+ const char *expected = R"(
+ +--------+--------+
+ |Header 1|Header 2|
+ +========+========+
+ |1 1 |1 2 |
+ +--------+--------+
+ |2 1 |2 2 |
+ +--------+--------+
+
+)";
+
+ QTest::newRow("testSimpleTable")
+ << QString::fromLatin1(xml) << QString::fromLatin1(expected);
+
+ // testRowSpan
+ xml = R"(<table>
+ <header>
+ <item>
+ <para>Header 1</para>
+ </item>
+ <item>
+ <para>Header 2</para>
+ </item>
+ </header>
+ <row>
+ <item colspan="2">
+ <para>I'm a big text!</para>
+ </item>
+ </row>
+ <row>
+ <item>
+ <para>2 1</para>
+ </item>
+ <item>
+ <para>2 2</para>
+ </item>
+ </row>
+</table>)";
+
+ expected = R"(
+ +---------------+--------+
+ |Header 1 |Header 2|
+ +===============+========+
+ |I'm a big text! |
+ +---------------+--------+
+ |2 1 |2 2 |
+ +---------------+--------+
+
+)";
+
+ QTest::newRow("testColSpan")
+ << QString::fromLatin1(xml) << QString::fromLatin1(expected);
+
+ // testRowSpan
+ xml = R"(<table>
+ <header>
+ <item>
+ <para>Header 1</para>
+ </item>
+ <item>
+ <para>Header 2</para>
+ </item>
+ </header>
+ <row>
+ <item rowspan="2">
+ <para>1.1</para>
+ </item>
+ <item>
+ <para>1.2</para>
+ </item>
+ </row>
+ <row>
+ <item>
+ <para>2 2</para>
+ </item>
+ </row>
+</table>)";
+
+ expected = R"(
+ +--------+--------+
+ |Header 1|Header 2|
+ +========+========+
+ |1.1 |1.2 |
+ + +--------+
+ | |2 2 |
+ +--------+--------+
+
+)";
+
+ QTest::newRow("testRowSpan")
+ << QString::fromLatin1(xml) << QString::fromLatin1(expected);
+
+ // testComplexTable
+ xml = R"(<table>
+ <header>
+ <item>
+ <para>Header 1</para>
+ </item>
+ <item>
+ <para>Header 2</para>
+ </item>
+ <item>
+ <para>Header 3</para>
+ </item>
+ </header>
+ <row>
+ <item rowspan="2">
+ <para>1.1</para>
+ </item>
+ <item colspan="2">
+ <para>1.2</para>
+ </item>
+ </row>
+ <row>
+ <item>
+ <para>2 2</para>
+ </item>
+ <item>
+ <para>2 3</para>
+ </item>
+ </row>
+</table>)";
+
+ expected = R"(
+ +--------+--------+--------+
+ |Header 1|Header 2|Header 3|
+ +========+========+========+
+ |1.1 |1.2 |
+ + +--------+--------+
+ | |2 2 |2 3 |
+ +--------+--------+--------+
+
+)";
+
+ QTest::newRow("testComplexTable")
+ << QString::fromLatin1(xml) << QString::fromLatin1(expected);
+
+ // testRowSpan2
+ xml = R"(<table>
+ <header>
+ <item><para>h1</para></item>
+ <item><para>h2</para></item>
+ <item><para>h3</para></item>
+ <item><para>h4</para></item>
+ </header>
+ <row>
+ <item rowspan="6"><para>A</para></item>
+ <item rowspan="6"><para>B</para></item>
+ <item><para>C</para></item>
+ <item><para>D</para></item>
+ </row>
+ <row>
+ <item><para>E</para></item>
+ <item><para>F</para></item>
+ </row>
+ <row>
+ <item><para>E</para></item>
+ <item><para>F</para></item>
+ </row>
+ <row>
+ <item><para>E</para></item>
+ <item><para>F</para></item>
+ </row>
+ <row>
+ <item><para>E</para></item>
+ <item><para>F</para></item>
+ </row>
+ <row>
+ <item><para>E</para></item>
+ <item><para>F</para></item>
+ </row>
+</table>)";
+
+ expected = R"(
+ +--+--+--+--+
+ |h1|h2|h3|h4|
+ +==+==+==+==+
+ |A |B |C |D |
+ + + +--+--+
+ | | |E |F |
+ + + +--+--+
+ | | |E |F |
+ + + +--+--+
+ | | |E |F |
+ + + +--+--+
+ | | |E |F |
+ + + +--+--+
+ | | |E |F |
+ +--+--+--+--+
+
+)";
+
+ QTest::newRow("testRowSpan2")
+ << QString::fromLatin1(xml) << QString::fromLatin1(expected);
+
+ // testNestedList
+ xml = R"(<table>
+ <row>
+ <item>
+ <list type="bullet">
+ <item>
+ <para>I11</para>
+ </item>
+ <item>
+ <para>I21</para>
+ </item>
+ </list>
+ </item>
+ <item>
+ <list type="bullet">
+ <item>
+ <para>I12</para>
+ </item>
+ <item>
+ <para>I22</para>
+ </item>
+ </list>
+ </item>
+ </row>
+</table>)";
+
+ expected = R"(
+ +---------+---------+
+ | * I11| * I12|
+ | * I21| * I22|
+ +---------+---------+
+
+)";
+
+ QTest::newRow("testNestedList")
+ << QString::fromLatin1(xml) << QString::fromLatin1(expected);
+
+ // testBrokenTable
+ xml = R"(<table>
+ <header>
+ <item>
+ <para>Header 1</para>
+ </item>
+ <item>
+ <para>Header 2</para>
+ </item>
+ </header>
+ <row>
+ <item>
+ <para>1.1</para>
+ </item>
+ <item>
+ <para>1.2</para>
+ </item>
+ </row>
+ <row>
+ <item colspan="2">
+ <para>2 2</para>
+ </item>
+ <item>
+ <para>2 3</para>
+ </item>
+ <item>
+ <para>2 4</para>
+ </item>
+ <item>
+ <para>2 5</para>
+ </item>
+ </row>
+ <row>
+ <item>
+ <para>3 1</para>
+ </item>
+ <item>
+ <para>3 2</para>
+ </item>
+ <item>
+ <para>3 3</para>
+ </item>
+ </row>
+</table>)";
+
+ expected = R"(
+ +--------+------------+
+ |Header 1|Header 2 |
+ +========+============+
+ |1.1 |1.2 |
+ +--------+------------+
+ |2 2 2 3 2 4 2 5|
+ +--------+------------+
+ |3 1 |3 2 3 3 |
+ +--------+------------+
+
+)";
+
+ QTest::newRow("testBrokenTable")
+ << QString::fromLatin1(xml) << QString::fromLatin1(expected);
+}
+
+void QtXmlToSphinxTest::testTable()
+{
+ QFETCH(QString, xml);
+ QFETCH(QString, expected);
+
+ const QString actual = transformXml(xml);
+
+ QEXPECT_FAIL("testBrokenTable", "testBrokenTable fails", Continue);
+ QCOMPARE(actual, expected);
+}
+
+using TablePtr = std::shared_ptr<QtXmlToSphinx::Table>;
+
+Q_DECLARE_METATYPE(TablePtr);
+
+void QtXmlToSphinxTest::testTableFormatting_data()
+{
+ using TableCell = QtXmlToSphinx::TableCell;
+
+ QTest::addColumn<TablePtr>("table");
+ QTest::addColumn<QString>("expected");
+
+ TablePtr table(new QtXmlToSphinx::Table);
+ table->appendRow({TableCell("item11"), TableCell("item12")});
+ table->appendRow({TableCell(""), TableCell("item22")});
+ table->normalize();
+
+ const char *expected = R"(+------+------+
+|item11|item12|
++------+------+
+| |item22|
++------+------+
+
+)";
+
+ QTest::newRow("normal") << table << QString::fromLatin1(expected);
+
+ table.reset(new QtXmlToSphinx::Table);
+ table->appendRow({TableCell("item11"), TableCell("item12\nline2")});
+ table->appendRow({TableCell(""), TableCell("item22\nline2\nline3")});
+ table->normalize();
+
+ expected = R"(+------+------+
+|item11|item12|
+| |line2 |
++------+------+
+| |item22|
+| |line2 |
+| |line3 |
++------+------+
+
+)";
+
+ QTest::newRow("multi-line") << table << QString::fromLatin1(expected);
+}
+
+void QtXmlToSphinxTest::testTableFormatting()
+{
+ QFETCH(TablePtr, table);
+ QFETCH(QString, expected);
+
+ StringStream str;
+ table->format(str);
+ const QString actual = str.toString();
+
+ QCOMPARE(actual, expected);
+}
+
+void QtXmlToSphinxTest::testTableFormattingIoDevice_data()
+{
+ testTableFormatting_data();
+}
+
+void QtXmlToSphinxTest::testTableFormattingIoDevice()
+{
+ QFETCH(TablePtr, table);
+ QFETCH(QString, expected);
+
+ QByteArray byteArray;
+ {
+ TextStream str(&byteArray);
+ table->format(str);
+ }
+ const QString actual = QString::fromUtf8(byteArray);
+
+ QCOMPARE(actual, expected);
+}
+
+void QtXmlToSphinxTest::testSnippetExtraction_data()
+{
+ QTest::addColumn<QByteArray>("file");
+ QTest::addColumn<QLatin1StringView>("id");
+ QTest::addColumn<QString>("expected");
+
+ const char *fileCpp = R"(bla
+// ![snip1]
+snip1_line1
+// ![snip1] // ![snip2]
+snip2_line1
+snip2_line2
+// ![snip2] // ![snip3]
+)";
+
+ constexpr auto id = "snip2"_L1;
+ const QString expected = uR"(snip2_line1
+snip2_line2
+)"_s;
+
+ const char *filePython = R"(bla
+# ![snip1]
+snip1_line1
+# ![snip1] # ![snip2]
+snip2_line1
+snip2_line2
+# ![snip2] # ![snip3]
+)";
+
+ QTest::newRow("c++") << QByteArray(fileCpp) << id << expected;
+ QTest::newRow("Python") << QByteArray(filePython) << id << expected;
+}
+
+void QtXmlToSphinxTest::testSnippetExtraction()
+{
+ QFETCH(QByteArray, file);
+ QFETCH(QLatin1StringView, id);
+ QFETCH(QString, expected);
+
+ QBuffer buffer(&file);
+ QVERIFY(buffer.open(QIODevice::ReadOnly));
+ QString errorMessage;
+ QString actual = QtXmlToSphinx::readSnippet(buffer, id, &errorMessage);
+ QVERIFY2(errorMessage.isEmpty(), qPrintable(errorMessage));
+ QCOMPARE(actual, expected);
+}
+
+QTEST_APPLESS_MAIN( QtXmlToSphinxTest)