-
Suggestion
-
Resolution: Done
-
P2: Important
-
None
-
None
-
efb283fb7f72e950c8ecf755b960a3c1b36b5507 (qt/qtbase/dev)
This is useful to automatically detect warnings that should not occur, as there is often no way to do so if no state is changed as a result of the problem the warning is alerting us to.
For warnings that should occur, QTest::ignoreMessage() can still be used as previously.
The feature would be especially useful in QML, where it's not possible to fail on warnings.
Here are some potential solutions:
#1 failOnWarnings()/setFailOnWarnings(bool) (https://codereview.qt-project.org/#/c/89178/)
+ Simple API.
+ Can be used (called) from QML.
- No way to limit which warnings cause failures.
void initTestCase()
{
setFailOnWarnings(true);
}
void testSomething()
{
setFailOnWarnings(true);
// ...
}
#2 failOnWarning(const QRegularExpression &) (https://codereview.qt-project.org/c/qt/qtbase/+/375915/1)
+ Simple API.
+ Can limit which warnings cause failures.
+ Can be used (called) from QML.
- No way to stop failing on a certain warning, and as a result;
- No way to implement a simplified "bool failOnWarnings" property for TestCase in QML.
void initTestCase()
{
failOnWarning(QRegularExpression(".*"));
// or:
//failOnWarning(QRegularExpression("Binding loop.*"));
}
void testSomething()
{
// but can't fail on a warning only in this test:
//failOnWarning(QRegularExpression("Some warning that shouldn't happen here but is OK elsewhere for some reason"));
}
#3 Context-dependent failOnWarning(const QRegularExpression &)
+ Simple API.
+ Can limit which warnings cause failures.
+ Can be used (called) from QML.
+ Will only ignore the warnings for the scope of the called function, so can be used in init(), initTestCase(), individual test functions, etc.
- No way to stop failing on a certain warning, and as a result;
- No way to implement a simplified "bool failOnWarnings" property for TestCase in QML.
- As behaviour depends on where it's called from, could be slightly more difficult for users to learn.
void initTestCase()
{
// These will last for the duration of the test case.
startFailingOnWarning(QRegularExpression(".*"));
// or: startFailingOnWarning(QRegularExpression("Binding loop.*"));
}
void testSomething()
{
// These will last for the duration of the test case.
startFailingOnWarning(QRegularExpression("Some warning that shouldn't happen here but is OK elsewhere for some reason"));
}
#4 addFailOnWarning/startFailingOnWarning + removeFailOnWarning/stopFailingOnWarning
+ Simple API.
+ Can limit which warnings cause failures.
+ Can be used (called) from QML.
+ Can stop failing on a certain warning, and as a result;
+ Can implement a simplified "bool failOnWarnings" property for TestCase in QML.
void initTestCase()
{
startFailingOnWarning(QRegularExpression(".*"));
// or: startFailingOnWarning(QRegularExpression("Binding loop.*"));
}
void testSomething()
{
// This function runs some third party code with a lot of warnings that we can't control...
const auto warningRegex = QRegularExpression(".*");
// or: const auto warningRegex = QRegularExpression("Binding loop.*");
stopFailingOnWarning(warningRegex);
qScopeGuard([=](){ startFailingOnWarning(warningRegex); });
}
- relates to
-
QTBUG-98718 Make qtdeclarative tests fail on warnings
-
- Open
-