forked from qt-creator/qt-creator
Qmake: Add tests for MakefileParser
Change-Id: I6206faad1e98f0867aba67b05b64916deb77b9f8 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -301,38 +301,8 @@ MakeFileParse::MakeFileParse(const QString &makefile)
|
||||
}
|
||||
|
||||
line = trimLine(line);
|
||||
parseCommandLine(line);
|
||||
|
||||
QList<QMakeAssignment> assignments;
|
||||
QList<QMakeAssignment> afterAssignments;
|
||||
// Split up args into assignments and other arguments, writes m_unparsedArguments
|
||||
parseArgs(line, &assignments, &afterAssignments);
|
||||
qCDebug(logging()) << " Initial assignments:";
|
||||
dumpQMakeAssignments(assignments);
|
||||
|
||||
// Filter out CONFIG arguments we know into m_qmakeBuildConfig and m_config
|
||||
parseAssignments(&assignments);
|
||||
qCDebug(logging()) << " After parsing";
|
||||
dumpQMakeAssignments(assignments);
|
||||
|
||||
qCDebug(logging()) << " Explicit Debug" << m_qmakeBuildConfig.explicitDebug;
|
||||
qCDebug(logging()) << " Explicit Release" << m_qmakeBuildConfig.explicitRelease;
|
||||
qCDebug(logging()) << " Explicit BuildAll" << m_qmakeBuildConfig.explicitBuildAll;
|
||||
qCDebug(logging()) << " Explicit NoBuildAll" << m_qmakeBuildConfig.explicitNoBuildAll;
|
||||
qCDebug(logging()) << " TargetArch" << m_config.archConfig;
|
||||
qCDebug(logging()) << " OsType" << m_config.osType;
|
||||
qCDebug(logging()) << " LinkQmlDebuggingQQ2" << m_config.linkQmlDebuggingQQ2;
|
||||
qCDebug(logging()) << " Qt Quick Compiler" << m_config.useQtQuickCompiler;
|
||||
qCDebug(logging()) << " Separate Debug Info" << m_config.separateDebugInfo;
|
||||
|
||||
|
||||
// Create command line of all unfiltered arguments
|
||||
foreach (const QMakeAssignment &qa, assignments)
|
||||
QtcProcess::addArg(&m_unparsedArguments, qa.variable + qa.op + qa.value);
|
||||
if (!afterAssignments.isEmpty()) {
|
||||
QtcProcess::addArg(&m_unparsedArguments, QLatin1String("-after"));
|
||||
foreach (const QMakeAssignment &qa, afterAssignments)
|
||||
QtcProcess::addArg(&m_unparsedArguments, qa.variable + qa.op + qa.value);
|
||||
}
|
||||
m_state = Okay;
|
||||
}
|
||||
|
||||
@@ -382,3 +352,176 @@ const QLoggingCategory &MakeFileParse::logging()
|
||||
return category;
|
||||
}
|
||||
|
||||
void MakeFileParse::parseCommandLine(const QString &command)
|
||||
{
|
||||
|
||||
QList<QMakeAssignment> assignments;
|
||||
QList<QMakeAssignment> afterAssignments;
|
||||
// Split up args into assignments and other arguments, writes m_unparsedArguments
|
||||
parseArgs(command, &assignments, &afterAssignments);
|
||||
qCDebug(logging()) << " Initial assignments:";
|
||||
dumpQMakeAssignments(assignments);
|
||||
|
||||
// Filter out CONFIG arguments we know into m_qmakeBuildConfig and m_config
|
||||
parseAssignments(&assignments);
|
||||
qCDebug(logging()) << " After parsing";
|
||||
dumpQMakeAssignments(assignments);
|
||||
|
||||
qCDebug(logging()) << " Explicit Debug" << m_qmakeBuildConfig.explicitDebug;
|
||||
qCDebug(logging()) << " Explicit Release" << m_qmakeBuildConfig.explicitRelease;
|
||||
qCDebug(logging()) << " Explicit BuildAll" << m_qmakeBuildConfig.explicitBuildAll;
|
||||
qCDebug(logging()) << " Explicit NoBuildAll" << m_qmakeBuildConfig.explicitNoBuildAll;
|
||||
qCDebug(logging()) << " TargetArch" << m_config.archConfig;
|
||||
qCDebug(logging()) << " OsType" << m_config.osType;
|
||||
qCDebug(logging()) << " LinkQmlDebuggingQQ2" << m_config.linkQmlDebuggingQQ2;
|
||||
qCDebug(logging()) << " Qt Quick Compiler" << m_config.useQtQuickCompiler;
|
||||
qCDebug(logging()) << " Separate Debug Info" << m_config.separateDebugInfo;
|
||||
|
||||
// Create command line of all unfiltered arguments
|
||||
foreach (const QMakeAssignment &qa, assignments)
|
||||
QtcProcess::addArg(&m_unparsedArguments, qa.variable + qa.op + qa.value);
|
||||
if (!afterAssignments.isEmpty()) {
|
||||
QtcProcess::addArg(&m_unparsedArguments, QLatin1String("-after"));
|
||||
foreach (const QMakeAssignment &qa, afterAssignments)
|
||||
QtcProcess::addArg(&m_unparsedArguments, qa.variable + qa.op + qa.value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Unit tests:
|
||||
|
||||
#ifdef WITH_TESTS
|
||||
# include <QTest>
|
||||
|
||||
# include "qmakeprojectmanagerplugin.h"
|
||||
|
||||
# include "projectexplorer/outputparser_test.h"
|
||||
|
||||
using namespace QmakeProjectManager::Internal;
|
||||
using namespace ProjectExplorer;
|
||||
|
||||
void QmakeProjectManagerPlugin::testMakefileParser_data()
|
||||
{
|
||||
QTest::addColumn<QString>("command");
|
||||
QTest::addColumn<QString>("project");
|
||||
QTest::addColumn<QString>("unparsedArguments");
|
||||
QTest::addColumn<int>("archConfig");
|
||||
QTest::addColumn<int>("osType");
|
||||
QTest::addColumn<bool>("linkQmlDebuggingQQ2");
|
||||
QTest::addColumn<bool>("useQtQuickCompiler");
|
||||
QTest::addColumn<bool>("separateDebugInfo");
|
||||
QTest::addColumn<int>("effectiveBuildConfig");
|
||||
|
||||
QTest::newRow("Qt 5.7")
|
||||
<< QString::fromLatin1("-spec linux-g++ CONFIG+=debug CONFIG+=qml_debug -o Makefile ../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
QTest::newRow("Qt 5.7 extra1")
|
||||
<< QString::fromLatin1("SOMETHING=ELSE -spec linux-g++ CONFIG+=debug CONFIG+=qml_debug -o Makefile ../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++ SOMETHING=ELSE")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
QTest::newRow("Qt 5.7 extra2")
|
||||
<< QString::fromLatin1("-spec linux-g++ SOMETHING=ELSE CONFIG+=debug CONFIG+=qml_debug -o Makefile ../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++ SOMETHING=ELSE")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
QTest::newRow("Qt 5.7 extra3")
|
||||
<< QString::fromLatin1("-spec linux-g++ CONFIG+=debug SOMETHING=ELSE CONFIG+=qml_debug -o Makefile ../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++ SOMETHING=ELSE")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
QTest::newRow("Qt 5.7 extra4")
|
||||
<< QString::fromLatin1("-spec linux-g++ CONFIG+=debug CONFIG+=qml_debug SOMETHING=ELSE -o Makefile ../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++ SOMETHING=ELSE")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
QTest::newRow("Qt 5.7 extra5")
|
||||
<< QString::fromLatin1("-spec linux-g++ CONFIG+=debug CONFIG+=qml_debug -o Makefile SOMETHING=ELSE ../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++ SOMETHING=ELSE")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
QTest::newRow("Qt 5.7 extra6")
|
||||
<< QString::fromLatin1("-spec linux-g++ CONFIG+=debug CONFIG+=qml_debug -o Makefile ../untitled7/untitled7.pro SOMETHING=ELSE")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++ SOMETHING=ELSE")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
QTest::newRow("Qt 5.8")
|
||||
<< QString::fromLatin1("-o Makefile ../untitled7/untitled7.pro -spec linux-g++ CONFIG+=debug CONFIG+=qml_debug")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
QTest::newRow("Qt 5.8 extra1")
|
||||
<< QString::fromLatin1("SOMETHING=ELSE -o Makefile ../untitled7/untitled7.pro -spec linux-g++ CONFIG+=debug CONFIG+=qml_debug")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++ SOMETHING=ELSE")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
QTest::newRow("Qt 5.8 extra2")
|
||||
<< QString::fromLatin1("-o Makefile SOMETHING=ELSE ../untitled7/untitled7.pro -spec linux-g++ CONFIG+=debug CONFIG+=qml_debug")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++ SOMETHING=ELSE")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
QTest::newRow("Qt 5.8 extra3")
|
||||
<< QString::fromLatin1("-o Makefile ../untitled7/untitled7.pro SOMETHING=ELSE -spec linux-g++ CONFIG+=debug CONFIG+=qml_debug")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++ SOMETHING=ELSE")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
QTest::newRow("Qt 5.8 extra4")
|
||||
<< QString::fromLatin1("-o Makefile ../untitled7/untitled7.pro -spec linux-g++ SOMETHING=ELSE CONFIG+=debug CONFIG+=qml_debug")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++ SOMETHING=ELSE")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
QTest::newRow("Qt 5.8 extra5")
|
||||
<< QString::fromLatin1("-o Makefile ../untitled7/untitled7.pro -spec linux-g++ CONFIG+=debug SOMETHING=ELSE CONFIG+=qml_debug")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++ SOMETHING=ELSE")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
QTest::newRow("Qt 5.8 extra6")
|
||||
<< QString::fromLatin1("-o Makefile ../untitled7/untitled7.pro -spec linux-g++ CONFIG+=debug CONFIG+=qml_debug SOMETHING=ELSE")
|
||||
<< QString::fromLatin1("../untitled7/untitled7.pro")
|
||||
<< QString::fromLatin1("-spec linux-g++ SOMETHING=ELSE")
|
||||
<< static_cast<int>(QMakeStepConfig::NoArch) << static_cast<int>(QMakeStepConfig::NoOsType)
|
||||
<< true << false << false << 2;
|
||||
}
|
||||
|
||||
void QmakeProjectManagerPlugin::testMakefileParser()
|
||||
{
|
||||
QFETCH(QString, command);
|
||||
QFETCH(QString, project);
|
||||
QFETCH(QString, unparsedArguments);
|
||||
QFETCH(int, archConfig);
|
||||
QFETCH(int, osType);
|
||||
QFETCH(bool, linkQmlDebuggingQQ2);
|
||||
QFETCH(bool, useQtQuickCompiler);
|
||||
QFETCH(bool, separateDebugInfo);
|
||||
QFETCH(int, effectiveBuildConfig);
|
||||
|
||||
MakeFileParse parser("/tmp/something");
|
||||
parser.parseCommandLine(command, project);
|
||||
|
||||
QCOMPARE(Utils::QtcProcess::splitArgs(parser.unparsedArguments()),
|
||||
Utils::QtcProcess::splitArgs(unparsedArguments));
|
||||
QCOMPARE(parser.effectiveBuildConfig(0), effectiveBuildConfig);
|
||||
|
||||
const QMakeStepConfig qmsc = parser.config();
|
||||
QCOMPARE(qmsc.archConfig, static_cast<QMakeStepConfig::TargetArchConfig>(archConfig));
|
||||
QCOMPARE(qmsc.osType, static_cast<QMakeStepConfig::OsType>(osType));
|
||||
QCOMPARE(qmsc.linkQmlDebuggingQQ2, linkQmlDebuggingQQ2);
|
||||
QCOMPARE(qmsc.useQtQuickCompiler, useQtQuickCompiler);
|
||||
QCOMPARE(qmsc.separateDebugInfo, separateDebugInfo);
|
||||
}
|
||||
#endif
|
||||
|
@@ -62,6 +62,8 @@ public:
|
||||
|
||||
static const QLoggingCategory &logging();
|
||||
|
||||
void parseCommandLine(const QString &command);
|
||||
|
||||
private:
|
||||
void parseArgs(const QString &args, QList<QMakeAssignment> *assignments, QList<QMakeAssignment> *afterAssignments);
|
||||
void parseAssignments(QList<QMakeAssignment> *assignments);
|
||||
|
@@ -61,6 +61,8 @@ public:
|
||||
private slots:
|
||||
void testQmakeOutputParsers_data();
|
||||
void testQmakeOutputParsers();
|
||||
void testMakefileParser_data();
|
||||
void testMakefileParser();
|
||||
#endif
|
||||
|
||||
private:
|
||||
|
Reference in New Issue
Block a user