aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/tools/tst_tools.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-01-09 17:50:40 +0100
committerJoerg Bornemann <joerg.bornemann@digia.com>2014-01-10 18:11:22 +0100
commit81af9acaa295a574c1cb5e6714725197dac7f530 (patch)
treecc8c94467f49a7d267e5249f624874feecc7eed4 /src/lib/corelib/tools/tst_tools.cpp
parent2fe25eb3f20ffb4e58cb559f2bcb9950c963290a (diff)
Move Qt profile setup into a dedicated library.
Otherwise all changes to the implementation will have to be duplicated in IDEs. Change-Id: I61e6d4fa1ee9b724eb5d9de9f233dc915a6c8bc3 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/lib/corelib/tools/tst_tools.cpp')
-rw-r--r--src/lib/corelib/tools/tst_tools.cpp178
1 files changed, 178 insertions, 0 deletions
diff --git a/src/lib/corelib/tools/tst_tools.cpp b/src/lib/corelib/tools/tst_tools.cpp
new file mode 100644
index 000000000..c1af58f70
--- /dev/null
+++ b/src/lib/corelib/tools/tst_tools.cpp
@@ -0,0 +1,178 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt Build Suite.
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+#include "tst_tools.h"
+
+#include <tools/buildoptions.h>
+#include <tools/error.h>
+#include <tools/fileinfo.h>
+#include <tools/hostosinfo.h>
+#include <tools/profile.h>
+#include <tools/settings.h>
+#include <tools/setupprojectparameters.h>
+
+#include <QFileInfo>
+#include <QTemporaryFile>
+#include <QTest>
+
+namespace qbs {
+namespace Internal {
+
+TestTools::TestTools(Settings *settings) : m_settings(settings)
+{
+}
+
+void TestTools::testFileInfo()
+{
+ QCOMPARE(FileInfo::fileName("C:/waffl/copter.exe"), QString("copter.exe"));
+ QCOMPARE(FileInfo::baseName("C:/waffl/copter.exe.lib"), QString("copter"));
+ QCOMPARE(FileInfo::completeBaseName("C:/waffl/copter.exe.lib"), QString("copter.exe"));
+ QCOMPARE(FileInfo::path("abc"), QString("."));
+ QCOMPARE(FileInfo::path("/abc/lol"), QString("/abc"));
+ QVERIFY(!FileInfo::isAbsolute("bla/lol"));
+ QVERIFY(FileInfo::isAbsolute("/bla/lol"));
+ if (HostOsInfo::isWindowsHost())
+ QVERIFY(FileInfo::isAbsolute("C:\\bla\\lol"));
+ QCOMPARE(FileInfo::resolvePath("/abc/lol", "waffl"), QString("/abc/lol/waffl"));
+ QCOMPARE(FileInfo::resolvePath("/abc/def/ghi/jkl/", "../foo/bar"), QString("/abc/def/ghi/foo/bar"));
+ QCOMPARE(FileInfo::resolvePath("/abc/def/ghi/jkl/", "../../foo/bar"), QString("/abc/def/foo/bar"));
+ QCOMPARE(FileInfo::resolvePath("/abc", "../../../foo/bar"), QString("/foo/bar"));
+ QCOMPARE(FileInfo("/does/not/exist").lastModified(), FileTime());
+}
+
+void TestTools::fileCaseCheck()
+{
+ QTemporaryFile tempFile(QLatin1String("CamelCase"));
+ QVERIFY(tempFile.open());
+ QFileInfo tempFileInfo(tempFile.fileName());
+ const QString lowerFilePath = tempFileInfo.absolutePath() + QLatin1Char('/')
+ + tempFileInfo.fileName().toLower();
+ const QString upperFilePath = tempFileInfo.absolutePath() + QLatin1Char('/')
+ + tempFileInfo.fileName().toUpper();
+ QVERIFY(FileInfo::isFileCaseCorrect(tempFileInfo.absoluteFilePath()));
+ if (QFile::exists(lowerFilePath))
+ QVERIFY(!FileInfo::isFileCaseCorrect(lowerFilePath));
+ if (QFile::exists(upperFilePath))
+ QVERIFY(!FileInfo::isFileCaseCorrect(upperFilePath));
+}
+
+void TestTools::testProfiles()
+{
+ bool exceptionCaught;
+ Profile parentProfile("parent", m_settings);
+ Profile childProfile("child", m_settings);
+ try {
+ parentProfile.removeBaseProfile();
+ parentProfile.remove("testKey");
+ QCOMPARE(parentProfile.value("testKey", "none").toString(), QLatin1String("none"));
+ parentProfile.setValue("testKey", "testValue");
+ QCOMPARE(parentProfile.value("testKey").toString(), QLatin1String("testValue"));
+
+ childProfile.remove("testKey");
+ childProfile.removeBaseProfile();
+ QCOMPARE(childProfile.value("testKey", "none").toString(), QLatin1String("none"));
+ childProfile.setBaseProfile("parent");
+ QCOMPARE(childProfile.value("testKey").toString(), QLatin1String("testValue"));
+
+ // Change base profile and check if the inherited value also changes.
+ Profile fooProfile("foo", m_settings);
+ fooProfile.setValue("testKey", "gnampf");
+ childProfile.setBaseProfile("foo");
+ QCOMPARE(childProfile.value("testKey", "none").toString(), QLatin1String("gnampf"));
+ exceptionCaught = false;
+ } catch (ErrorInfo &) {
+ exceptionCaught = true;
+ }
+ QVERIFY(!exceptionCaught);
+
+ try {
+ childProfile.setBaseProfile("SmurfAlongWithMe");
+ childProfile.value("blubb");
+ exceptionCaught = false;
+ } catch (ErrorInfo &) {
+ exceptionCaught = true;
+ }
+ QVERIFY(exceptionCaught);
+
+ try {
+ childProfile.setBaseProfile("parent");
+ parentProfile.setBaseProfile("child");
+ QVERIFY(!childProfile.value("blubb").isValid());
+ exceptionCaught = false;
+ } catch (ErrorInfo &) {
+ exceptionCaught = true;
+ }
+ QVERIFY(exceptionCaught);
+
+ try {
+ QVERIFY(!childProfile.allKeys(Profile::KeySelectionNonRecursive).isEmpty());
+ exceptionCaught = false;
+ } catch (ErrorInfo &) {
+ exceptionCaught = true;
+ }
+ QVERIFY(!exceptionCaught);
+
+ try {
+ QVERIFY(!childProfile.allKeys(Profile::KeySelectionRecursive).isEmpty());
+ exceptionCaught = false;
+ } catch (ErrorInfo &) {
+ exceptionCaught = true;
+ }
+ QVERIFY(exceptionCaught);
+}
+
+void TestTools::testBuildConfigMerging()
+{
+ QVariantMap buildConfigMap;
+ buildConfigMap.insert(QLatin1String("topLevelKey"), QLatin1String("topLevelValue"));
+ buildConfigMap.insert(QLatin1String("qbs.toolchain"), QLatin1String("gcc"));
+ buildConfigMap.insert(QLatin1String("qbs.architecture"),
+ QLatin1String("Jean-Claude Pillemann"));
+ buildConfigMap.insert(QLatin1String("cpp.treatWarningsAsErrors"), true);
+ QVariantMap overrideMap;
+ overrideMap.insert(QLatin1String("qbs.toolchain"), QLatin1String("clang"));
+ SetupProjectParameters params;
+ params.setBuildConfiguration(buildConfigMap);
+ params.setOverriddenValues(overrideMap);
+ const QVariantMap finalMap = params.finalBuildConfigurationTree();
+ QCOMPARE(finalMap.count(), 3);
+ QCOMPARE(finalMap.value(QLatin1String("topLevelKey")).toString(),
+ QString::fromLatin1("topLevelValue"));
+ const QVariantMap finalQbsMap = finalMap.value(QLatin1String("qbs")).toMap();
+ QCOMPARE(finalQbsMap.count(), 2);
+ QCOMPARE(finalQbsMap.value(QLatin1String("toolchain")).toString(),
+ QString::fromLatin1("clang"));
+ QCOMPARE(finalQbsMap.value(QLatin1String("architecture")).toString(),
+ QString::fromLatin1("Jean-Claude Pillemann"));
+ const QVariantMap finalCppMap = finalMap.value(QLatin1String("cpp")).toMap();
+ QCOMPARE(finalCppMap.count(), 1);
+ QCOMPARE(finalCppMap.value(QLatin1String("treatWarningsAsErrors")).toBool(), true);
+}
+
+} // namespace Internal
+} // namespace qbs