aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/blackbox/tst_blackbox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/blackbox/tst_blackbox.cpp')
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index 65c0630fc..c4b6a061e 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -1242,6 +1242,83 @@ void TestBlackbox::conflictingArtifacts()
QVERIFY2(m_qbsStderr.contains("Conflicting artifacts"), m_qbsStderr.constData());
}
+void TestBlackbox::cxxLanguageVersion()
+{
+ QDir::setCurrent(testDataDir + "/cxx-language-version");
+ rmDirR(relativeBuildDir());
+ QFETCH(QString, version);
+ QFETCH(QVariantMap, requiredFlags);
+ QFETCH(QVariantMap, forbiddenFlags);
+ QbsRunParameters resolveParams;
+ resolveParams.command = "resolve";
+ resolveParams.arguments << "--force-probe-execution";
+ if (!version.isEmpty())
+ resolveParams.arguments << ("modules.cpp.cxxLanguageVersion:" + version);
+ QCOMPARE(runQbs(resolveParams), 0);
+ QString mapKey;
+ if (m_qbsStdout.contains("is newer MSVC: true"))
+ mapKey = "msvc-new";
+ else if (m_qbsStdout.contains("is older MSVC: true"))
+ mapKey = "msvc_old";
+ else if (m_qbsStdout.contains("is GCC: true"))
+ mapKey = "gcc";
+ QVERIFY2(!mapKey.isEmpty(), m_qbsStdout.constData());
+ QbsRunParameters buildParams;
+ buildParams.expectFailure = mapKey == "gcc" && (version == "c++17" || version == "c++21");
+ buildParams.arguments = QStringList({"--command-echo-mode", "command-line"});
+ const int retVal = runQbs(buildParams);
+ if (!buildParams.expectFailure)
+ QCOMPARE(retVal, 0);
+ const QString requiredFlag = requiredFlags.value(mapKey).toString();
+ if (!requiredFlag.isEmpty())
+ QVERIFY2(m_qbsStdout.contains(requiredFlag.toLocal8Bit()), m_qbsStdout.constData());
+ const QString forbiddenFlag = forbiddenFlags.value(mapKey).toString();
+ if (!forbiddenFlag.isEmpty())
+ QVERIFY2(!m_qbsStdout.contains(forbiddenFlag.toLocal8Bit()), m_qbsStdout.constData());
+}
+
+void TestBlackbox::cxxLanguageVersion_data()
+{
+ QTest::addColumn<QString>("version");
+ QTest::addColumn<QVariantMap>("requiredFlags");
+ QTest::addColumn<QVariantMap>("forbiddenFlags");
+
+ QTest::newRow("C++98")
+ << QString("c++98")
+ << QVariantMap({std::make_pair(QString("gcc"), QString("-std=c++98"))})
+ << QVariantMap({std::make_pair(QString("msvc-old"), QString("/std:")),
+ std::make_pair(QString("msvc-new"), QString("/std:"))});
+ QTest::newRow("C++11")
+ << QString("c++11")
+ << QVariantMap({std::make_pair(QString("gcc"), QString("-std=c++0x"))})
+ << QVariantMap({std::make_pair(QString("msvc-old"), QString("/std:")),
+ std::make_pair(QString("msvc-new"), QString("/std:"))});
+ QTest::newRow("C++14")
+ << QString("c++14")
+ << QVariantMap({std::make_pair(QString("gcc"), QString("-std=c++1y")),
+ std::make_pair(QString("msvc-new"), QString("/std:c++14"))
+ })
+ << QVariantMap({std::make_pair(QString("msvc-old"), QString("/std:"))});
+ QTest::newRow("C++17")
+ << QString("c++17")
+ << QVariantMap({std::make_pair(QString("gcc"), QString("-std=c++17")),
+ std::make_pair(QString("msvc-new"), QString("/std:c++latest"))
+ })
+ << QVariantMap({std::make_pair(QString("msvc-old"), QString("/std:"))});
+ QTest::newRow("C++21")
+ << QString("c++21")
+ << QVariantMap({std::make_pair(QString("gcc"), QString("-std=c++21")),
+ std::make_pair(QString("msvc-new"), QString("/std:c++latest"))
+ })
+ << QVariantMap({std::make_pair(QString("msvc-old"), QString("/std:"))});
+ QTest::newRow("default")
+ << QString()
+ << QVariantMap()
+ << QVariantMap({std::make_pair(QString("gcc"), QString("-std=")),
+ std::make_pair(QString("msvc-old"), QString("/std:")),
+ std::make_pair(QString("msvc-new"), QString("/std:"))});
+}
+
void TestBlackbox::cpuFeatures()
{
QDir::setCurrent(testDataDir + "/cpu-features");
@@ -3503,6 +3580,23 @@ void TestBlackbox::requireDeprecated()
m_qbsStderr.constData());
}
+void TestBlackbox::rescueTransformerData()
+{
+ QDir::setCurrent(testDataDir + "/rescue-transformer-data");
+ QCOMPARE(runQbs(), 0);
+ QVERIFY2(m_qbsStdout.contains("compiling main.cpp") && m_qbsStdout.contains("m.p: undefined"),
+ m_qbsStdout.constData());
+ WAIT_FOR_NEW_TIMESTAMP();
+ touch("main.cpp");
+ QCOMPARE(runQbs(), 0);
+ QVERIFY2(m_qbsStdout.contains("compiling main.cpp") && !m_qbsStdout.contains("m.p: "),
+ m_qbsStdout.constData());
+ QCOMPARE(runQbs(QbsRunParameters("resolve", QStringList("modules.m.p:true"))), 0);
+ QCOMPARE(runQbs(), 0);
+ QVERIFY2(!m_qbsStdout.contains("compiling main.cpp") && m_qbsStdout.contains("m.p: true"),
+ m_qbsStdout.constData());
+}
+
void TestBlackbox::multipleChanges()
{
QDir::setCurrent(testDataDir + "/multiple-changes");
@@ -4200,6 +4294,20 @@ void TestBlackbox::checkProjectFilePath()
QVERIFY2(m_qbsStdout.contains("main2.cpp"), m_qbsStdout.constData());
}
+void TestBlackbox::checkTimestamps()
+{
+ QDir::setCurrent(testDataDir + "/check-timestamps");
+ QCOMPARE(runQbs(), 0);
+ QVERIFY2(m_qbsStdout.contains("compiling file.cpp"), m_qbsStdout.constData());
+ QVERIFY2(m_qbsStdout.contains("compiling main.cpp"), m_qbsStdout.constData());
+ QVERIFY(QFile::remove(relativeBuildGraphFilePath()));
+ WAIT_FOR_NEW_TIMESTAMP();
+ touch("file.h");
+ QCOMPARE(runQbs(QStringList("--check-timestamps")), 0);
+ QVERIFY2(m_qbsStdout.contains("compiling file.cpp"), m_qbsStdout.constData());
+ QVERIFY2(!m_qbsStdout.contains("compiling main.cpp"), m_qbsStdout.constData());
+}
+
class TemporaryDefaultProfileRemover
{
public: