summaryrefslogtreecommitdiff
path: root/tests/auto/debugger/tst_dumpers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/debugger/tst_dumpers.cpp')
-rw-r--r--tests/auto/debugger/tst_dumpers.cpp94
1 files changed, 53 insertions, 41 deletions
diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp
index 4a5568a19a..cdf1dc90a0 100644
--- a/tests/auto/debugger/tst_dumpers.cpp
+++ b/tests/auto/debugger/tst_dumpers.cpp
@@ -302,9 +302,9 @@ struct UnsubstitutedValue : Value
struct Type
{
- Type() : qtVersion(0) {}
- Type(const char *str) : type(str), qtVersion(0) {}
- Type(const QByteArray &ba) : type(ba), qtVersion(0) {}
+ Type() : qtVersion(0), isPattern(false) {}
+ Type(const char *str) : type(str), qtVersion(0), isPattern(false) {}
+ Type(const QByteArray &ba) : type(ba), qtVersion(0), isPattern(false) {}
bool matches(const QByteArray &actualType0, const Context &context) const
{
@@ -329,10 +329,16 @@ struct Type
expectedType.replace(' ', "");
expectedType.replace("const", "");
expectedType.replace('@', context.nameSpace);
+ if (isPattern) {
+ QString actual = QString::fromLatin1(actualType);
+ QString expected = QString::fromLatin1(expectedType);
+ return QRegExp(expected).exactMatch(actual);
+ }
return actualType == expectedType;
}
QByteArray type;
int qtVersion;
+ bool isPattern;
};
struct Type4 : Type
@@ -345,6 +351,11 @@ struct Type5 : Type
Type5(const QByteArray &ba) : Type(ba) { qtVersion = 5; }
};
+struct Pattern : Type
+{
+ Pattern(const QByteArray &ba) : Type(ba) { isPattern = true; }
+};
+
enum DebuggerEngine
{
DumpTestGdbEngine = 0x01,
@@ -846,7 +857,7 @@ void tst_Dumpers::dumper()
"\n#endif"
"\n" + (data.useQHash ?
"\n#if QT_VERSION >= 0x050000"
- "\nqt_qhash_seed.testAndSetRelaxed(-1, 0);"
+ "\nqt_qhash_seed.store(0);"
"\n#endif\n" : "") +
"\n unused(&argc, &argv, &qtversion, &gccversion);\n"
"\n" + data.code +
@@ -1135,10 +1146,9 @@ void tst_Dumpers::dumper()
m_keepTemp = false;
} else {
qDebug() << "CONTENTS : " << contents;
- qDebug() << "Qt VERSION : "
- << qPrintable(QString::number(context.qtVersion, 16));
- qDebug() << "GCC VERSION : "
- << qPrintable(QString::number(context.gccVersion, 16));
+ qDebug() << "Qt VERSION : " << qPrintable(QString::number(context.qtVersion, 16));
+ if (m_debuggerEngine != DumpTestCdbEngine)
+ qDebug() << "GCC VERSION : " << qPrintable(QString::number(context.gccVersion, 16));
qDebug() << "BUILD DIR : " << qPrintable(t->buildPath);
}
QVERIFY(ok);
@@ -1232,7 +1242,9 @@ void tst_Dumpers::dumper_data()
"ba += 2;\n")
% CoreProfile()
% Check("ba", QByteArray("\"Hello\"World")
- + char(0) + char(1) + char(2) + '"', "@QByteArray")
+ + char(0) + char(1) + char(2) + '"', "@QByteArray").setEngines(
+ DumpTestGdbEngine | DumpTestLldbEngine)
+ % Check("ba", QByteArray("\"Hello\"World...\""), "@QByteArray").setForCdbOnly()
% Check("ba.0", "[0]", "72", "char")
% Check("ba.11", "[11]", "0", "char")
% Check("ba.12", "[12]", "1", "char")
@@ -1371,7 +1383,8 @@ void tst_Dumpers::dumper_data()
"unused(&dir, &s, &fi);\n")
% CoreProfile()
% Check("dir", tempDir, "@QDir")
- % Check("dir.absolutePath", tempDir, "@QString");
+ % Check("dir.absolutePath", tempDir, "@QString").setEngines(
+ DumpTestGdbEngine | DumpTestLldbEngine);
// % Check("dir.canonicalPath", tempDir, "@QString");
QTest::newRow("QFileInfo")
@@ -1869,8 +1882,14 @@ void tst_Dumpers::dumper_data()
% CheckType("loc", "@QLocale")
% CheckType("m", "@QLocale::MeasurementSystem")
% Check("loc1", "\"en_US\"", "@QLocale")
- % Check("m1", Value5("@QLocale::ImperialUSSystem (1)"), "@QLocale::MeasurementSystem")
- % Check("m1", Value4("@QLocale::ImperialSystem (1)"), "@QLocale::MeasurementSystem");
+ % Check("m1", Value5("@QLocale::ImperialUSSystem (1)"),
+ "@QLocale::MeasurementSystem").setForGdbOnly()
+ % Check("m1", Value4("@QLocale::ImperialSystem (1)"),
+ "@QLocale::MeasurementSystem").setForGdbOnly()
+ % Check("m1", Value5("ImperialUSSystem"),
+ "@QLocale::MeasurementSystem").setForLldbOnly()
+ % Check("m1", Value4("ImperialSystem"),
+ "@QLocale::MeasurementSystem").setForLldbOnly();
QTest::newRow("QMapUIntStringList")
<< Data("#include <QMap>\n"
@@ -1962,14 +1981,12 @@ void tst_Dumpers::dumper_data()
% CoreProfile()
% Check("map", "<3 items>", "@QMap<@QString, @QPointer<@QObject>>")
% Check("map.0", "[0]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
- % Check("map.0.key", Value4("\".\""), "@QString")
- % Check("map.0.key", Value5("\"Hallo\""), "@QString")
+ % Check("map.0.key", "\".\"", "@QString")
% Check("map.0.value", "", "@QPointer<@QObject>")
//% Check("map.0.value.o", Pointer(), "@QObject")
// FIXME: it's '.wp' in Qt 5
% Check("map.1", "[1]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
- % Check("map.1.key", Value4("\"Hallo\""), "@QString")
- % Check("map.1.key", Value5("\".\""), "@QString")
+ % Check("map.1.key", "\"Hallo\"", "@QString")
% Check("map.2", "[2]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
% Check("map.2.key", "\"Welt\"", "@QString");
@@ -1989,8 +2006,7 @@ void tst_Dumpers::dumper_data()
% CoreProfile()
% Check("map", "<4 items>", "@QMap<@QString, @QList<nsA::nsB::SomeType*>>")
% Check("map.0", "[0]", "", "@QMapNode<@QString, @QList<nsA::nsB::SomeType*>>")
- % Check("map.0.key", Value4("\"1\""), "@QString")
- % Check("map.0.key", Value5("\"bar\""), "@QString")
+ % Check("map.0.key", "\"1\"", "@QString")
% Check("map.0.value", "<3 items>", "@QList<nsA::nsB::SomeType*>")
% Check("map.0.value.0", "[0]", "", "nsA::nsB::SomeType")
% Check("map.0.value.0.a", "1", "int")
@@ -1999,8 +2015,7 @@ void tst_Dumpers::dumper_data()
% Check("map.0.value.2", "[2]", "", "nsA::nsB::SomeType")
% Check("map.0.value.2.a", "3", "int")
% Check("map.3", "[3]", "", "@QMapNode<@QString, @QList<nsA::nsB::SomeType*>>")
- % Check("map.3.key", Value4("\"foo\""), "@QString")
- % Check("map.3.key", Value5("\"2\""), "@QString")
+ % Check("map.3.key", "\"foo\"", "@QString")
% Check("map.3.value", "<3 items>", "@QList<nsA::nsB::SomeType*>")
% Check("map.3.value.2", "[2]", "", "nsA::nsB::SomeType")
% Check("map.3.value.2.a", "3", "int")
@@ -2071,17 +2086,14 @@ void tst_Dumpers::dumper_data()
% CoreProfile()
% Check("map", "<4 items>", "@QMultiMap<@QString, @QPointer<@QObject>>")
% Check("map.0", "[0]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
- % Check("map.0.key", Value4("\".\""), "@QString")
- % Check("map.0.key", Value5("\"Hallo\""), "@QString")
+ % Check("map.0.key", "\".\"", "@QString")
% Check("map.0.value", "", "@QPointer<@QObject>")
% Check("map.1", "[1]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
% Check("map.1.key", "\".\"", "@QString")
% Check("map.2", "[2]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
- % Check("map.2.key", Value4("\"Hallo\""), "@QString")
- % Check("map.2.key", Value5("\"Welt\""), "@QString")
+ % Check("map.2.key", "\"Hallo\"", "@QString")
% Check("map.3", "[3]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
- % Check("map.3.key", Value4("\"Welt\""), "@QString")
- % Check("map.3.key", Value5("\".\""), "@QString");
+ % Check("map.3.key", "\"Welt\"", "@QString");
QTest::newRow("QObject1")
@@ -2571,8 +2583,7 @@ void tst_Dumpers::dumper_data()
% Check("atts.attList.2.localname", "\"localPart3\"", "@QString")
% Check("atts.attList.2.qname", "\"name3\"", "@QString")
% Check("atts.attList.2.uri", "\"uri3\"", "@QString")
- % Check("atts.attList.2.value", "\"value3\"", "@QString")
- % Check("atts.d", "", "@QXmlAttributesPrivate");
+ % Check("atts.attList.2.value", "\"value3\"", "@QString");
QTest::newRow("StdArray")
<< Data("#include <array>\n"
@@ -2583,8 +2594,8 @@ void tst_Dumpers::dumper_data()
% CoreProfile()
% Cxx11Profile()
% MacLibCppProfile()
- % Check("a", "<4 items>", "std::array<int, 4u>")
- % Check("b", "<4 items>", "std::array<@QString, 4u>");
+ % Check("a", "<4 items>", Pattern("std::array<int, 4.*>"))
+ % Check("b", "<4 items>", Pattern("std::array<@QString, 4.*>"));
QTest::newRow("StdComplex")
<< Data("#include <complex>\n",
@@ -2657,6 +2668,7 @@ void tst_Dumpers::dumper_data()
"h.insert(194);\n"
"h.insert(2);\n"
"h.insert(3);\n")
+ % GdbOnly()
% Profile("QMAKE_CXXFLAGS += -Wno-deprecated")
% Check("h", "<4 items>", "__gnu__cxx::hash_set<int>")
% Check("h.0", "[0]", "194", "int")
@@ -3122,7 +3134,9 @@ void tst_Dumpers::dumper_data()
"v.push_back(true);\n"
"v.push_back(false);\n"
"unused(&v);\n")
- % Check("v", "<5 items>", "std::vector<bool>")
+ % Check("v", "<5 items>", "std::vector<bool>").setForGdbOnly()
+ // Known issue: Clang produces "std::vector<std::allocator<bool>>
+ % Check("v", "<5 items>", "std::vector<std::allocator<bool>>").setForLldbOnly()
% Check("v.0", "[0]", "1", "bool")
% Check("v.1", "[1]", "0", "bool")
% Check("v.2", "[2]", "0", "bool")
@@ -3134,10 +3148,12 @@ void tst_Dumpers::dumper_data()
"std::vector<bool> v1(65, true);\n"
"std::vector<bool> v2(65);\n"
"unused(&v1, &v2);\n")
- % Check("v1", "<65 items>", "std::vector<bool>")
+ % Check("v1", "<65 items>", "std::vector<bool>").setForGdbOnly()
+ % Check("v1", "<65 items>", "std::vector<std::allocator<bool>>").setForLldbOnly()
% Check("v1.0", "[0]", "1", "bool")
% Check("v1.64", "[64]", "1", "bool")
- % Check("v2", "<65 items>", "std::vector<bool>")
+ % Check("v2", "<65 items>", "std::vector<bool>").setForGdbOnly()
+ % Check("v2", "<65 items>", "std::vector<std::allocator<bool>>").setForLldbOnly()
% Check("v2.0", "[0]", "0", "bool")
% Check("v2.64", "[64]", "0", "bool");
@@ -3703,15 +3719,11 @@ void tst_Dumpers::dumper_data()
% CoreProfile()
% Check("vm", "<6 items>", "@QVariantMap")
% Check("vm.0", "[0]", "", "@QMapNode<@QString, @QVariant>")
- % Check("vm.0.key", Value4("\"a\""), "@QString")
- % Check("vm.0.value", Value4("1"), "@QVariant (int)")
- % Check("vm.0.key", Value5("\"b\""), "@QString")
- % Check("vm.0.value", Value5("2"), "@QVariant (int)")
+ % Check("vm.0.key", "\"a\"", "@QString")
+ % Check("vm.0.value", "1", "@QVariant (int)")
% Check("vm.5", "[5]", "", "@QMapNode<@QString, @QVariant>")
- % Check("vm.5.key", Value4("\"f\""), "@QString")
- % Check("vm.5.value", Value4("\"2Some String\""), "@QVariant (QString)")
- % Check("vm.5.key", Value5("\"f\""), "@QString")
- % Check("vm.5.value", Value5("\"2Some String\""), "@QVariant (QString)");
+ % Check("vm.5.key", "\"f\"", "@QString")
+ % Check("vm.5.value", "\"2Some String\"", "@QVariant (QString)");
QTest::newRow("QVariantHash1")
<< Data("#include <QVariant>\n",