summaryrefslogtreecommitdiffstats
path: root/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp')
-rw-r--r--tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp473
1 files changed, 0 insertions, 473 deletions
diff --git a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
deleted file mode 100644
index bf22e44ed..000000000
--- a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
+++ /dev/null
@@ -1,473 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <QProcess>
-#include <QTemporaryDir>
-#include <QDirIterator>
-#include <QtTest>
-
-class tst_generatedOutput : public QObject
-{
- Q_OBJECT
-
-public:
- void setRegenerate() { m_regen = true; }
-
-private slots:
- void initTestCase();
- void init();
-
- // HTML generator
- void htmlFromQDocFile();
- void htmlFromCpp();
- void htmlFromQml();
- void htmlFromCppBug80259();
-
- // WebXML generator
- void webXmlFromQDocFile();
- void webXmlFromCpp();
- void webXmlFromQml();
- void webXmlFromCppBug80259();
-
- // DocBook generator
- void docBookFromQDocFile();
- void docBookFromCpp();
- void docBookFromQml();
-
- // Output format independent tests
- void autoNavigation();
- void examplesManifestXmlAndQhp();
- void ignoresinceVariable();
- void templateParameters();
- void scopedEnum();
- void dontDocument();
- void inheritedQmlPropertyGroups();
- void crossModuleLinking();
- void includeFromExampleDirs();
- void singleExec();
- void preparePhase();
- void generatePhase();
- void noAutoList();
- void nestedMacro();
- void headerFile();
- void usingDirective();
-
-private:
- QScopedPointer<QTemporaryDir> m_outputDir;
- QString m_qdoc;
- QDir m_expectedDir;
- bool m_regen = false;
-
- void runQDocProcess(const QStringList &arguments);
- void compareLineByLine(const QStringList &expectedFiles);
- void testAndCompare(const char *input, const char *outNames, const char *extraParams = nullptr,
- const char *outputPathPrefix = nullptr);
- void copyIndexFiles();
-};
-
-void tst_generatedOutput::initTestCase()
-{
- // Build the path to the QDoc binary the same way moc tests do for moc.
- const auto binpath = QLibraryInfo::path(QLibraryInfo::BinariesPath);
- const auto extension = QSysInfo::productType() == "windows" ? ".exe" : "";
- m_qdoc = binpath + QLatin1String("/qdoc") + extension;
- m_expectedDir.setPath(QFINDTESTDATA(".") + QLatin1String("/expected_output"));
-}
-
-void tst_generatedOutput::init()
-{
- m_outputDir.reset(new QTemporaryDir());
- if (!m_outputDir->isValid()) {
- const QString errorMessage =
- "Couldn't create temporary directory: " + m_outputDir->errorString();
- QFAIL(qPrintable(errorMessage));
- }
-}
-
-void tst_generatedOutput::runQDocProcess(const QStringList &arguments)
-{
- QProcess qdocProcess;
- qdocProcess.setProgram(m_qdoc);
- qdocProcess.setArguments(arguments);
- qdocProcess.start();
- qdocProcess.waitForFinished();
-
- if (qdocProcess.exitCode() == 0)
- return;
-
- QString output = qdocProcess.readAllStandardOutput();
- QString errors = qdocProcess.readAllStandardError();
-
- qInfo() << "QDoc exited with exit code" << qdocProcess.exitCode();
- if (output.size() > 0)
- qInfo() << "Received output:\n" << output;
- if (errors.size() > 0)
- qInfo() << "Received errors:\n" << errors;
-
- QFAIL("Running QDoc failed. See output above.");
-}
-
-void tst_generatedOutput::compareLineByLine(const QStringList &expectedFiles)
-{
- for (const auto &file : expectedFiles) {
- QString expected(m_expectedDir.filePath(file));
- QString actual(m_outputDir->filePath(file));
-
- QFile expectedFile(expected);
- if (!expectedFile.open(QIODevice::ReadOnly))
- QFAIL("Cannot open expected data file!");
- QTextStream expectedIn(&expectedFile);
-
- QFile actualFile(actual);
- if (!actualFile.open(QIODevice::ReadOnly))
- QFAIL("Cannot open actual data file!");
- QTextStream actualIn(&actualFile);
-
- const QLatin1String delim(": ");
- int lineNumber = 0;
- while (!expectedIn.atEnd() && !actualIn.atEnd()) {
- lineNumber++;
- QString prefix = file + delim + QString::number(lineNumber) + delim;
- QString expectedLine = prefix + expectedIn.readLine();
- QString actualLine = prefix + actualIn.readLine();
- QCOMPARE(actualLine, expectedLine);
- }
- }
-}
-
-void tst_generatedOutput::testAndCompare(const char *input, const char *outNames,
- const char *extraParams, const char *outputPathPrefix)
-{
- QStringList args { "-outputdir", m_outputDir->path() + "/" + outputPathPrefix,
- QFINDTESTDATA(input) };
- if (extraParams)
- args << QString(QLatin1String(extraParams)).split(QChar(' '));
-
- runQDocProcess(args);
-
- if (QTest::currentTestFailed())
- return;
-
- QStringList expectedOuts(QString(QLatin1String(outNames)).split(QChar(' ')));
- if (outputPathPrefix)
- for (auto &expectedOut : expectedOuts)
- expectedOut = QString(outputPathPrefix) + "/" + expectedOut;
-
- if (m_regen) {
- QVERIFY(m_expectedDir.mkpath(m_expectedDir.path()));
- for (const auto &file : qAsConst(expectedOuts)) {
- QFileInfo fileInfo(m_expectedDir.filePath(file));
- fileInfo.dir().remove(fileInfo.fileName()); // Allowed to fail
- QVERIFY(m_expectedDir.mkpath(fileInfo.dir().path()));
- QVERIFY(QFile::copy(m_outputDir->filePath(file),
- fileInfo.filePath()));
- }
- QSKIP("Regenerated expected output only.");
- return;
- }
-
- compareLineByLine(expectedOuts);
-}
-
-// Copy <project>.index to <project>/<project>.index in the outputdir
-void tst_generatedOutput::copyIndexFiles()
-{
- QDirIterator it(m_outputDir->path(), QStringList("*.index"), QDir::Files, QDirIterator::Subdirectories);
- while (it.hasNext()) {
- QFileInfo fileInfo(it.next());
- QDir indexDir(m_outputDir->path());
- QVERIFY(indexDir.mkpath(fileInfo.baseName()));
- QVERIFY(indexDir.cd(fileInfo.baseName()));
- if (!indexDir.exists(fileInfo.fileName()))
- QVERIFY(QFile::copy(fileInfo.filePath(), indexDir.filePath(fileInfo.fileName())));
- }
-}
-
-void tst_generatedOutput::htmlFromQDocFile()
-{
- testAndCompare("testdata/configs/test.qdocconf",
- "qdoctests-qdocfileoutput.html "
- "qdoctests-qdocfileoutput-linking.html "
- "qdoctests-qdocfileoutput-exhaustive.html "
- "toc.html");
-}
-
-void tst_generatedOutput::htmlFromCpp()
-{
- testAndCompare("testdata/configs/testcpp.qdocconf",
- "testcpp-module.html "
- "testqdoc-test.html "
- "testqdoc-test-members.html "
- "testqdoc-testderived.html "
- "testqdoc-testderived-members.html "
- "testqdoc.html");
-}
-
-void tst_generatedOutput::htmlFromQml()
-{
- testAndCompare("testdata/configs/testqml.qdocconf",
- "test-componentset-example.html "
- "test-cmaketest-example.html "
- "uicomponents-qmlmodule.html "
- "qdoc-test-qmlmodule.html "
- "qml-qdoc-test-abstractparent.html "
- "qml-qdoc-test-child.html "
- "qml-qdoc-test-yetanotherchild.html "
- "qml-qdoc-test-doctest.html "
- "qml-qdoc-test-type-members.html "
- "qml-qdoc-test-type.html "
- "qml-uicomponents-progressbar.html "
- "qml-uicomponents-switch.html "
- "qml-uicomponents-tabwidget.html "
- "qml-int.html");
-}
-
-void tst_generatedOutput::htmlFromCppBug80259()
-{
- testAndCompare("testdata/bug80259/testmodule.qdocconf",
- "first.html "
- "second.html "
- "third.html "
- "index.html");
-}
-
-void tst_generatedOutput::webXmlFromQDocFile()
-{
- testAndCompare("testdata/configs/webxml_test.qdocconf",
- "html/qdoctests-qdocfileoutput.webxml "
- "html/qdoctests-qdocfileoutput-linking.webxml "
- "html/qdoctests-qdocfileoutput-exhaustive.webxml");
-}
-
-void tst_generatedOutput::webXmlFromCpp()
-{
- testAndCompare("testdata/configs/webxml_testcpp.qdocconf",
- "html/testcpp-module.webxml "
- "html/testqdoc-test.webxml "
- "html/testqdoc-testderived.webxml");
-}
-
-void tst_generatedOutput::webXmlFromQml()
-{
- testAndCompare("testdata/configs/webxml_testqml.qdocconf",
- "html/test-componentset-example.webxml "
- "html/uicomponents-qmlmodule.webxml");
-}
-
-void tst_generatedOutput::webXmlFromCppBug80259()
-{
- testAndCompare("testdata/bug80259/webxml_testmodule.qdocconf",
- "html/first.webxml "
- "html/second.webxml "
- "html/third.webxml "
- "html/index.webxml");
-}
-
-void tst_generatedOutput::docBookFromQDocFile()
-{
- testAndCompare("testdata/configs/docbook_test.qdocconf",
- "docbook/qdoctests-qdocfileoutput.xml "
- "docbook/qdoctests-qdocfileoutput-linking.xml "
- "docbook/qdoctests-qdocfileoutput-exhaustive.xml");
-}
-
-void tst_generatedOutput::docBookFromCpp()
-{
- testAndCompare("testdata/configs/docbook_testcpp.qdocconf",
- "docbook/testcpp-module.xml "
- "docbook/testqdoc-test.xml "
- "docbook/testqdoc-testderived.xml "
- "docbook/testqdoc.xml");
-}
-
-void tst_generatedOutput::docBookFromQml()
-{
- testAndCompare("testdata/configs/docbook_testqml.qdocconf",
- "docbook/test-componentset-example.xml "
- "docbook/uicomponents-qmlmodule.xml "
- "docbook/qdoc-test-qmlmodule.xml "
- "docbook/qml-qdoc-test-abstractparent.xml "
- "docbook/qml-qdoc-test-child.xml "
- "docbook/qml-qdoc-test-yetanotherchild.xml "
- "docbook/qml-qdoc-test-doctest.xml "
- "docbook/qml-qdoc-test-type.xml "
- "docbook/qml-uicomponents-progressbar.xml "
- "docbook/qml-uicomponents-switch.xml "
- "docbook/qml-uicomponents-tabwidget.xml "
- "docbook/qml-int.xml");
-}
-
-void tst_generatedOutput::autoNavigation()
-{
- // Same expected files as htmlFromQdocFile, but with auto-generated navigation links
- testAndCompare("testdata/configs/tocnavigation.qdocconf",
- "qdoctests-qdocfileoutput.html "
- "qdoctests-qdocfileoutput-linking.html "
- "qdoctests-qdocfileoutput-exhaustive.html "
- "toc.html");
-}
-
-void tst_generatedOutput::examplesManifestXmlAndQhp()
-{
- testAndCompare("testdata/configs/examples-qhp.qdocconf",
- "examples-manifest.xml "
- "demos-manifest.xml "
- "test.qhp");
-}
-
-void tst_generatedOutput::ignoresinceVariable()
-{
- testAndCompare("testdata/configs/ignoresince.qdocconf",
- "ignoresince/testqdoc.html "
- "ignoresince/testqdoc-test.html");
-}
-
-void tst_generatedOutput::templateParameters()
-{
- testAndCompare("testdata/configs/testtemplate.qdocconf",
- "template/testqdoc-test.html "
- "template/testqdoc-test-struct.html "
- "template/foo.html "
- "template/bar.html "
- "template/baz.html");
-}
-
-void tst_generatedOutput::scopedEnum()
-{
- testAndCompare("testdata/configs/scopedenum.qdocconf",
- "scopedenum/testqdoc-test.html "
- "scopedenum-docbook/testqdoc-test.xml");
-}
-
-void tst_generatedOutput::dontDocument()
-{
- testAndCompare("testdata/dontdocument/dontdocument.qdocconf",
- "dontdocument/classes.html "
- "dontdocument/seenclass.html "
- "dontdocument/dontdocument.qhp");
-}
-
-void tst_generatedOutput::inheritedQmlPropertyGroups()
-{
- testAndCompare("testdata/qmlpropertygroups/qmlpropertygroups.qdocconf",
- "qmlpropertygroups/qml-qdoc-test-anotherchild-members.html "
- "qmlpropertygroups/qml-qdoc-test-parent.html "
- "qmlpropertygroups-docbook/qml-qdoc-test-parent.xml");
-}
-
-void tst_generatedOutput::crossModuleLinking()
-{
- htmlFromCpp();
- copyIndexFiles();
- QString indexDir = QLatin1String("-indexdir ") + m_outputDir->path();
- testAndCompare("testdata/crossmodule/crossmodule.qdocconf",
- "crossmodule/testtype.html "
- "crossmodule/testtype-members.html",
- indexDir.toLatin1().data());
-}
-
-void tst_generatedOutput::includeFromExampleDirs()
-{
- testAndCompare("testdata/includefromexampledirs/includefromexampledirs.qdocconf",
- "includefromexampledirs/index.html "
- "includefromexampledirs/qml-qdoc-test-abstractparent.html "
- "includefromexampledirs/qml-qdoc-test-abstractparent-members.html");
-}
-
-void tst_generatedOutput::singleExec()
-{
- // Build both testcpp and crossmodule projects in single-exec mode
- testAndCompare("testdata/singleexec/singleexec.qdocconf",
- "testcpp-module.html "
- "testqdoc-test.html "
- "testqdoc-test-members.html "
- "testqdoc.html "
- "crossmodule/testtype.html "
- "crossmodule/testtype-members.html",
- "-single-exec");
-}
-
-void tst_generatedOutput::preparePhase()
-{
- testAndCompare("testdata/configs/testcpp.qdocconf",
- "testcpp.index",
- "-prepare");
-}
-
-void tst_generatedOutput::generatePhase()
-{
- testAndCompare("testdata/configs/testcpp.qdocconf",
- "testcpp-module.html "
- "testqdoc-test.html "
- "testqdoc-test-members.html "
- "testqdoc.html",
- "-generate");
-}
-
-void tst_generatedOutput::noAutoList()
-{
- testAndCompare("testdata/configs/noautolist.qdocconf",
- "noautolist/testcpp-module.html "
- "noautolist/test-componentset-example.html "
- "noautolist/qdoc-test-qmlmodule.html "
- "noautolist-docbook/testcpp-module.xml "
- "noautolist-docbook/test-componentset-example.xml "
- "noautolist-docbook/qdoc-test-qmlmodule.xml");
-}
-
-void tst_generatedOutput::nestedMacro()
-{
- testAndCompare("testdata/configs/nestedmacro.qdocconf",
- "nestedmacro/testcpp-module.html");
-}
-
-void tst_generatedOutput::headerFile()
-{
- testAndCompare("testdata/configs/headerfile.qdocconf",
- "headerfile/testheader.html "
- "headerfile/headers.html "
- "headerfile-docbook/testheader.xml "
- "headerfile-docbook/headers.xml");
-}
-
-void tst_generatedOutput::usingDirective()
-{
- testAndCompare("testdata/configs/usingdirective.qdocconf", "space.html");
-}
-
-int main(int argc, char *argv[])
-{
- tst_generatedOutput tc;
- // Re-populate expected data and skip tests if option -regenerate is set
- if (argc == 2 && QByteArray(argv[1]) == "-regenerate") {
- tc.setRegenerate();
- --argc;
- }
- return QTest::qExec(&tc, argc, argv);
-}
-
-#include "tst_generatedoutput.moc"