diff options
Diffstat (limited to 'src/qdoc/qdoc/tests/config/tst_config.cpp')
-rw-r--r-- | src/qdoc/qdoc/tests/config/tst_config.cpp | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/src/qdoc/qdoc/tests/config/tst_config.cpp b/src/qdoc/qdoc/tests/config/tst_config.cpp new file mode 100644 index 000000000..0e73130b8 --- /dev/null +++ b/src/qdoc/qdoc/tests/config/tst_config.cpp @@ -0,0 +1,180 @@ +// Copyright (C) 2020 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include "qdoc/config.h" + +#include <QtCore/qdir.h> +#include <QtCore/qfileinfo.h> +#include <QtCore/qhash.h> +#include <QtCore/qstringlist.h> +#include <QtTest/QtTest> + +class tst_Config : public QObject +{ + Q_OBJECT + +private slots: + void classMembersInitializeToFalseOrEmpty(); + void includePathsFromCommandLine(); + void variables(); + void paths(); + void includepaths(); + void getExampleProjectFile(); + void expandVars(); + +private: + Config &initConfig(const QStringList &args = QStringList(), + const char *qdocconf = nullptr); + Config &initConfig(const char *qdocconf) + { + return initConfig(QStringList(), qdocconf); + } +}; + +/* + Initializes the Config with optional arguments and a .qdocconf file + to load, and returns a reference to it. +*/ +Config &tst_Config::initConfig(const QStringList &args, const char *qdocconf) +{ + QStringList fullArgs = { QStringLiteral("./qdoc") }; + fullArgs << args; + Config::instance().init("QDoc Test", fullArgs); + + if (qdocconf) { + const auto configFile = QFINDTESTDATA(qdocconf); + if (!configFile.isEmpty()) + Config::instance().load(configFile); + } + + return Config::instance(); +} + +void tst_Config::classMembersInitializeToFalseOrEmpty() +{ + auto &config = initConfig(); + QCOMPARE(config.showInternal(), false); + QCOMPARE(config.singleExec(), false); + + QVERIFY(config.defines().isEmpty()); + QVERIFY(config.includePaths().isEmpty()); + QVERIFY(config.dependModules().isEmpty()); + QVERIFY(config.indexDirs().isEmpty()); + QVERIFY(config.currentDir().isEmpty()); + QVERIFY(config.previousCurrentDir().isEmpty()); +} + +void tst_Config::includePathsFromCommandLine() +{ + const auto mockIncludePath1 = QString("-I" + QDir().absoluteFilePath("/qt5/qtdoc/doc/.")); + const auto mockIncludePath2 = QString("-I" + QDir().absoluteFilePath("/qt5/qtbase/mkspecs/linux-g++")); + const QStringList commandLineArgs = { mockIncludePath1, mockIncludePath2 }; + auto &config = initConfig(commandLineArgs); + + const QStringList expected = { mockIncludePath1, mockIncludePath2 }; + const QStringList actual = config.includePaths(); + + QCOMPARE(actual, expected); +} + +// Tests different types of variables; string, string list, bool, int, +// empty and undefined variables, and subvariables. +void tst_Config::variables() +{ + auto &config = initConfig("/testdata/configs/vars.qdocconf"); + + const QStringList list = { "testing", "line", "by\n", "line" }; + QCOMPARE(config.get("list").asStringList(), list); + QCOMPARE(config.get("list").asString(), "testing line by\nline"); + QCOMPARE(config.get("true").asBool(), true); + QCOMPARE(config.get("untrue").asBool(), false); + QCOMPARE(config.get("int").asInt(), 2); + QCOMPARE(config.get("void").asString(), QString()); + QVERIFY(!config.get("void").asString().isNull()); + QCOMPARE(config.get("void").asString("undefined"), QString()); + QCOMPARE(config.get("undefined").asString("undefined"), "undefined"); + QVERIFY(config.get("undefined").asString().isNull()); + + QSet<QString> subVars = { "thing", "where", "time" }; + QCOMPARE(config.subVars("some"), subVars); +} + +// Tests whether paths or variables are resolved correctly. +void tst_Config::paths() +{ + auto &config = initConfig(); + const auto docConfig = QFINDTESTDATA("/testdata/configs/paths.qdocconf"); + if (!docConfig.isEmpty()) + config.load(docConfig); + + auto rootDir = QFileInfo(docConfig).dir(); + QVERIFY(rootDir.cdUp()); + + const auto paths = config.getCanonicalPathList("sourcedirs"); + QVERIFY(paths.size() == 3); + + QCOMPARE(paths[0], rootDir.absoluteFilePath("paths/includes")); + QCOMPARE(paths[1], rootDir.absoluteFilePath("configs")); + QCOMPARE(paths[2], rootDir.absoluteFilePath("configs/includes")); +} + +// Tests whether includepaths are resolved correctly +void tst_Config::includepaths() +{ + auto &config = initConfig(); + const auto docConfig = QFINDTESTDATA("/testdata/configs/includepaths.qdocconf"); + if (!docConfig.isEmpty()) + config.load(docConfig); + + auto rootDir = QFileInfo(docConfig).dir(); + QVERIFY(rootDir.cdUp()); + + const auto paths = config.getCanonicalPathList("includepaths", + Config::IncludePaths); + QVERIFY(paths.size() == 5); + + QCOMPARE(paths[0], "-I" + rootDir.absoluteFilePath("includepaths/include")); + QCOMPARE(paths[0], paths[1]); + QCOMPARE(paths[2], "-I" + rootDir.absoluteFilePath("includepaths/include/more")); + QCOMPARE(paths[3], "-F" + rootDir.absoluteFilePath("includepaths/include/framework")); + QCOMPARE(paths[4], "-isystem" + rootDir.absoluteFilePath("includepaths/include/system")); +} + +void::tst_Config::getExampleProjectFile() +{ + auto &config = initConfig(); + const auto docConfig = QFINDTESTDATA("/testdata/configs/exampletest.qdocconf"); + if (!docConfig.isEmpty()) + config.load(docConfig); + + auto rootDir = QFileInfo(docConfig).dir(); + QVERIFY(rootDir.cd("../exampletest/examples/test")); + + QVERIFY(config.getExampleProjectFile("invalid").isEmpty()); + QVERIFY(config.getExampleProjectFile("test/empty").isEmpty()); + + QCOMPARE(config.getExampleProjectFile("test/example1"), + rootDir.absoluteFilePath("example1/example1.pro")); + QCOMPARE(config.getExampleProjectFile("test/example2"), + rootDir.absoluteFilePath("example2/example2.qmlproject")); + QCOMPARE(config.getExampleProjectFile("test/example3"), + rootDir.absoluteFilePath("example3/example3.pyproject")); + QCOMPARE(config.getExampleProjectFile("test/example4"), + rootDir.absoluteFilePath("example4/CMakeLists.txt")); +} + +void::tst_Config::expandVars() +{ + qputenv("QDOC_TSTCONFIG_LIST", QByteArray("a b c")); + auto &config = initConfig("/testdata/configs/expandvars.qdocconf"); + + QCOMPARE(config.get("expanded1").asString(), "foo"); + QCOMPARE(config.get("expanded2").asString(), "foo,bar"); + QCOMPARE(config.get("expanded3").asString(), "foobar foobar baz"); + QCOMPARE(config.get("literally").asString(), "$data ${data}"); + QCOMPARE(config.get("csvlist").asString(), "a,b,c"); +} + +QTEST_APPLESS_MAIN(tst_Config) + +#include "tst_config.moc" |