TaskTree tests: Add tests triggering runtime asserts

This addresses the 15th point in the master task below.

Task-number: QTCREATORBUG-28741
Change-Id: I9d449a6ce1538071f300b68b2929bcd437d1bb0f
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2023-11-05 14:26:26 +01:00
parent a88f807e86
commit 88ac19f188
2 changed files with 74 additions and 5 deletions

View File

@@ -959,30 +959,30 @@ void GroupItem::addChildren(const QList<GroupItem> &children)
case Type::GroupData: case Type::GroupData:
if (child.m_groupData.m_groupHandler.m_setupHandler) { if (child.m_groupData.m_groupHandler.m_setupHandler) {
QTC_ASSERT(!m_groupData.m_groupHandler.m_setupHandler, QTC_ASSERT(!m_groupData.m_groupHandler.m_setupHandler,
qWarning("Group Setup Handler redefinition, overriding...")); qWarning("Group setup handler redefinition, overriding..."));
m_groupData.m_groupHandler.m_setupHandler m_groupData.m_groupHandler.m_setupHandler
= child.m_groupData.m_groupHandler.m_setupHandler; = child.m_groupData.m_groupHandler.m_setupHandler;
} }
if (child.m_groupData.m_groupHandler.m_doneHandler) { if (child.m_groupData.m_groupHandler.m_doneHandler) {
QTC_ASSERT(!m_groupData.m_groupHandler.m_doneHandler, QTC_ASSERT(!m_groupData.m_groupHandler.m_doneHandler,
qWarning("Group Done Handler redefinition, overriding...")); qWarning("Group done handler redefinition, overriding..."));
m_groupData.m_groupHandler.m_doneHandler m_groupData.m_groupHandler.m_doneHandler
= child.m_groupData.m_groupHandler.m_doneHandler; = child.m_groupData.m_groupHandler.m_doneHandler;
} }
if (child.m_groupData.m_parallelLimit) { if (child.m_groupData.m_parallelLimit) {
QTC_ASSERT(!m_groupData.m_parallelLimit, QTC_ASSERT(!m_groupData.m_parallelLimit,
qWarning("Group Execution Mode redefinition, overriding...")); qWarning("Group execution mode redefinition, overriding..."));
m_groupData.m_parallelLimit = child.m_groupData.m_parallelLimit; m_groupData.m_parallelLimit = child.m_groupData.m_parallelLimit;
} }
if (child.m_groupData.m_workflowPolicy) { if (child.m_groupData.m_workflowPolicy) {
QTC_ASSERT(!m_groupData.m_workflowPolicy, QTC_ASSERT(!m_groupData.m_workflowPolicy,
qWarning("Group Workflow Policy redefinition, overriding...")); qWarning("Group workflow policy redefinition, overriding..."));
m_groupData.m_workflowPolicy = child.m_groupData.m_workflowPolicy; m_groupData.m_workflowPolicy = child.m_groupData.m_workflowPolicy;
} }
break; break;
case Type::TaskHandler: case Type::TaskHandler:
QTC_ASSERT(child.m_taskHandler.m_createHandler, QTC_ASSERT(child.m_taskHandler.m_createHandler,
qWarning("Task Create Handler can't be null, skipping..."); return); qWarning("Task create handler can't be null, skipping..."); return);
m_children.append(child); m_children.append(child);
break; break;
case Type::Storage: case Type::Storage:

View File

@@ -94,6 +94,7 @@ class tst_Tasking : public QObject
private slots: private slots:
void validConstructs(); // compile test void validConstructs(); // compile test
void runtimeCheck(); // checks done on runtime
void testTree_data(); void testTree_data();
void testTree(); void testTree();
void testInThread_data(); void testInThread_data();
@@ -254,6 +255,74 @@ void tst_Tasking::validConstructs()
#endif #endif
} }
void tst_Tasking::runtimeCheck()
{
{
QTest::ignoreMessage(QtDebugMsg, QRegularExpression("^SOFT ASSERT: "));
QTest::ignoreMessage(QtWarningMsg,
"Can't add the same storage into one Group twice, skipping...");
const TreeStorage<int> storage;
Group {
Storage(storage),
Storage(storage),
};
}
{
QTest::ignoreMessage(QtDebugMsg, QRegularExpression("^SOFT ASSERT: "));
QTest::ignoreMessage(QtWarningMsg,
"Can't add the same storage into one Group twice, skipping...");
const TreeStorage<int> storage1;
const auto storage2 = storage1;
Group {
Storage(storage1),
Storage(storage2),
};
}
{
QTest::ignoreMessage(QtDebugMsg, QRegularExpression("^SOFT ASSERT: "));
QTest::ignoreMessage(QtWarningMsg,
"Group setup handler redefinition, overriding...");
Group {
onGroupSetup([] {}),
onGroupSetup([] {}),
};
}
{
QTest::ignoreMessage(QtDebugMsg, QRegularExpression("^SOFT ASSERT: "));
QTest::ignoreMessage(QtWarningMsg,
"Group done handler redefinition, overriding...");
Group {
onGroupDone([] {}),
onGroupDone([] {}),
};
}
{
QTest::ignoreMessage(QtDebugMsg, QRegularExpression("^SOFT ASSERT: "));
QTest::ignoreMessage(QtWarningMsg,
"Group execution mode redefinition, overriding...");
Group {
sequential,
sequential,
};
}
{
QTest::ignoreMessage(QtDebugMsg, QRegularExpression("^SOFT ASSERT: "));
QTest::ignoreMessage(QtWarningMsg,
"Group workflow policy redefinition, overriding...");
Group {
stopOnError,
stopOnError,
};
}
}
class TickAndDone : public QObject class TickAndDone : public QObject
{ {
Q_OBJECT Q_OBJECT