diff options
Diffstat (limited to 'tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp')
-rw-r--r-- | tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp b/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp index dc6f16828b..4318396bd4 100644 --- a/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp +++ b/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp @@ -45,6 +45,13 @@ #include <QtCore/private/qloggingregistry_p.h> QT_USE_NAMESPACE +enum LoggingRuleState { + Invalid, + Match, + NoMatch +}; +Q_DECLARE_METATYPE(LoggingRuleState); +Q_DECLARE_METATYPE(QtMsgType); class tst_QLoggingRegistry : public QObject { @@ -57,6 +64,122 @@ private slots: // ensure a clean environment QStandardPaths::setTestModeEnabled(true); qunsetenv("QT_LOGGING_CONF"); + qunsetenv("QT_LOGGING_RULES"); + } + + void QLoggingRule_parse_data() + { + QTest::addColumn<QString>("pattern"); + QTest::addColumn<QString>("category"); + QTest::addColumn<QtMsgType>("msgType"); + QTest::addColumn<LoggingRuleState>("result"); + + // _empty_ should match (only) _empty_ + QTest::newRow("_empty_-_empty_") + << QString("") << QString("") << QtDebugMsg << Match; + QTest::newRow("_empty_-default") + << QString("") << QString("default") << QtDebugMsg << NoMatch; + QTest::newRow(".debug-_empty_") + << QString(".debug") << QString("") << QtDebugMsg << Match; + QTest::newRow(".warning-default") + << QString(".warning") << QString("default") << QtDebugMsg << NoMatch; + + // literal should match only literal + QTest::newRow("qt-qt") + << QString("qt") << QString("qt") << QtDebugMsg << Match; + QTest::newRow("qt-_empty_") + << QString("qt") << QString("") << QtDebugMsg << NoMatch; + QTest::newRow("qt-qtx") + << QString("qt") << QString("qtx") << QtDebugMsg << NoMatch; + QTest::newRow("qt-qt.io") + << QString("qt") << QString("qt.io") << QtDebugMsg << NoMatch; + QTest::newRow("qt.debug-qt") + << QString("qt.debug") << QString("qt") << QtDebugMsg << Match; + QTest::newRow("qt.critical-qt") + << QString("qt.critical") << QString("qt") << QtDebugMsg << NoMatch; + + // * should match everything + QTest::newRow("_star_-qt.io.debug") + << QString("*") << QString("qt.io") << QtDebugMsg << Match; + QTest::newRow("_star_-qt.io.warning") + << QString("*") << QString("qt.io") << QtWarningMsg << Match; + QTest::newRow("_star_-qt.io.critical") + << QString("*") << QString("qt.io") << QtCriticalMsg << Match; + QTest::newRow("_star_-_empty_") + << QString("*") << QString("") << QtDebugMsg << Match; + QTest::newRow("_star_.debug-qt.io") + << QString("*.debug") << QString("qt.io") << QtDebugMsg << Match; + QTest::newRow("_star_.warning-qt.io") + << QString("*.warning") << QString("qt.io") << QtDebugMsg << NoMatch; + + // qt.* should match everything starting with 'qt.' + QTest::newRow("qt._star_-qt.io") + << QString("qt.*") << QString("qt.io") << QtDebugMsg << Match; + QTest::newRow("qt._star_-qt") + << QString("qt.*") << QString("qt") << QtDebugMsg << NoMatch; + QTest::newRow("qt__star_-qt") + << QString("qt*") << QString("qt") << QtDebugMsg << Match; + QTest::newRow("qt._star_-qt.io.fs") + << QString("qt.*") << QString("qt.io.fs") << QtDebugMsg << Match; + QTest::newRow("qt._star_.debug-qt.io.fs") + << QString("qt.*.debug") << QString("qt.io.fs") << QtDebugMsg << Match; + QTest::newRow("qt._star_.warning-qt.io.fs") + << QString("qt.*.warning") << QString("qt.io.fs") << QtDebugMsg << NoMatch; + + // *.io should match everything ending with .io + QTest::newRow("_star_.io-qt.io") + << QString("*.io") << QString("qt.io") << QtDebugMsg << Match; + QTest::newRow("_star_io-qt.io") + << QString("*io") << QString("qt.io") << QtDebugMsg << Match; + QTest::newRow("_star_.io-io") + << QString("*.io") << QString("io") << QtDebugMsg << NoMatch; + QTest::newRow("_star_io-io") + << QString("*io") << QString("io") << QtDebugMsg << Match; + QTest::newRow("_star_.io-qt.ios") + << QString("*.io") << QString("qt.ios") << QtDebugMsg << NoMatch; + QTest::newRow("_star_.io-qt.io.x") + << QString("*.io") << QString("qt.io.x") << QtDebugMsg << NoMatch; + QTest::newRow("_star_.io.debug-qt.io") + << QString("*.io.debug") << QString("qt.io") << QtDebugMsg << Match; + QTest::newRow("_star_.io.warning-qt.io") + << QString("*.io.warning") << QString("qt.io") << QtDebugMsg << NoMatch; + + // *qt* should match everything that contains 'qt' + QTest::newRow("_star_qt_star_-qt.core.io") + << QString("*qt*") << QString("qt.core.io") << QtDebugMsg << Match; + QTest::newRow("_star_qt_star_-default") + << QString("*qt*") << QString("default") << QtDebugMsg << NoMatch; + QTest::newRow("_star_qt._star_.debug-qt.io") + << QString("*qt.*.debug") << QString("qt.io") << QtDebugMsg << Match; + QTest::newRow("_star_.qt._star_.warning-qt.io") + << QString("*.qt.*.warning") << QString("qt.io") << QtDebugMsg << NoMatch; + QTest::newRow("**") + << QString("**") << QString("qt.core.io") << QtDebugMsg << Match; + + // * outside of start/end + QTest::newRow("qt.*.io") + << QString("qt.*.io") << QString("qt.core.io") << QtDebugMsg << Invalid; + QTest::newRow("***") + << QString("***") << QString("qt.core.io") << QtDebugMsg << Invalid; + } + + void QLoggingRule_parse() + { + QFETCH(QString, pattern); + QFETCH(QString, category); + QFETCH(QtMsgType, msgType); + QFETCH(LoggingRuleState, result); + + QLoggingRule rule(QStringRef(&pattern), true); + LoggingRuleState state = Invalid; + if (rule.flags != QLoggingRule::Invalid) { + switch (rule.pass(category, msgType)) { + case -1: QFAIL("Shoudn't happen, we set pattern to true"); break; + case 0: state = NoMatch; break; + case 1: state = Match; break; + } + } + QCOMPARE(state, result); } void QLoggingSettingsParser_iniStyle() @@ -97,6 +220,13 @@ private slots: QCOMPARE(registry.envRules.size(), 1); QCOMPARE(registry.rules.size(), 1); + + // check that QT_LOGGING_RULES take precedence + qputenv("QT_LOGGING_RULES", "Digia.*=true"); + registry.init(); + QCOMPARE(registry.envRules.size(), 2); + QCOMPARE(registry.envRules.at(1).enabled, true); + QCOMPARE(registry.rules.size(), 2); } void QLoggingRegistry_config() |