forked from qt-creator/qt-creator
AutoTest: Fix flakyness of plugin test
Relying on the order of tests of the underlying tree model is bad as we order the model for the user with a QSortFilterProxyModel. Using non-unique keys is not wise either. Ensure the keys are unique to have reliable results. Change-Id: I556371d018c16e7b03a8ec85d60afc850056a94a Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -246,6 +246,7 @@ void AutoTestUnitTests::testCodeParserBoostTest()
|
||||
QSKIP("This test needs boost - set BOOST_INCLUDE_DIR (or have it installed)");
|
||||
|
||||
QFETCH(QString, projectFilePath);
|
||||
QFETCH(QString, extension);
|
||||
CppTools::Tests::ProjectOpenerAndCloser projectManager;
|
||||
CppTools::ProjectInfo projectInfo = projectManager.open(projectFilePath, true);
|
||||
QVERIFY(projectInfo.isValid());
|
||||
@@ -257,14 +258,23 @@ void AutoTestUnitTests::testCodeParserBoostTest()
|
||||
|
||||
QCOMPARE(m_model->boostTestNamesCount(), 5);
|
||||
|
||||
QMultiMap<QString, int> expectedSuitesAndTests;
|
||||
expectedSuitesAndTests.insert(QStringLiteral("Master Test Suite"), 2); // decorators w/o suite
|
||||
expectedSuitesAndTests.insert(QStringLiteral("Master Test Suite"), 2); // fixtures
|
||||
expectedSuitesAndTests.insert(QStringLiteral("Master Test Suite"), 3); // functions
|
||||
expectedSuitesAndTests.insert(QStringLiteral("Suite1"), 4);
|
||||
expectedSuitesAndTests.insert(QStringLiteral("SuiteOuter"), 5); // 2 sub suites + 3 tests
|
||||
QString basePath;
|
||||
if (auto project = projectInfo.project())
|
||||
basePath = project->projectFilePath().toFileInfo().absolutePath();
|
||||
QVERIFY(!basePath.isEmpty());
|
||||
|
||||
QMultiMap<QString, int> foundNamesAndSets = m_model->boostTestSuitesAndTests();
|
||||
QMap<QString, int> expectedSuitesAndTests;
|
||||
|
||||
auto pathConstructor = [basePath, extension](const QString &name, const QString &subPath) {
|
||||
return QString(name + '|' + basePath + subPath + extension);
|
||||
};
|
||||
expectedSuitesAndTests.insert(pathConstructor("Master Test Suite", "/tests/deco/deco"), 2); // decorators w/o suite
|
||||
expectedSuitesAndTests.insert(pathConstructor("Master Test Suite", "/tests/fix/fix"), 2); // fixtures
|
||||
expectedSuitesAndTests.insert(pathConstructor("Master Test Suite", "/tests/params/params"), 3); // functions
|
||||
expectedSuitesAndTests.insert(pathConstructor("Suite1", "/tests/deco/deco"), 4);
|
||||
expectedSuitesAndTests.insert(pathConstructor("SuiteOuter", "/tests/deco/deco"), 5); // 2 sub suites + 3 tests
|
||||
|
||||
QMap<QString, int> foundNamesAndSets = m_model->boostTestSuitesAndTests();
|
||||
QCOMPARE(expectedSuitesAndTests.size(), foundNamesAndSets.size());
|
||||
for (const QString &name : expectedSuitesAndTests.keys())
|
||||
QCOMPARE(expectedSuitesAndTests.values(name), foundNamesAndSets.values(name));
|
||||
@@ -280,10 +290,11 @@ void AutoTestUnitTests::testCodeParserBoostTest()
|
||||
void AutoTestUnitTests::testCodeParserBoostTest_data()
|
||||
{
|
||||
QTest::addColumn<QString>("projectFilePath");
|
||||
QTest::addColumn<QString>("extension");
|
||||
QTest::newRow("simpleBoostTest")
|
||||
<< QString(m_tmpDir->path() + "/simple_boost/simple_boost.pro");
|
||||
<< QString(m_tmpDir->path() + "/simple_boost/simple_boost.pro") << QString(".pro");
|
||||
QTest::newRow("simpleBoostTestQbs")
|
||||
<< QString(m_tmpDir->path() + "/simple_boost/simple_boost.qbs");
|
||||
<< QString(m_tmpDir->path() + "/simple_boost/simple_boost.qbs") << QString(".qbs");
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
|
@@ -615,13 +615,13 @@ int TestTreeModel::boostTestNamesCount() const
|
||||
return rootNode ? rootNode->childCount() : 0;
|
||||
}
|
||||
|
||||
QMultiMap<QString, int> TestTreeModel::boostTestSuitesAndTests() const
|
||||
QMap<QString, int> TestTreeModel::boostTestSuitesAndTests() const
|
||||
{
|
||||
QMultiMap<QString, int> result;
|
||||
QMap<QString, int> result;
|
||||
|
||||
if (TestTreeItem *rootNode = boostTestRootNode()) {
|
||||
rootNode->forFirstLevelChildren([&result](TestTreeItem *child) {
|
||||
result.insert(child->name(), child->childCount());
|
||||
result.insert(child->name() + '|' + child->proFile(), child->childCount());
|
||||
});
|
||||
}
|
||||
return result;
|
||||
|
@@ -71,7 +71,7 @@ public:
|
||||
int gtestNamesCount() const;
|
||||
QMultiMap<QString, int> gtestNamesAndSets() const;
|
||||
int boostTestNamesCount() const;
|
||||
QMultiMap<QString, int> boostTestSuitesAndTests() const;
|
||||
QMap<QString, int> boostTestSuitesAndTests() const;
|
||||
#endif
|
||||
|
||||
void markAllForRemoval();
|
||||
|
Reference in New Issue
Block a user