diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp
index fe92aef3bdef46b27554d260a2aa1eceb7d6de5b..fd89aef75b9b4d6906da94a8c4481fce16bf9e17 100644
--- a/tests/auto/debugger/tst_dumpers.cpp
+++ b/tests/auto/debugger/tst_dumpers.cpp
@@ -51,6 +51,16 @@ public:
           expectedValue(value), expectedType(type)
     {}
 
+    // Remove.
+    Check(const QByteArray &stuff)
+    {
+        QList<QByteArray> list = stuff.split(' ');
+        iname = list.value(0, QByteArray());
+        expectedName = iname.mid(iname.lastIndexOf('.'));
+        expectedValue = list.value(1, QByteArray());
+        expectedType = list.value(2, QByteArray());
+    }
+
     QByteArray iname;
     QByteArray expectedName;
     QByteArray expectedValue;
@@ -64,13 +74,23 @@ public:
          const QByteArray &type)
         : Check(iname, name, noValue, type)
     {}
+
+    CheckType(const QByteArray &stuff)
+    {
+        QList<QByteArray> list = stuff.split(' ');
+        iname = list.value(0, QByteArray());
+        expectedName = iname.mid(iname.lastIndexOf('.'));
+        expectedValue = noValue;
+        expectedType = list.value(1, QByteArray());
+    }
 };
 
 class Data
 {
 public:
     Data() {}
-    Data(const QByteArray &code) : code(code) {}
+    Data(const QByteArray &code)
+        : includes("#include <QtCore>"), code(code) {}
 
     Data(const QByteArray &includes, const QByteArray &code)
         : includes(includes), code(code)
@@ -285,24 +305,3310 @@ void tst_Dumpers::dumper_data()
     QTest::addColumn<Data>("data");
 
     QTest::newRow("QStringRef1")
-        << Data("#include <QString>",
-                "QString str = \"Hello\";\n"
-                "QStringRef ref(&str, 1, 2);")
-        % Check("ref", "ref", "\"el\"", "@NS@QStringRef");
+            << Data("QString str = \"Hello\";\n"
+                    "QStringRef ref(&str, 1, 2);")
+               % Check("ref", "ref", "\"el\"", "@NS@QStringRef");
 
     QTest::newRow("AnonymousStruct")
-        << Data("union {\n"
-                "     struct { int i; int b; };\n"
-                "     struct { float f; };\n"
-                "     double d;\n"
-                " } a = { { 42, 43 } };\n (void)a;")
-        % CheckType("a", "a", "union {...}")
-        % Check("a.b", "b", "43", "int")
-        % Check("a.d", "d", "9.1245819032257467e-313", "double")
-        % Check("a.f", "f", "5.88545355e-44", "float")
-        % Check("a.i", "i", "42", "int");
+            << Data("union {\n"
+                    "     struct { int i; int b; };\n"
+                    "     struct { float f; };\n"
+                    "     double d;\n"
+                    " } a = { { 42, 43 } };\n (void)a;")
+               % CheckType("a", "a", "union {...}")
+               % Check("a.b", "b", "43", "int")
+               % Check("a.d", "d", "9.1245819032257467e-313", "double")
+               % Check("a.f", "f", "5.88545355e-44", "float")
+               % Check("a.i", "i", "42", "int");
+
+    QTest::newRow("QByteArray0")
+            << Data("QByteArray ba;")
+               % Check("ba "" QByteArray");
+
+    QTest::newRow("QByteArray1")
+            << Data("QByteArray ba = \"Hello\\\"World;\n"
+                    "ba += char(0);\n"
+                    "ba += 1;\n"
+                    "ba += 2;\n")
+               % Check("ba", "ba", "\"Hello\"World\"", "QByteArray")
+               % Check("ba.0", "0", "72 'H'", "char")
+               % Check("ba.11", "11", "0 '\0'", "char")
+               % Check("ba.12", "12", "1", "char")
+               % Check("ba.13", "13", "2", "char");
+
+    QTest::newRow("QByteArray2")
+            << Data("QByteArray ba;\n"
+                    "for (int i = 256; --i >= 0; )\n"
+                    "    ba.append(char(i));\n"
+                    "QString s(10000, 'x');\n"
+                    "std::string ss(10000, 'c');")
+               % CheckType("ba", "ba", "QByteArray")
+               % Check("s", "s", QByteArray(10000, 'x'), "QByteArray")
+               % Check("ss", "ss", QByteArray(10000, 'c'), "QByteArray");
+
+    QTest::newRow("QByteArray3")
+            << Data("const char *str1 = \"\356\";\n"
+                    "const char *str2 = \"\xee\";\n"
+                    "const char *str3 = \"\\ee\";\n"
+                    "QByteArray buf1(str1);\n"
+                    "QByteArray buf2(str2);\n"
+                    "QByteArray buf3(str3);\n")
+               % Check("buf1", "buf1", "î", "QByteArray")
+               % Check("buf2", "buf2", "î", "QByteArray")
+               % Check("buf3", "buf3", "\ee", "QByteArray")
+               % CheckType("str1", "str1", "char *");
+
+    QTest::newRow("QByteArray4")
+            << Data("char data[] = { 'H', 'e', 'l', 'l', 'o' };\n"
+                    "QByteArray ba1 = QByteArray::fromRawData(data, 4);\n"
+                    "QByteArray ba2 = QByteArray::fromRawData(data + 1, 4);\n")
+               % Check("ba1", "ba1", "\"Hell\"", "QByteArray")
+               % Check("ba2", "ba2", "\"ello\"", "QByteArray");
+
+    QTest::newRow("QDate0")
+            << Data("QDate date;\n")
+               % CheckType("date", "date", "QDate")
+               % Check("date.(ISO)", "date.(ISO)", "", "QString")
+               % Check("date.(Locale)", "date.(Locale)", "", "QString")
+               % Check("date.(SystemLocale)", "date.(SystemLocale)" ,"", "QString")
+               % Check("date.toString", "date.toString", "", "QString");
+
+    QTest::newRow("QDate1")
+            << Data("QDate date;\n"
+                    "date.setDate(1980, 1, 1);\n")
+               % CheckType("date", "date", "QDate")
+               % Check("date.(ISO)", "date.(ISO)", "", "QString")
+               % Check("date.(Locale)", "date.(Locale)", "", "QString")
+               % Check("date.(SystemLocale)", "date.(SystemLocale)" ,"", "QString")
+               % Check("date.toString", "date.toString", "", "QString");
+
+    QTest::newRow("QTime0")
+            << Data("QTime time;\n")
+               % CheckType("time QTime")
+               % Check("time.(ISO) "" QString")
+               % Check("time.(Locale) "" QString")
+               % Check("time.(SystemLocale) "" QString")
+               % Check("time.toString "" QString");
+
+    QTest::newRow("QTime1")
+            << Data("QTime time;\n"
+                    "time.setCurrentTime(12, 20, 20)\n")
+               % CheckType("time QTime")
+               % Check("time.(ISO) "" QString")
+               % Check("time.(Locale) "" QString")
+               % Check("time.(SystemLocale) "" QString")
+               % Check("time.toString "" QString");
+
+    QTest::newRow("QDateTime")
+            << Data("QDateTime date\n")
+               % CheckType("date QDateTime")
+               % Check("date.(ISO) "" QString")
+               % Check("date.(Locale) "" QString")
+               % Check("date.(SystemLocale) "" QString")
+               % Check("date.toString "" QString")
+               % Check("date.toUTC  QDateTime");
+
+    QTest::newRow("QDir")
+#ifdef Q_OS_WIN
+            << Data("QDir dir(\"C:\\\\Program Files\");")
+               % Check("dir", "C:/Program Files", "QDir")
+               % Check("dir.absolutePath", "C:/Program Files", "QString")
+               % Check("dir.canonicalPath", "C:/Program Files", "QString");
+#else
+            << Data("QDir dir(\"/tmp\");")
+               % Check("dir", "dir", "/tmp", "QDir")
+               % Check("dir.absolutePath", "absolutePath", "/tmp", "QString")
+               % Check("dir.canonicalPath", "canonicalPath",  "/tmp", "QString");
+#endif
+
+    QTest::newRow("QFileInfo")
+#ifdef Q_OS_WIN
+            << Data("QFile file(\"C:\\\\Program Files\\t\");\n"
+                    "file.setObjectName(\"A QFile instance\");\n"
+                    "QFileInfo fi(\"C:\\Program Files\\tt\");\n"
+                    "QString s = fi.absoluteFilePath();\n")
+               % Check("fi", "C:/Program Files/tt", "QFileInfo")
+               % Check("file", "C:\Program Files\t", "QFile")
+               % Check("s", "C:/Program Files/tt", "QString");
+#else
+            << Data("QFile file(\"/tmp//t\");\n"
+                    "file.setObjectName(\"A QFile instance\");\n"
+                    "QFileInfo fi(\"/tmp/tt\");\n"
+                    "QString s = fi.absoluteFilePath();\n")
+               % Check("fi", "fi", "/tmp/tt", "QFileInfo")
+               % Check("file", "file", "/tmp/t", "QFile")
+               % Check("s", "s", "/tmp/tt", "QString");
+#endif
+
+    QTest::newRow("QHash1")
+            << Data("QHash<QString, QList<int> > hash;\n"
+                    "hash.insert(\"Hallo\", QList<int>());\n"
+                    "hash.insert(\"Welt\", QList<int>() << 1);\n"
+                    "hash.insert(\"!\", QList<int>() << 1 << 2);\n")
+               % Check("hash", "hash", "<3 items>", "QHash<QString, QList<int>>")
+               % Check("hash.0", "0", "", "QHashNode<QString, QList<int>>")
+               % Check("hash.0.key", "key", "\"Hallo\"", "QString")
+               % Check("hash.0.value", "value", "<0 items>", "QList<int>")
+               % Check("hash.1", "1", "", "QHashNode<QString, QList<int>>")
+               % Check("hash.1.key", "key", "\"Welt\"", "QString")
+               % Check("hash.1.value", "value", "<1 items>", "QList<int>")
+               % Check("hash.1.value.0", "0", "1", "int")
+               % Check("hash.2", "2", "", "QHashNode<QString, QList<int>>")
+               % Check("hash.2.key", "key", "\"!\"", "QString")
+               % Check("hash.2.value", "value", "<2 items>", "QList<int>")
+               % Check("hash.2.value.0", "0", "1", "int")
+               % Check("hash.2.value.1", "1", "2", "int");
+
+    QTest::newRow("QHash2")
+            << Data("QHash<int, float> hash;\n"
+                    "hash[11] = 11.0;\n"
+                    "hash[22] = 22.0;\n")
+               % Check("hash", "hash", "<2 items>", "QHash<int, float>")
+               % Check("hash.22", "22", "22", "float")
+               % Check("hash.11", "11", "11", "float");
+
+    QTest::newRow("QHash3")
+            << Data("QHash<QString, int> hash;\n"
+                    "hash[\"22.0\"] = 22.0;\n"
+                    "hash[\"123.0\"] = 22.0;\n"
+                    "hash[\"111111ss111128.0\"] = 28.0;\n"
+                    "hash[\"11124.0\"] = 22.0;\n"
+                    "hash[\"1111125.0\"] = 22.0;\n"
+                    "hash[\"11111126.0\"] = 22.0;\n"
+                    "hash[\"111111127.0\"] = 27.0;\n"
+                    "hash[\"111111111128.0\"] = 28.0;\n"
+                    "hash[\"111111111111111111129.0\"] = 29.0;\n")
+               % Check("hash", "hash", "<9 items>", "QHash<QString, int>")
+               % Check("hash.0", "0", "", "QHashNode<QString, int>")
+               % Check("hash.0.key", "key", "\"123.0\"", "QString")
+               % Check("hash.0.value 22 int")
+               % Check("hash.8", "", "", "QHashNode<QString, int>")
+               % Check("hash.8.key", "key", "\"11124.0\"", "QString")
+               % Check("hash.8.value", "value", "22", "int");
+
+    QTest::newRow("QHash4")
+            << Data("QHash<QByteArray, float> hash;\n"
+                    "hash[\"22.0\"] = 22.0;\n"
+                    "hash[\"123.0\"] = 22.0;\n"
+                    "hash[\"111111ss111128.0\"] = 28.0;\n"
+                    "hash[\"11124.0\"] = 22.0;\n"
+                    "hash[\"1111125.0\"] = 22.0;\n"
+                    "hash[\"11111126.0\"] = 22.0;\n"
+                    "hash[\"111111127.0\"] = 27.0;\n"
+                    "hash[\"111111111128.0\"] = 28.0;\n"
+                    "hash[\"111111111111111111129.0\"] = 29.0;\n")
+               % Check("hash <9 items> QHash<QByteArray, float>")
+               % Check("hash.0   QHashNode<QByteArray, float>")
+               % Check("hash.0.key \"123.0\" QByteArray")
+               % Check("hash.0.value 22 float")
+               % Check("hash.8   QHashNode<QByteArray, float>")
+               % Check("hash.8.key \"11124.0\" QByteArray")
+               % Check("hash.8.value 22 float");
+
+    QTest::newRow("QHash5")
+            << Data("QHash<int, QString> hash;\n"
+                    "hash[22] = \"22.0\";\n")
+               % Check("hash <1 items> QHash<int, QString>")
+               % Check("hash.0   QHashNode<int, QString>")
+               % Check("hash.0.key 22 int")
+               % Check("hash.0.value \"22.0\" QString");
+
+    QTest::newRow("QHash6")
+            << Data("QHash<QString, Foo> hash;\n"
+                    "hash[\"22.0\"] = Foo(22);\n"
+                    "hash[\"33.0\"] = Foo(33);\n")
+               % Check("hash <2 items> QHash<QString, Foo>")
+               % Check("hash.0   QHashNode<QString, Foo>")
+               % Check("hash.0.key \"22.0\" QString")
+               % CheckType("hash.0.value Foo")
+               % Check("hash.0.value.a 22 int")
+               % Check("hash.1   QHashNode<QString, Foo>")
+               % Check("hash.1.key \"33.0\" QString")
+               % CheckType("hash.1.value Foo");
+
+    QTest::newRow("QHash7")
+            << Data("QObject ob;\n"
+                    "QHash<QString, QPointer<QObject> > hash;\n"
+                    "hash.insert(\"Hallo\", QPointer<QObject>(&ob));\n"
+                    "hash.insert(\"Welt\", QPointer<QObject>(&ob));\n"
+                    "hash.insert(\".\", QPointer<QObject>(&ob));\n")
+               % Check("hash <3 items> QHash<QString, QPointer<QObject>>")
+               % Check("hash.0   QHashNode<QString, QPointer<QObject>>")
+               % Check("hash.0.key \"Hallo\" QString")
+               % CheckType("hash.0.value QPointer<QObject>")
+               % CheckType("hash.0.value.o QObject")
+               % Check("hash.2   QHashNode<QString, QPointer<QObject>>")
+               % Check("hash.2.key \".\" QString")
+               % CheckType("hash.2.value QPointer<QObject>");
+
+    QTest::newRow("QHashIntFloatIterator")
+            << Data("typedef QHash<int, float> Hash;\n"
+                    "Hash hash;\n"
+                    "hash[11] = 11.0;\n"
+                    "hash[22] = 22.0;\n"
+                    "hash[33] = 33.0;\n"
+                    "hash[44] = 44.0;\n"
+                    "hash[55] = 55.0;\n"
+                    "hash[66] = 66.0;\n"
+                    "Hash::iterator it1 = hash.begin();\n"
+                    "Hash::iterator it2 = it1; ++it2;\n"
+                    "Hash::iterator it3 = it2; ++it3;\n"
+                    "Hash::iterator it4 = it3; ++it4;\n"
+                    "Hash::iterator it5 = it4; ++it5;\n"
+                    "Hash::iterator it6 = it5; ++it6;\n")
+               % Check("hash <6 items> qhash::Hash")
+               % Check("hash.11 11 float")
+               % Check("it1.key 55 int")
+               % Check("it1.value 55 float")
+               % Check("it6.key 33 int")
+               % Check("it6.value 33 float");
+
+    QTest::newRow("QHostAddress")
+            << Data("QHostAddress ha1(129u * 256u * 256u * 256u + 130u);\n"
+                    "QHostAddress ha2(\"127.0.0.1\");\n")
+               % Check("ha1 129.0.0.130 QHostAddress")
+               % Check("ha2 \"127.0.0.1\" QHostAddress");
+
+    QTest::newRow("QImage")
+            << Data("#include <QImage>\n"
+                    "#include <QPainter>\n",
+                    "QImage im(QSize(200, 200), QImage::Format_RGB32);\n"
+                    "im.fill(QColor(200, 100, 130).rgba());\n"
+                    "QPainter pain;\n"
+                    "pain.begin(&im);\n")
+               % Check("im (200x200) QImage")
+               % CheckType("pain QPainter");
+
+    QTest::newRow("QPixmap")
+            << Data("#include <QImage>\n"
+                    "#include <QPainter>\n"
+                    "#include <QPixmap>\n"
+                    ,
+                    "QImage im(QSize(200, 200), QImage::Format_RGB32);\n"
+                    "im.fill(QColor(200, 100, 130).rgba());\n"
+                    "QPainter pain;\n"
+                    "pain.begin(&im);\n"
+                    "pain.drawLine(2, 2, 130, 130);\n"
+                    "pain.end();\n"
+                    "QPixmap pm = QPixmap::fromImage(im);\n")
+               % Check("im (200x200) QImage")
+               % CheckType("pain QPainter")
+               % Check("pm (200x200) QPixmap");
+
+    QTest::newRow("QLinkedListInt")
+            << Data("QLinkedList<int> list;\n"
+                    "list.append(101);\n"
+                    "list.append(102);\n")
+               % Check("list <2 items> QLinkedList<int>")
+               % Check("list.0 101 int")
+               % Check("list.1 102 int");
+
+    QTest::newRow("QLinkedListUInt")
+            << Data("QLinkedList<uint> list;\n"
+                    "list.append(103);\n"
+                    "list.append(104);\n")
+               % Check("list <2 items> QLinkedList<unsigned int>")
+               % Check("list.0 103 unsigned int")
+               % Check("list.1 104 unsigned int");
+
+    QTest::newRow("QLinkedListFooStar")
+            << Data("QLinkedList<Foo *> list;\n"
+                    "list.append(new Foo(1));\n"
+                    "list.append(0);\n"
+                    "list.append(new Foo(3));\n")
+               % Check("list <3 items> QLinkedList<Foo*>")
+               % CheckType("list.0 Foo")
+               % Check("list.0.a 1 int")
+               % Check("list.1 0x0 Foo *")
+               % CheckType("list.2 Foo")
+               % Check("list.2.a 3 int");
+
+    QTest::newRow("QLinkedListULongLong")
+            << Data("QLinkedList<qulonglong> list;\n"
+                    "list.append(42);\n"
+                    "list.append(43);\n")
+               % Check("list <2 items> QLinkedList<unsigned long long>")
+               % Check("list.0 42 unsigned long long")
+               % Check("list.1 43 unsigned long long");
+
+    QTest::newRow("QLinkedListFoo")
+            << Data("QLinkedList<Foo> list;\n"
+                    "list.append(Foo(1));\n"
+                    "list.append(Foo(2));\n")
+               % Check("list <2 items> QLinkedList<Foo>")
+               % CheckType("list.0 Foo")
+               % Check("list.0.a 1 int")
+               % CheckType("list.1 Foo")
+               % Check("list.1.a 2 int");
+
+    QTest::newRow("QLinkedListStdString")
+            << Data("QLinkedList<std::string> list;\n"
+                    "list.push_back(\"aa\");\n"
+                    "list.push_back(\"bb\");\n")
+               % Check("list <2 items> QLinkedList<std::string>")
+               % Check("list.0 \"aa\" std::string")
+               % Check("list.1 \"bb\" std::string");
+
+    QTest::newRow("QListInt")
+            << Data("QList<int> big;\n"
+                    "for (int i = 0; i < 10000; ++i)\n"
+                    "    big.push_back(i);\n")
+               % Check("big <10000 items> QList<int>")
+               % Check("big.0 0 int")
+               % Check("big.1999 1999 int");
+
+    QTest::newRow("QListIntTakeFirst")
+            << Data("QList<int> l;\n"
+                    "l.append(0);\n"
+                    "l.append(1);\n"
+                    "l.append(2);\n"
+                    "l.takeFirst();\n")
+               % Check("l <2 items> QList<int>")
+               % Check("l.0 1 int");
+
+    QTest::newRow("QListStringTakeFirst")
+            << Data("QList<QString> l;\n"
+                    "l.append(\"0\");\n"
+                    "l.append(\"1\");\n"
+                    "l.append(\"2\");\n"
+                    "l.takeFirst();\n")
+               % Check("l <2 items> QList<QString>")
+               % Check("l.0 \"1\" QString");
+
+    QTest::newRow("QStringListTakeFirst")
+            << Data("QStringList l;\n"
+                    "l.append(\"0\");\n"
+                    "l.append(\"1\");\n"
+                    "l.append(\"2\");\n"
+                    "l.takeFirst();\n")
+               % Check("l <2 items> QStringList")
+               % Check("l.0 \"1\" QString");
+
+    QTest::newRow("QListIntStar")
+            << Data("QList<int *> l0, l;\n"
+                    "l.append(new int(1));\n"
+                    "l.append(new int(2));\n"
+                    "l.append(new int(3));\n")
+               % Check("l0 <0 items> QList<int*>")
+               % Check("l <3 items> QList<int*>")
+               % CheckType("l.0 int")
+               % CheckType("l.2 int");
+
+    QTest::newRow("QListUInt")
+            << Data("QList<uint> l0,l;\n"
+                    "l.append(101);\n"
+                    "l.append(102);\n"
+                    "l.append(102);\n")
+               % Check("l0 <0 items> QList<unsigned int>")
+               % Check("l <3 items> QList<unsigned int>")
+               % Check("l.0 101 unsigned int")
+               % Check("l.2 102 unsigned int");
+
+    QTest::newRow("QListUShort")
+            << Data("QList<ushort> l0,l;\n"
+                    "l.append(101);\n"
+                    "l.append(102);\n"
+                    "l.append(102);\n")
+               % Check("l0 <0 items> QList<unsigned short>")
+               % Check("l <3 items> QList<unsigned short>")
+               % Check("l.0 101 unsigned short")
+               % Check("l.2 102 unsigned short");
+
+    QTest::newRow("QListQChar")
+            << Data("QList<QChar> l0, l;\n"
+                    "l.append(QChar('a'));\n"
+                    "l.append(QChar('b'));\n"
+                    "l.append(QChar('c'));\n")
+               % Check("l0 <0 items> QList<QChar>")
+               % Check("l <3 items> QList<QChar>")
+               % Check("l.0 'a' (97) QChar")
+               % Check("l.2 'c' (99) QChar");
+
+    QTest::newRow("QListQULongLong")
+            << Data("QList<qulonglong> l0, l;\n"
+                    "l.append(101);\n"
+                    "l.append(102);\n"
+                    "l.append(102);\n")
+               % Check("l0 <0 items> QList<unsigned long long>")
+               % Check("l <3 items> QList<unsigned long long>")
+               % CheckType("l.0 unsigned long long")
+               % CheckType("l.2 unsigned long long");
+
+    QTest::newRow("QListStdString")
+            << Data("QList<std::string> l0, l;\n"
+                    "l.push_back(\"aa\");\n"
+                    "l.push_back(\"bb\");\n"
+                    "l.push_back(\"cc\");\n"
+                    "l.push_back(\"dd\");")
+               % Check("l0 <0 items> QList<std::string>")
+               % Check("l <4 items> QList<std::string>")
+               % CheckType("l.0 std::string")
+               % CheckType("l.3 std::string");
+
+   QTest::newRow("QListFoo")
+            << Data("QList<Foo> l0, l;\n"
+                    "for (int i = 0; i < 100; ++i)\n"
+                    "    l.push_back(i + 15);\n")
+               % Check("l0 <0 items> QList<Foo>")
+               % Check("l <100 items> QList<Foo>")
+               % CheckType("l.0 Foo")
+               % CheckType("l.99 Foo");
+
+   QTest::newRow("QListReverse")
+           << Data("QList<int> l = QList<int>() << 1 << 2 << 3;\n"
+                   "typedef std::reverse_iterator<QList<int>::iterator> Reverse;\n"
+                   "Reverse rit(l.end());\n"
+                   "Reverse rend(l.begin());\n"
+                   "QList<int> r;\n"
+                   "while (rit != rend)\n"
+                   "    r.append(*rit++);\n")
+              % Check("l <3 items> QList<int>")
+              % Check("l.0 1 int")
+              % Check("l.1 2 int")
+              % Check("l.2 3 int")
+              % Check("r <3 items> QList<int>")
+              % Check("r.0 3 int")
+              % Check("r.1 2 int")
+              % Check("r.2 1 int")
+              % CheckType("rend qlist::Reverse")
+              % CheckType("rit qlist::Reverse");
+
+   QTest::newRow("QLocale")
+           << Data("QLocale loc = QLocale::system();\n"
+                   "QLocale::MeasurementSystem m = loc.measurementSystem();\n")
+              % CheckType("loc QLocale")
+              % CheckType("m QLocale::MeasurementSystem");
+
+
+   QTest::newRow("QMapUIntStringList")
+           << Data("QMap<uint, QStringList> map;\n"
+                   "map[11] = QStringList() << \"11\";\n"
+                   "map[22] = QStringList() << \"22\";\n")
+              % Check("map <2 items> QMap<unsigned int, QStringList>")
+              % Check("map.0   QMapNode<unsigned int, QStringList>")
+              % Check("map.0.key 11 unsigned int")
+              % Check("map.0.value <1 items> QStringList")
+              % Check("map.0.value.0 \"11\" QString")
+              % Check("map.1   QMapNode<unsigned int, QStringList>")
+              % Check("map.1.key 22 unsigned int")
+              % Check("map.1.value <1 items> QStringList")
+              % Check("map.1.value.0 \"22\" QString");
+
+   QTest::newRow("QMapUIntStringListTypedef")
+           << Data("typedef QMap<uint, QStringList> T;\n"
+                   "T map;\n"
+                   "map[11] = QStringList() << \"11\";\n"
+                   "map[22] = QStringList() << \"22\";\n")
+              % Check("map <2 items> qmap::T");
+
+   QTest::newRow("QMapUIntFloat")
+           << Data("QMap<uint, float> map;\n"
+                   "map[11] = 11.0;\n"
+                   "map[22] = 22.0;\n")
+              % Check("map <2 items> QMap<unsigned int, float>")
+              % Check("map.11 11 float")
+              % Check("map.22 22 float");
+
+   QTest::newRow("QMapStringFloat")
+           << Data("QMap<QString, float> map;\n"
+                   "map[\"22.0\"] = 22.0;\n")
+              % Check("map <1 items> QMap<QString, float>")
+              % Check("map.0   QMapNode<QString, float>")
+              % Check("map.0.key \"22.0\" QString")
+              % Check("map.0.value 22 float");
+
+   QTest::newRow("QMapIntString")
+           << Data("QMap<int, QString> map;\n"
+                   "map[22] = \"22.0\";\n")
+              % Check("map <1 items> QMap<int, QString>")
+              % Check("map.0   QMapNode<int, QString>")
+              % Check("map.0.key 22 int")
+              % Check("map.0.value \"22.0\" QString");
+
+   QTest::newRow("QMapStringFoo")
+           << Data("QMap<QString, Foo> map;\n"
+                   "map[\"22.0\"] = Foo(22);\n"
+                   "map[\"33.0\"] = Foo(33);\n")
+              % Check("map <2 items> QMap<QString, Foo>")
+              % Check("map.0   QMapNode<QString, Foo>")
+              % Check("map.0.key \"22.0\" QString")
+              % CheckType("map.0.value Foo")
+              % Check("map.0.value.a 22 int")
+              % Check("map.1   QMapNode<QString, Foo>")
+              % Check("map.1.key \"33.0\" QString")
+              % CheckType("map.1.value Foo")
+              % Check("map.1.value.a 33 int");
+
+   QTest::newRow("QMapStringPointer")
+           << Data("QObject ob;\n"
+                   "QMap<QString, QPointer<QObject> > map;\n"
+                   "map.insert(\"Hallo\", QPointer<QObject>(&ob));\n"
+                   "map.insert(\"Welt\", QPointer<QObject>(&ob));\n"
+                   "map.insert(\".\", QPointer<QObject>(&ob));\n")
+              % Check("map <3 items> QMap<QString, QPointer<QObject>>")
+              % Check("map.0   QMapNode<QString, QPointer<QObject>>")
+              % Check("map.0.key \".\" QString")
+              % CheckType("map.0.value QPointer<QObject>")
+              % CheckType("map.0.value.o QObject")
+              % Check("map.1   QMapNode<QString, QPointer<QObject>>")
+              % Check("map.1.key \"Hallo\" QString")
+              % Check("map.2   QMapNode<QString, QPointer<QObject>>")
+              % Check("map.2.key \"Welt\" QString");
+
+   QTest::newRow("QMapStringList")
+           << Data("QList<nsA::nsB::SomeType *> x;\n"
+                   "x.append(new nsA::nsB::SomeType(1));\n"
+                   "x.append(new nsA::nsB::SomeType(2));\n"
+                   "x.append(new nsA::nsB::SomeType(3));\n"
+                   "QMap<QString, QList<nsA::nsB::SomeType *> > map;\n"
+                   "map[\"foo\"] = x;\n"
+                   "map[\"bar\"] = x;\n"
+                   "map[\"1\"] = x;\n"
+                   "map[\"2\"] = x;\n")
+              % Check("map <4 items> QMap<QString, QList<nsA::nsB::SomeType*>>")
+              % Check("map.0   QMapNode<QString, QList<nsA::nsB::SomeType*>>")
+              % Check("map.0.key \"1\" QString")
+              % Check("map.0.value <3 items> QList<nsA::nsB::SomeType*>")
+              % CheckType("map.0.value.0 nsA::nsB::SomeType")
+              % Check("map.0.value.0.a 1 int")
+              % CheckType("map.0.value.1 nsA::nsB::SomeType")
+              % Check("map.0.value.1.a 2 int")
+              % CheckType("map.0.value.2 nsA::nsB::SomeType")
+              % Check("map.0.value.2.a 3 int")
+              % Check("map.3   QMapNode<QString, QList<nsA::nsB::SomeType*>>")
+              % Check("map.3.key \"foo\" QString")
+              % Check("map.3.value <3 items> QList<nsA::nsB::SomeType*>")
+              % CheckType("map.3.value.2 nsA::nsB::SomeType")
+              % Check("map.3.value.2.a 3 int")
+              % Check("x <3 items> QList<nsA::nsB::SomeType*>");
+
+   QTest::newRow("QMultiMapUintFloat")
+           << Data("QMultiMap<uint, float> map;\n"
+                   "map.insert(11, 11.0);\n"
+                   "map.insert(22, 22.0);\n"
+                   "map.insert(22, 33.0);\n"
+                   "map.insert(22, 34.0);\n"
+                   "map.insert(22, 35.0);\n"
+                   "map.insert(22, 36.0);\n")
+              % Check("map <6 items> QMultiMap<unsigned int, float>")
+              % Check("map.0 11 float")
+              % Check("map.5 22 float");
+
+   QTest::newRow("QMultiMapStringFloat")
+           << Data("QMultiMap<QString, float> map;\n"
+                   "map.insert(\"22.0\", 22.0);\n")
+              % Check("map <1 items> QMultiMap<QString, float>")
+              % Check("map.0   QMapNode<QString, float>")
+              % Check("map.0.key \"22.0\" QString")
+              % Check("map.0.value 22 float");
+
+   QTest::newRow("QMultiMapIntString")
+           << Data("QMultiMap<int, QString> map;\n"
+                   "map.insert(22, \"22.0\");\n")
+              % Check("map <1 items> QMultiMap<int, QString>")
+              % Check("map.0   QMapNode<int, QString>")
+              % Check("map.0.key 22 int")
+              % Check("map.0.value \"22.0\" QString");
+
+   QTest::newRow("QMultiMapStringFoo")
+           << Data("QMultiMap<QString, Foo> map;\n"
+                   "map.insert(\"22.0\", Foo(22));\n"
+                   "map.insert(\"33.0\", Foo(33));\n"
+                   "map.insert(\"22.0\", Foo(22));\n")
+              % Check("map <3 items> QMultiMap<QString, Foo>")
+              % Check("map.0   QMapNode<QString, Foo>")
+              % Check("map.0.key \"22.0\" QString")
+              % CheckType("map.0.value Foo")
+              % Check("map.0.value.a 22 int")
+              % Check("map.2   QMapNode<QString, Foo>");
+
+    QTest::newRow("QMultiMapStringPointer")
+                                                                                       << Data("QObject ob;\n"
+        "QMultiMap<QString, QPointer<QObject> > map;\n"
+        "map.insert(\"Hallo\", QPointer<QObject>(&ob));\n"
+        "map.insert(\"Welt\", QPointer<QObject>(&ob));\n"
+        "map.insert(\".\", QPointer<QObject>(&ob));\n"
+        "map.insert(\".\", QPointer<QObject>(&ob));\n")
+         % Check("map <4 items> QMultiMap<QString, QPointer<QObject>>")
+         % Check("map.0   QMapNode<QString, QPointer<QObject>>")
+         % Check("map.0.key \".\" QString")
+         % CheckType("map.0.value QPointer<QObject>")
+         % Check("map.1   QMapNode<QString, QPointer<QObject>>")
+         % Check("map.1.key \".\" QString")
+         % Check("map.2   QMapNode<QString, QPointer<QObject>>")
+         % Check("map.2.key \"Hallo\" QString")
+         % Check("map.3   QMapNode<QString, QPointer<QObject>>")
+         % Check("map.3.key \"Welt\" QString");
+
+
+    QTest::newRow("QObject1")
+                                       << Data("QObject parent;\n"
+        "parent.setObjectName(\"A Parent\");\n"
+        "QObject child(&parent);\n"
+        "child.setObjectName(\"A Child\");\n"
+        "QObject::connect(&child, SIGNAL(destroyed()), &parent, SLOT(deleteLater()));\n"
+        "QObject::disconnect(&child, SIGNAL(destroyed()), &parent, SLOT(deleteLater()));\n"
+        "child.setObjectName(\"A renamed Child\");\n")
+         % Check("child \"A renamed Child\" QObject")
+         % Check("parent \"A Parent\" QObject");
+
+    QByteArray objectData =
+"    namespace Names {\n"
+"        namespace Bar {\n"
+"\n"
+"        struct Ui { Ui() { w = 0; } QWidget *w; };\n"
+"\n"
+"        class TestObject : public QObject\n"
+"        {\n"
+"            Q_OBJECT\n"
+"        public:\n"
+"            TestObject(QObject *parent = 0)\n"
+"                : QObject(parent)\n"
+"            {\n"
+"                m_ui = new Ui;\n"
+"                #if USE_GUILIB\n"
+"                m_ui->w = new QWidget;\n"
+"                #else\n"
+"                m_ui->w = 0;\n"
+"                #endif\n"
+"            }\n"
+"\n"
+"            Q_PROPERTY(QString myProp1 READ myProp1 WRITE setMyProp1)\n"
+"            QString myProp1() const { return m_myProp1; }\n"
+"            Q_SLOT void setMyProp1(const QString&mt) { m_myProp1 = mt; }\n"
+"\n"
+"            Q_PROPERTY(QString myProp2 READ myProp2 WRITE setMyProp2)\n"
+"            QString myProp2() const { return m_myProp2; }\n"
+"            Q_SLOT void setMyProp2(const QString&mt) { m_myProp2 = mt; }\n"
+"\n"
+"        public:\n"
+"            Ui *m_ui;\n"
+"            QString m_myProp1;\n"
+"            QString m_myProp2;\n"
+"        };\n"
+"\n"
+"        } // namespace Bar\n"
+"    } // namespace Names\n"
+"\n";
+
+    QTest::newRow("QObject2")
+            << Data(objectData,
+                    "Names::Bar::TestObject test;\n"
+                    "test.setMyProp1(\"HELLO\");\n"
+                    "test.setMyProp2(\"WORLD\");\n"
+                    "QString s = test.myProp1();\n"
+                    "s += test.myProp2();\n")
+               % Check("s \"HELLOWORLD\" QString")
+               % Check("test  qobject::Names::Bar::TestObject");
+
+//"    #if 1\n"
+//"        #if USE_GUILIB\n"
+//"        QWidget ob;\n"
+//"        ob.setObjectName("An Object");\n"
+//"        ob.setProperty("USER DEFINED 1", 44);\n"
+//"        ob.setProperty("USER DEFINED 2", QStringList() << "FOO" << "BAR");\n"
+//"        QObject ob1;\n"
+//"        ob1.setObjectName("Another Object");\n"
+//"\n"
+//"        QObject::connect(&ob, SIGNAL(destroyed()), &ob1, SLOT(deleteLater()));\n"
+//"        QObject::connect(&ob, SIGNAL(destroyed()), &ob1, SLOT(deleteLater()));\n"
+//"        //QObject::connect(&app, SIGNAL(lastWindowClosed()), &ob, SLOT(deleteLater()));\n"
+//"        #endif\n"
+//"    #endif\n"
+//"\n"
+//"    #if 0\n"
+//"        QList<QObject *> obs;\n"
+//"        obs.append(&ob);\n"
+//"        obs.append(&ob1);\n"
+//"        obs.append(0);\n"
+//"        obs.append(&app);\n"
+//"        ob1.setObjectName("A Subobject");\n"
+//"    #endif\n"
+//"    }\n"
+//"\n"
+
+    QByteArray senderData =
+            "    class Sender : public QObject\n"
+            "    {\n"
+            "        Q_OBJECT\n"
+            "    public:\n"
+            "        Sender() { setObjectName(\"Sender\"); }\n"
+            "        void doEmit() { emit aSignal(); }\n"
+            "    signals:\n"
+            "        void aSignal();\n"
+            "    };\n"
+            "\n"
+            "    class Receiver : public QObject\n"
+            "    {\n"
+            "        Q_OBJECT\n"
+            "    public:\n"
+            "        Receiver() { setObjectName(\"Receiver\"); }\n"
+            "    public slots:\n"
+            "        void aSlot() {\n"
+            "            QObject *s = sender();\n"
+            "            if (s) {\n"
+            "                qDebug() << \"SENDER: \" << s;\n"
+            "            } else {\n"
+            "                qDebug() << \"NO SENDER\";\n"
+            "            }\n"
+            "        }\n"
+            "    };\n";
+
+    QByteArray derivedData =
+            "    class DerivedObjectPrivate : public QObjectPrivate\n"
+            "    {\n"
+            "    public:\n"
+            "        DerivedObjectPrivate() {\n"
+            "            m_extraX = 43;\n"
+            "            m_extraY.append(\"xxx\");\n"
+            "            m_extraZ = 1;\n"
+            "        }\n"
+            "        int m_extraX;\n"
+            "        QStringList m_extraY;\n"
+            "        uint m_extraZ : 1;\n"
+            "        bool m_extraA : 1;\n"
+            "        bool m_extraB;\n"
+            "    };\n"
+            "\n"
+            "    class DerivedObject : public QObject\n"
+            "    {\n"
+            "        Q_OBJECT\n"
+            "\n"
+            "    public:\n"
+            "        DerivedObject() : QObject(*new DerivedObjectPrivate, 0) {}\n"
+            "\n"
+            "        Q_PROPERTY(int x READ x WRITE setX)\n"
+            "        Q_PROPERTY(QStringList y READ y WRITE setY)\n"
+            "        Q_PROPERTY(uint z READ z WRITE setZ)\n"
+            "\n"
+            "        int x() const;\n"
+            "        void setX(int x);\n"
+            "        QStringList y() const;\n"
+            "        void setY(QStringList y);\n"
+            "        uint z() const;\n"
+            "        void setZ(uint z);\n"
+            "\n"
+            "    private:\n"
+            "        Q_DECLARE_PRIVATE(DerivedObject)\n"
+            "    };\n"
+            "\n"
+            "    int DerivedObject::x() const\n"
+            "    {\n"
+            "        Q_D(const DerivedObject);\n"
+            "        return d->m_extraX;\n"
+            "    }\n"
+            "\n"
+            "    void DerivedObject::setX(int x)\n"
+            "    {\n"
+            "        Q_D(DerivedObject);\n"
+            "        d->m_extraX = x;\n"
+            "        d->m_extraA = !d->m_extraA;\n"
+            "        d->m_extraB = !d->m_extraB;\n"
+            "    }\n"
+            "\n"
+            "    QStringList DerivedObject::y() const\n"
+            "    {\n"
+            "        Q_D(const DerivedObject);\n"
+            "        return d->m_extraY;\n"
+            "    }\n"
+            "\n"
+            "    void DerivedObject::setY(QStringList y)\n"
+            "    {\n"
+            "        Q_D(DerivedObject);\n"
+            "        d->m_extraY = y;\n"
+            "    }\n"
+            "\n"
+            "    uint DerivedObject::z() const\n"
+            "    {\n"
+            "        Q_D(const DerivedObject);\n"
+            "        return d->m_extraZ;\n"
+            "    }\n"
+            "\n"
+            "    void DerivedObject::setZ(uint z)\n"
+            "    {\n"
+            "        Q_D(DerivedObject);\n"
+            "        d->m_extraZ = z;\n"
+            "    }\n"
+            "\n"
+            "    #endif\n"
+            "\n";
+
+    QTest::newRow("QObjectData")
+            << Data(derivedData,
+                    "DerivedObject ob;\n"
+                    "ob.setX(26);\n")
+               % Check("ob.properties.x 26 QVariant (int)");
+
+
+    QTest::newRow("QRegExp")
+            << Data("QRegExp re(QString(\"a(.*)b(.*)c\"));\n"
+                    "QString str1 = \"a1121b344c\";\n"
+                    "QString str2 = \"Xa1121b344c\";\n"
+                    "int pos2 = re.indexIn(str2);\n"
+                    "int pos1 = re.indexIn(str1);\n")
+               % Check("re \"a(.*)b(.*)c\" QRegExp")
+               % Check("str1 \"a1121b344c\" QString")
+               % Check("str2 \"Xa1121b344c\" QString")
+               % Check("pos1 0 int")
+               % Check("pos2 1 int");
+
+    QTest::newRow("QPoint")
+            << Data("QPoint s0, s;\n"
+                    "s = QPoint(100, 200);\n")
+               % Check("s (0, 0) QPoint")
+               % Check("s (100, 200) QPoint");
+
+    QTest::newRow("QPointF")
+            << Data("QPointF s0, s;\n"
+                    "s = QPointF(100, 200);\n")
+               % Check("s (0, 0) QPointF")
+               % Check("s (100, 200) QPointF");
+
+    QTest::newRow("QRect")
+            << Data("QRect rect0, rect;\n"
+                    "rect = QRect(100, 100, 200, 200);\n")
+               % Check("rect 0x0+0+0 QRect")
+               % Check("rect 200x200+100+100 QRect");
+
+    QTest::newRow("QRectF")
+            << Data("QRectF rect0, rect;\n"
+                    "rect = QRectF(100, 100, 200, 200);\n")
+               % Check("rect 0x0+0+0 QRectF")
+               % Check("rect 200x200+100+100 QRectF");
+
+    QTest::newRow("QSize")
+            << Data("QSize s0, s;\n"
+                    "s = QSize(100, 200);\n")
+               % Check("s (-1, -1) QSize")
+               % Check("s (100, 200) QSize");
+
+    QTest::newRow("QSizeF")
+            << Data("QSizeF s0, s;\n"
+                    "s = QSizeF(100, 200);\n")
+               % Check("s0 (-1, -1) QSizeF")
+               % Check("s (100, 200) QSizeF");
+
+    QTest::newRow("QRegion")
+            << Data("QRegion region, region0, region1, region2, region4;\n"
+                    "region += QRect(100, 100, 200, 200);\n"
+                    "region0 = region;\n"
+                    "region += QRect(300, 300, 400, 500);\n"
+                    "region1 = region;\n"
+                    "region += QRect(500, 500, 600, 600);\n"
+                    "region2 = region;\n")
+               % Check("region <empty> QRegion")
+               % Check("region <1 items> QRegion")
+               % CheckType("region.extents QRect")
+               % Check("region.innerArea 40000 int")
+               % CheckType("region.innerRect QRect")
+               % Check("region.numRects 1 int")
+               % Check("region.rects <0 items> QVector<QRect>")
+               % Check("region <2 items> QRegion")
+               % CheckType("region.extents QRect")
+               % Check("region.innerArea 200000 int")
+               % CheckType("region.innerRect QRect")
+               % Check("region.numRects 2 int")
+               % Check("region.rects <2 items> QVector<QRect>")
+               % Check("region <4 items> QRegion")
+               % CheckType("region.extents QRect")
+               % Check("region.innerArea 360000 int")
+               % CheckType("region.innerRect QRect")
+               % Check("region.numRects 4 int")
+               % Check("region.rects <8 items> QVector<QRect>")
+               % Check("region <4 items> QRegion");
+
+    QTest::newRow("QSettings")
+            << Data("QCoreApplication app(argc, argv);\n"
+                    "QSettings settings(\"/tmp/test.ini\", QSettings::IniFormat);\n"
+                    "QVariant value = settings.value(\"item1\", \"\").toString();\n")
+               % Check("settings  QSettings")
+               % Check("settings.@1 "" QObject")
+               % Check("value "" QVariant (QString)");
+
+    QTest::newRow("QSet1")
+            << Data("QSet<int> s;\n"
+                    "s.insert(11);\n"
+                    "s.insert(22);\n")
+               % Check("s <2 items> QSet<int>")
+               % Check("s.22 22 int")
+               % Check("s.11 11 int");
+
+    QTest::newRow("QSet2")
+            << Data("QSet<QString> s;\n"
+                    "s.insert(\"11.0\");\n"
+                    "s.insert(\"22.0\");\n")
+               % Check("s <2 items> QSet<QString>")
+               % Check("s.0 \"11.0\" QString")
+               % Check("s.1 \"22.0\" QString");
+
+    QTest::newRow("QSet3")
+            << Data("QObject ob;\n"
+                    "QSet<QPointer<QObject> > s;\n"
+                    "QPointer<QObject> ptr(&ob);\n"
+                    "s.insert(ptr);\n"
+                    "s.insert(ptr);\n"
+                    "s.insert(ptr);\n")
+               % Check("s <1 items> QSet<QPointer<QObject>>")
+               % CheckType("s.0 QPointer<QObject>");
+
+
+    QByteArray sharedData =
+            "    class EmployeeData : public QSharedData\n"
+            "    {\n"
+            "    public:\n"
+            "        EmployeeData() : id(-1) { name.clear(); }\n"
+            "        EmployeeData(const EmployeeData &other)\n"
+            "            : QSharedData(other), id(other.id), name(other.name) { }\n"
+            "        ~EmployeeData() { }\n"
+            "\n"
+            "        int id;\n"
+            "        QString name;\n"
+            "    };\n"
+            "\n"
+            "    class Employee\n"
+            "    {\n"
+            "    public:\n"
+            "        Employee() { d = new EmployeeData; }\n"
+            "        Employee(int id, QString name) {\n"
+            "            d = new EmployeeData;\n"
+            "            setId(id);\n"
+            "            setName(name);\n"
+            "        }\n"
+            "        Employee(const Employee &other)\n"
+            "              : d (other.d)\n"
+            "        {\n"
+            "        }\n"
+            "        void setId(int id) { d->id = id; }\n"
+            "        void setName(QString name) { d->name = name; }\n"
+            "\n"
+            "        int id() const { return d->id; }\n"
+            "        QString name() const { return d->name; }\n"
+            "\n"
+            "       private:\n"
+            "         QSharedDataPointer<EmployeeData> d;\n"
+            "    };\n";
+
+
+    QTest::newRow("QSharedPointer1")
+            << Data("QSharedPointer<int> ptr2 = ptr;\n"
+                    "QSharedPointer<int> ptr3 = ptr;\n");
+
+    QTest::newRow("QSharedPointer2")
+            << Data("QSharedPointer<QString> ptr(new QString(\"hallo\"));\n"
+                    "QSharedPointer<QString> ptr2 = ptr;\n"
+                    "QSharedPointer<QString> ptr3 = ptr;\n");
+
+    QTest::newRow("QSharedPointer3")
+            << Data("QSharedPointer<int> iptr(new int(43));\n"
+                    "QWeakPointer<int> ptr(iptr);\n"
+                    "QWeakPointer<int> ptr2 = ptr;\n"
+                    "QWeakPointer<int> ptr3 = ptr;\n");
+
+    QTest::newRow("QSharedPointer4")
+            << Data("QSharedPointer<QString> sptr(new QString(\"hallo\"));\n"
+                    "QWeakPointer<QString> ptr(sptr);\n"
+                    "QWeakPointer<QString> ptr2 = ptr;\n"
+                    "QWeakPointer<QString> ptr3 = ptr;\n");
+
+    QTest::newRow("QSharedPointer5")
+            << Data("QSharedPointer<Foo> fptr(new Foo(1));\n"
+                    "QWeakPointer<Foo> ptr(fptr);\n"
+                    "QWeakPointer<Foo> ptr2 = ptr;\n"
+                    "QWeakPointer<Foo> ptr3 = ptr;\n");
+
+    QTest::newRow("QXmlAttributes")
+            << Data("QXmlAttributes atts;\n"
+                    "atts.append(\"name1\", \"uri1\", \"localPart1\", \"value1\");\n"
+                    "atts.append(\"name2\", \"uri2\", \"localPart2\", \"value2\");\n"
+                    "atts.append(\"name3\", \"uri3\", \"localPart3\", \"value3\");\n")
+               % CheckType("atts QXmlAttributes")
+               % CheckType("atts.[vptr] ")
+               % Check("atts.attList <3 items> QXmlAttributes::AttributeList")
+               % CheckType("atts.attList.0 QXmlAttributes::Attribute")
+               % Check("atts.attList.0.localname \"localPart1\" QString")
+               % Check("atts.attList.0.qname \"name1\" QString")
+               % Check("atts.attList.0.uri \"uri1\" QString")
+               % Check("atts.attList.0.value \"value1\" QString")
+               % CheckType("atts.attList.1 QXmlAttributes::Attribute")
+               % Check("atts.attList.1.localname \"localPart2\" QString")
+               % Check("atts.attList.1.qname \"name2\" QString")
+               % Check("atts.attList.1.uri \"uri2\" QString")
+               % Check("atts.attList.1.value \"value2\" QString")
+               % CheckType("atts.attList.2 QXmlAttributes::Attribute")
+               % 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")
+               % CheckType("atts.d QXmlAttributesPrivate");
+
+    QTest::newRow("StdArray")
+            << Data("std::array<int, 4> a = { { 1, 2, 3, 4} };\n"
+                    "std::array<QString, 4> b = { { \"1\", \"2\", \"3\", \"4\"} };\n")
+               % Check("a <4 items> std::array<int, 4u>")
+               % Check("a <4 items> std::array<QString, 4u>");
+
+    QTest::newRow("StdComplex")
+            << Data("std::complex<double> c(1, 2);\n")
+               % Check("c (1.000000, 2.000000) std::complex<double>");
+
+    QTest::newRow("StdDequeInt")
+            << Data("std::deque<int> deque;\n"
+                    "deque.push_back(1);\n"
+                    "deque.push_back(2);\n")
+               % Check("deque <2 items> std::deque<int>")
+               % Check("deque.0 1 int")
+               % Check("deque.1 2 int");
+
+    QTest::newRow("StdDequeIntStar")
+            << Data("std::deque<int *> deque;\n"
+                    "deque.push_back(new int(1));\n"
+                    "deque.push_back(0);\n"
+                    "deque.push_back(new int(2));\n"
+                    "deque.pop_back();\n"
+                    "deque.pop_front();\n")
+               % Check("deque <3 items> std::deque<int*>")
+               % CheckType("deque.0 int")
+               % Check("deque.1 0x0 int *");
+
+    QTest::newRow("StdDequeFoo")
+            << Data("std::deque<Foo> deque;\n"
+                    "deque.push_back(1);\n"
+                    "deque.push_front(2);\n")
+               % Check("deque <2 items> std::deque<Foo>")
+               % CheckType("deque.0 Foo")
+               % Check("deque.0.a 2 int")
+               % CheckType("deque.1 Foo")
+               % Check("deque.1.a 1 int");
+
+    QTest::newRow("StdDequeFooStar")
+            << Data("std::deque<Foo *> deque;\n"
+                    "deque.push_back(new Foo(1));\n"
+                    "deque.push_back(new Foo(2));\n")
+               % Check("deque <2 items> std::deque<Foo*>")
+               % CheckType("deque.0 Foo")
+               % Check("deque.0.a 1 int")
+               % CheckType("deque.1 Foo")
+               % Check("deque.1.a 2 int");
+
+    QTest::newRow("StdHashSet")
+            << Data("using namespace __gnu_cxx;\n"
+                    "hash_set<int> h;\n"
+                    "h.insert(1);\n"
+                    "h.insert(194);\n"
+                    "h.insert(2);\n"
+                    "h.insert(3);\n")
+               % Check("h <4 items> __gnu__cxx::hash_set<int>")
+               % Check("h.0 194 int")
+               % Check("h.1 1 int")
+               % Check("h.2 2 int")
+               % Check("h.3 3 int");
+
+    QTest::newRow("StdListInt")
+            << Data("std::list<int> list;\n"
+                    "list.push_back(1);\n"
+                    "list.push_back(2);\n")
+               % Check("list <2 items> std::list<int>")
+               % Check("list.0 1 int")
+               % Check("list.1 2 int");
+
+    QTest::newRow("StdListIntStar")
+            << Data("std::list<int *> list;\n"
+                    "list.push_back(new int(1));\n"
+                    "list.push_back(0);\n"
+                    "list.push_back(new int(2));\n")
+               % Check("list <3 items> std::list<int*>")
+               % CheckType("list.0 int")
+               % Check("list.1 0x0 int *")
+               % CheckType("list.2 int");
+
+    QTest::newRow("StdListIntBig")
+            << Data("std::list<int> list;\n"
+                    "for (int i = 0; i < 10000; ++i)\n"
+                    "    list.push_back(i);\n")
+               % Check("list <more than 1000 items> std::list<int>")
+               % Check("list.0 0 int")
+               % Check("list.999 999 int");
+
+    QTest::newRow("StdListFoo")
+            << Data("std::list<Foo> list;\n"
+                    "list.push_back(15);\n"
+                    "list.push_back(16);\n")
+               % Check("list <2 items> std::list<Foo>")
+               % CheckType("list.0 Foo")
+               % Check("list.0.a 15 int")
+               % CheckType("list.1 Foo")
+               % Check("list.1.a 16 int");
+
+    QTest::newRow("StdListFooStar")
+            << Data("std::list<Foo *> list;\n"
+                    "list.push_back(new Foo(1));\n"
+                    "list.push_back(0);\n"
+                    "list.push_back(new Foo(2));\n")
+               % Check("list <3 items> std::list<Foo*>")
+               % CheckType("list.0 Foo")
+               % Check("list.0.a 1 int")
+               % Check("list.1 0x0 Foo *")
+               % CheckType("list.2 Foo")
+               % Check("list.2.a 2 int");
+
+    QTest::newRow("StdListBool")
+            << Data("std::list<bool> list;\n"
+                    "list.push_back(true);\n"
+                    "list.push_back(false);\n")
+               % Check("list <2 items> std::list<bool>")
+               % Check("list.0 true bool")
+               % Check("list.1 false bool");
+
+    QTest::newRow("StdMapStringFoo")
+            << Data("std::map<QString, Foo> map;\n"
+                    "map[\"22.0\"] = Foo(22);\n"
+                    "map[\"33.0\"] = Foo(33);\n"
+                    "map[\"44.0\"] = Foo(44);\n")
+               % Check("map <3 items> std::map<QString, Foo>")
+               % Check("map.0   std::pair<QString const, Foo>")
+               % Check("map.0.first \"22.0\" QString")
+               % CheckType("map.0.second Foo")
+               % Check("map.0.second.a 22 int")
+               % Check("map.1   std::pair<QString const, Foo>")
+               % Check("map.2.first \"44.0\" QString")
+               % CheckType("map.2.second Foo")
+               % Check("map.2.second.a 44 int");
+
+    QTest::newRow("StdMapCharStarFoo")
+            << Data("std::map<const char *, Foo> map;\n"
+                    "map[\"22.0\"] = Foo(22);\n"
+                    "map[\"33.0\"] = Foo(33);\n")
+               % Check("map <2 items> std::map<char const*, Foo>")
+               % Check("map.0   std::pair<char const* const, Foo>")
+               % CheckType("map.0.first char *")
+               % Check("map.0.first.*first 50 '2' char")
+               % CheckType("map.0.second Foo")
+               % Check("map.0.second.a 22 int")
+               % Check("map.1   std::pair<char const* const, Foo>")
+               % CheckType("map.1.first char *")
+               % Check("map.1.first.*first 51 '3' char")
+               % CheckType("map.1.second Foo")
+               % Check("map.1.second.a 33 int");
+
+    QTest::newRow("StdMapUIntUInt")
+            << Data("std::map<uint, uint> map;\n"
+                    "map[11] = 1;\n"
+                    "map[22] = 2;\n")
+               % Check("map <2 items> std::map<unsigned int, unsigned int>")
+               % Check("map.11 1 unsigned int")
+               % Check("map.22 2 unsigned int");
+
+    QTest::newRow("StdMapUIntStringList")
+            << Data("std::map<uint, QStringList> map;\n"
+                    "map[11] = QStringList() << \"11\";\n"
+                    "map[22] = QStringList() << \"22\";\n")
+               % Check("map <2 items> std::map<unsigned int, QStringList>")
+               % Check("map.0   std::pair<unsigned int const, QStringList>")
+               % Check("map.0.first 11 unsigned int")
+               % Check("map.0.second <1 items> QStringList")
+               % Check("map.0.second.0 \"11\" QString")
+               % Check("map.1   std::pair<unsigned int const, QStringList>")
+               % Check("map.1.first 22 unsigned int")
+               % Check("map.1.second <1 items> QStringList")
+               % Check("map.1.second.0 \"22\" QString");
+
+    QTest::newRow("StdMapUIntStringListTypedef")
+            << Data("typedef std::map<uint, QStringList> T;\n"
+                    "T map;\n"
+                    "map[11] = QStringList() << \"11\";\n"
+                    "map[22] = QStringList() << \"22\";\n");
+
+    QTest::newRow("StdMapUIntFloat")
+            << Data("std::map<uint, float> map;\n"
+                    "map[11] = 11.0;\n"
+                    "map[22] = 22.0;\n")
+               % Check("map <2 items> std::map<unsigned int, float>")
+               % Check("map.11 11 float")
+               % Check("map.22 22 float");
+
+    QTest::newRow("StdMapUIntFloatIterator")
+            << Data("typedef std::map<int, float> Map;\n"
+                    "Map map;\n"
+                    "map[11] = 11.0;\n"
+                    "map[22] = 22.0;\n"
+                    "map[33] = 33.0;\n"
+                    "map[44] = 44.0;\n"
+                    "map[55] = 55.0;\n"
+                    "map[66] = 66.0;\n"
+                    "Map::iterator it1 = map.begin();\n"
+                    "Map::iterator it2 = it1; ++it2;\n"
+                    "Map::iterator it3 = it2; ++it3;\n"
+                    "Map::iterator it4 = it3; ++it4;\n"
+                    "Map::iterator it5 = it4; ++it5;\n"
+                    "Map::iterator it6 = it5; ++it6;\n")
+               % Check("map <6 items> stdmap::Map")
+               % Check("map.11 11 float")
+               % Check("it1.first 11 int")
+               % Check("it1.second 11 float")
+               % Check("it6.first 66 int")
+               % Check("it6.second 66 float");
+
+    QTest::newRow("StdMapStringFloat")
+            << Data("std::map<QString, float> map;\n"
+                    "map[\"11.0\"] = 11.0;\n"
+                    "map[\"22.0\"] = 22.0;\n")
+               % Check("map <2 items> std::map<QString, float>")
+               % Check("map.0   std::pair<QString const, float>")
+               % Check("map.0.first \"11.0\" QString")
+               % Check("map.0.second 11 float")
+               % Check("map.1   std::pair<QString const, float>")
+               % Check("map.1.first \"22.0\" QString")
+               % Check("map.1.second 22 float");
+
+    QTest::newRow("StdMapIntString")
+            << Data("std::map<int, QString> map;\n"
+                    "map[11] = \"11.0\";\n"
+                    "map[22] = \"22.0\";\n")
+               % Check("map <2 items> std::map<int, QString>")
+               % Check("map.0   std::pair<int const, QString>")
+               % Check("map.0.first 11 int")
+               % Check("map.0.second \"11.0\" QString")
+               % Check("map.1   std::pair<int const, QString>")
+               % Check("map.1.first 22 int")
+               % Check("map.1.second \"22.0\" QString");
+
+               QTest::newRow("StdMapStringPointer")
+            << Data("QObject ob;\n"
+                    "std::map<QString, QPointer<QObject> > map;\n"
+                    "map[\"Hallo\"] = QPointer<QObject>(&ob);\n"
+                    "map[\"Welt\"] = QPointer<QObject>(&ob);\n"
+                    "map[\".\"] = QPointer<QObject>(&ob);\n")
+               % Check("map <3 items> std::map<QString, QPointer<QObject>>")
+               % Check("map.0   std::pair<QString const, QPointer<QObject>>")
+               % Check("map.0.first \".\" QString")
+               % CheckType("map.0.second QPointer<QObject>")
+               % Check("map.2   std::pair<QString const, QPointer<QObject>>")
+               % Check("map.2.first \"Welt\" QString");
+
+    QTest::newRow("StdUniquePtr")
+            << Data("std::unique_ptr<int> pi(new int(32));\n"
+                    "std::unique_ptr<Foo> pf(new Foo);\n")
+               % Check("pi 32 std::unique_ptr<int, std::default_delete<int> >")
+               % Check("pf 32 std::unique_ptr<Foo, std::default_delete<Foo> >");
+
+    QTest::newRow("StdSharedPtr")
+            << Data("std::shared_ptr<int> pi(new int(32));\n"
+                    "std::shared_ptr<Foo> pf(new Foo);\n")
+                    % Check("pi 32 std::shared_ptr<int, std::default_delete<int> >")
+                    % Check("pf 32 std::shared_ptr<Foo, std::default_delete<int> >");
+
+    QTest::newRow("StdSetInt")
+            << Data("std::set<int> set;\n"
+                    "set.insert(11);\n"
+                    "set.insert(22);\n"
+                    "set.insert(33);\n")
+               % Check("set <3 items> std::set<int>");
+
+    QTest::newRow("StdSetIntIterator")
+            << Data("typedef std::set<int> Set;\n"
+                    "Set set;\n"
+                    "set.insert(11.0);\n"
+                    "set.insert(22.0);\n"
+                    "set.insert(33.0);\n"
+                    "set.insert(44.0);\n"
+                    "set.insert(55.0);\n"
+                    "set.insert(66.0);\n"
+                    "Set::iterator it1 = set.begin();\n"
+                    "Set::iterator it2 = it1; ++it2;\n"
+                    "Set::iterator it3 = it2; ++it3;\n"
+                    "Set::iterator it4 = it3; ++it4;\n"
+                    "Set::iterator it5 = it4; ++it5;\n"
+                    "Set::iterator it6 = it5; ++it6;\n")
+               % Check("set <6 items> stdset::Set")
+               % Check("it1.value 11 int")
+               % Check("it6.value 66 int");
+
+    QTest::newRow("StdSetString")
+            << Data("std::set<QString> set;\n"
+                    "set.insert(\"22.0\");\n")
+               % Check("set <1 items> std::set<QString>")
+               % Check("set.0 \"22.0\" QString");
+
+    QTest::newRow("StdSetPointer")
+            << Data("QObject ob;\n"
+                    "std::set<QPointer<QObject> > hash;\n"
+                    "QPointer<QObject> ptr(&ob);\n")
+               % Check("hash <0 items> std::set<QPointer<QObject>, std::less<QPointer<QObject>>, std::allocator<QPointer<QObject>>>")
+               % Check("ob \"\" QObject")
+               % CheckType("ptr QPointer<QObject>");
+
+    QTest::newRow("StdStack1")
+            << Data("std::stack<int *> s0, s;\n"
+                    "s.push(new int(1));\n"
+                    "s.push(0);\n"
+                    "s.push(new int(2));\n")
+               % Check("s0 <0 items> std::stack<int*>")
+               % Check("s <3 items> std::stack<int*>")
+               % CheckType("s.0 int")
+               % Check("s.1 0x0 int *")
+               % CheckType("s.2 int");
+
+    QTest::newRow("StdStack2")
+            << Data("std::stack<int> s0, s;\n"
+                    "s.push(1);\n"
+                    "s.push(2);\n")
+               % Check("s0 <0 items> std::stack<int>")
+               % Check("s <2 items> std::stack<int>")
+               % Check("s.0 1 int")
+               % Check("s.1 2 int");
+
+    QTest::newRow("StdStack3")
+            << Data("std::stack<Foo *> s, s0;\n"
+                    "s.push(new Foo(1));\n"
+                    "s.push(new Foo(2));\n")
+               % Check("s <0 items> std::stack<Foo*>")
+               % Check("s <1 items> std::stack<Foo*>")
+               % Check("s <2 items> std::stack<Foo*>")
+               % CheckType("s.0 Foo")
+               % Check("s.0.a 1 int")
+               % CheckType("s.1 Foo")
+               % Check("s.1.a 2 int");
+
+    QTest::newRow("StdStack4")
+            << Data("std::stack<Foo> s0, s;\n"
+                    "s.push(1);\n"
+                    "s.push(2);\n")
+               % Check("s0 <0 items> std::stack<Foo>")
+               % Check("s <2 items> std::stack<Foo>")
+               % CheckType("s.0 Foo")
+               % Check("s.0.a 1 int")
+               % CheckType("s.1 Foo")
+               % Check("s.1.a 2 int");
+
+    QTest::newRow("StdString1")
+            << Data("std::string str0, str;\n"
+                    "std::wstring wstr0, wstr;\n"
+                    "str += \"b\";\n"
+                    "wstr += wchar_t('e');\n"
+                    "str += \"d\";\n"
+                    "wstr += wchar_t('e');\n"
+                    "str += \"e\";\n"
+                    "str += \"b\";\n"
+                    "str += \"d\";\n"
+                    "str += \"e\";\n"
+                    "wstr += wchar_t('e');\n"
+                    "wstr += wchar_t('e');\n"
+                    "str += \"e\";\n")
+               % Check("str0 \"\" std::string")
+               % Check("wstr0 \"\" std::wstring")
+               % Check("str \"bdebdee\" std::string")
+               % Check("wstr \"eeee\" std::wstring");
+
+    QTest::newRow("StdString2")
+            << Data("std::string str = \"foo\";\n"
+                    "std::vector<std::string> v;\n"
+                    "QList<std::string> l0, l;\n"
+                    "v.push_back(str);\n"
+                    "v.push_back(str);\n"
+                    "l.push_back(str);\n"
+                    "l.push_back(str);\n")
+               % Check("l0 <0 items> QList<std::string>")
+               % Check("l <2 items> QList<std::string>")
+               % Check("str \"foo\" std::string")
+               % Check("v <2 items> std::vector<std::string>")
+               % Check("v.0 \"foo\" std::string");
+
+    QTest::newRow("StdVector1")
+            << Data("std::vector<int *> v0, v;\n"
+                    "v.push_back(new int(1));\n"
+                    "v.push_back(0);\n"
+                    "v.push_back(new int(2));\n")
+               % Check("v0 <0 items> std::vector<int*>")
+               % Check("v <3 items> std::vector<int*>")
+               % Check("v.0 1 int")
+               % Check("v.1 0x0 int *")
+               % Check("v.2 2 int");
+
+    QTest::newRow("StdVector2")
+            << Data("std::vector<int> v;\n"
+                    "v.push_back(1);\n"
+                    "v.push_back(2);\n"
+                    "v.push_back(3);\n"
+                    "v.push_back(4);\n")
+               % Check("v <4 items> std::vector<int>")
+               % Check("v.0 1 int")
+               % Check("v.3 4 int");
+
+    QTest::newRow("StdVector3")
+            << Data("std::vector<Foo *> v;\n"
+                    "v.push_back(new Foo(1));\n"
+                    "v.push_back(0);\n"
+                    "v.push_back(new Foo(2));\n")
+               % Check("v <3 items> std::vector<Foo*>")
+               % CheckType("v.0 Foo")
+               % Check("v.0.a 1 int")
+               % Check("v.1 0x0 Foo *")
+               % CheckType("v.2 Foo")
+               % Check("v.2.a 2 int");
+
+    QTest::newRow("StdVector4")
+            << Data("std::vector<Foo> v;\n"
+                    "v.push_back(1);\n"
+                    "v.push_back(2);\n"
+                    "v.push_back(3);\n"
+                    "v.push_back(4);\n")
+               % Check("v <4 items> std::vector<Foo>")
+               % CheckType("v.0 Foo")
+               % Check("v.1.a 2 int")
+               % CheckType("v.3 Foo");
+
+    QTest::newRow("StdVectorBool1")
+            << Data("std::vector<bool> v;\n"
+                    "v.push_back(true);\n"
+                    "v.push_back(false);\n"
+                    "v.push_back(false);\n"
+                    "v.push_back(true);\n"
+                    "v.push_back(false);\n")
+               % Check("v <5 items> std::vector<bool>")
+               % Check("v.0 true bool")
+               % Check("v.1 false bool")
+               % Check("v.2 false bool")
+               % Check("v.3 true bool")
+               % Check("v.4 false bool");
+
+    QTest::newRow("StdVectorBool2")
+            << Data("std::vector<bool> v1(65, true);\n"
+                    "std::vector<bool> v2(65);\n")
+               % Check("v1 <65 items> std::vector<bool>")
+               % Check("v1.0 true bool")
+               % Check("v1.64 true bool")
+               % Check("v2 <65 items> std::vector<bool>")
+               % Check("v2.0 false bool")
+               % Check("v2.64 false bool");
+
+    QTest::newRow("StdVector6")
+            << Data("std::vector<std::list<int> *> vector;\n"
+                    "std::list<int> list;\n"
+                    "vector.push_back(new std::list<int>(list));\n"
+                    "vector.push_back(0);\n"
+                    "list.push_back(45);\n"
+                    "vector.push_back(new std::list<int>(list));\n"
+                    "vector.push_back(0);\n")
+               % Check("list <1 items> std::list<int>")
+               % Check("list.0 45 int")
+               % Check("vector <4 items> std::vector<std::list<int>*>")
+               % Check("vector.0 <0 items> std::list<int>")
+               % Check("vector.2 <1 items> std::list<int>")
+               % Check("vector.2.0 45 int")
+               % Check("vector.3 0x0 std::list<int> *");
+
+    QTest::newRow("StdStream")
+            << Data("using namespace std;\n"
+                    "ifstream is0, is;\n"
+                    "#ifdef Q_OS_WIN\n"
+                    "        is.open(\"C:\\\\Program Files\\\\Windows NT\\\\Accessories\\\\wordpad.exe\");\n"
+                    "#else\n"
+                    "        is.open(\"/etc/passwd\");\n"
+                    "#endif\n"
+                    "        bool ok = is.good();\n")
+               % CheckType("is std::ifstream")
+               % Check("ok true bool");
+
+    QTest::newRow("ItemModel")
+            << Data("QStandardItemModel m;\n"
+                    "QStandardItem *i1, *i2, *i11;\n"
+                    "m.appendRow(QList<QStandardItem *>()\n"
+                    "     << (i1 = new QStandardItem(\"1\")) << (new QStandardItem(\"a\")) << (new QStandardItem(\"a2\")));\n"
+                    "QModelIndex mi = i1->index();\n"
+                    "m.appendRow(QList<QStandardItem *>()\n"
+                    "     << (i2 = new QStandardItem(\"2\")) << (new QStandardItem(\"b\")));\n"
+                    "i1->appendRow(QList<QStandardItem *>()\n"
+                    "     << (i11 = new QStandardItem(\"11\")) << (new QStandardItem(\"aa\")));\n")
+               % CheckType("i1 QStandardItem")
+               % CheckType("i11 QStandardItem")
+               % CheckType("i2 QStandardItem")
+               % Check("m  QStandardItemModel")
+               % Check("mi \"1\" QModelIndex");
+
+    QTest::newRow("QStackInt")
+            << Data("QStack<int> s;\n"
+                    "s.append(1);\n"
+                    "s.append(2);\n")
+               % Check("s <2 items> QStack<int>")
+               % Check("s.0 1 int")
+               % Check("s.1 2 int");
+
+    QTest::newRow("QStackBig")
+            << Data("QStack<int> s;\n"
+                    "for (int i = 0; i != 10000; ++i)\n"
+                    "    s.append(i);\n")
+               % Check("s <10000 items> QStack<int>")
+               % Check("s.0 0 int")
+               % Check("s.1999 1999 int");
+
+    QTest::newRow("QStackFooPointer")
+            << Data("QStack<Foo *> s;\n"
+                    "s.append(new Foo(1));\n"
+                    "s.append(0);\n"
+                    "s.append(new Foo(2));\n")
+               % Check("s <3 items> QStack<Foo*>")
+               % CheckType("s.0 Foo")
+               % Check("s.0.a 1 int")
+               % Check("s.1 0x0 Foo *")
+               % CheckType("s.2 Foo")
+               % Check("s.2.a 2 int");
+
+    QTest::newRow("QStackFoo")
+            << Data("QStack<Foo> s;\n"
+                    "s.append(1);\n"
+                    "s.append(2);\n"
+                    "s.append(3);\n"
+                    "s.append(4);\n")
+               % Check("s <4 items> QStack<Foo>")
+               % CheckType("s.0 Foo")
+               % Check("s.0.a 1 int")
+               % CheckType("s.3 Foo")
+               % Check("s.3.a 4 int");
+
+    QTest::newRow("QStackBool")
+            << Data("QStack<bool> s;\n"
+                    "s.append(true);\n"
+                    "s.append(false);\n")
+               % Check("s <2 items> QStack<bool>")
+               % Check("s.0 true bool")
+               % Check("s.1 false bool");
+
+    QTest::newRow("QUrl")
+            << Data("QUrl url(QString(\"http://qt-project.org\"));\n")
+               % Check("url \"http://qt-project.org\" QUrl");
+
+    QTest::newRow("QStringQuotes")
+            << Data("QString str1(\"Hello Qt\");\n"
+                    // --> Value: \"Hello Qt\"
+                    "QString str2(\"Hello\\nQt\");\n"
+                    // --> Value: \\"\"Hello\nQt"" (double quote not expected)
+                    "QString str3(\"Hello\\rQt\");\n"
+                    // --> Value: ""HelloQt"" (double quote and missing \r not expected)
+                    "QString str4(\"Hello\\tQt\");\n")
+               // --> Value: "Hello\9Qt" (expected \t instead of \9)
+               % Check("str1 \"Hello Qt\" QString")
+               % Check("str2 \"Hello\nQt\" QString")
+               % Check("str3 \"Hello\rQt\" QString")
+               % Check("str4 \"Hello\tQt\" QString");
+
+    QTest::newRow("QString1")
+            << Data("QString str = \"Hello \";\n"
+                    "str += '\\t';\n"
+                    "str += '\\r';\n"
+                    "str += '\\n';\n"
+                    "str += QLatin1Char(0);\n"
+                    "str += QLatin1Char(1);\n"
+                    "str += \" fat \";\n"
+                    "str += \" World\";\n"
+                    "str.prepend(\"Prefix: \");\n")
+               % Check("str \"Prefix: Hello  big, \\t\\r\\n\\000\\001 fat  World\" QString");
+
+    QTest::newRow("QString2")
+            << Data("QChar data[] = { 'H', 'e', 'l', 'l', 'o' };\n"
+                    "QString str1 = QString::fromRawData(data, 4);\n"
+                    "QString str2 = QString::fromRawData(data + 1, 4);\n")
+               % Check("str1 \"Hell\" QString")
+               % Check("str2 \"ello\" QString");
+
+//    void stringRefTest(const QString &refstring)\n"
+//        dummyStatement(&refstring);\n"
+//    }\n"
+
+//    QTest::newRow("QString3")
+//                  << Data(
+//        "QString str = "Hello ";\n"
+//        "str += " big, ";\n"
+//        "str += " fat ";\n"
+//        "str += " World ";\n"
+
+//        "QString string("String Test");\n"
+//        "QString *pstring = new QString("Pointer String Test");\n"
+//        "stringRefTest(QString("Ref String Test"));\n"
+//        "string = "Hi";\n"
+//        "string += "Du";\n"
+//         % CheckType("pstring QString");
+//         % Check("str "Hello  big,  fat  World " QString");
+//         % Check("string "HiDu" QString");
+
+//    QTest::newRow("QStringRef")
+//                      << Data(
+//        "QString str = "Hello";\n"
+//        "QStringRef ref(&str, 1, 2);\n"
+//         % Check("ref "el" QStringRef");
+
+//    QTest::newRow("QStringList")
+//                                                                                                      << Data(
+//        "QStringList l;\n"
+//        "l << "Hello ";\n"
+//        "l << " big, ";\n"
+//        "l << " fat ";\n"
+//        "l.takeFirst();\n"
+//        "l << " World ";\n"
+//         % Check("l <3 items> QStringList");
+//         % Check("l.0 " big, " QString");
+//         % Check("l.1 " fat " QString");
+//         % Check("l.2 " World " QString");
+
+    QTest::newRow("String")
+            << Data("const wchar_t *w = L\"aöa\";\n"
+                    "QString u;\n"
+                    "if (sizeof(wchar_t) == 4)\n"
+                    "    u = QString::fromUcs4((uint *)w);\n"
+                    "else\n"
+                    "    u = QString::fromUtf16((ushort *)w);\n")
+               % Check("u \"aöa\" QString")
+               % CheckType("w wchar_t *");
+
+        // All: Select UTF-8 in "Change Format for Type" in L&W context menu");
+        // Windows: Select UTF-16 in "Change Format for Type" in L&W context menu");
+        // Other: Select UCS-6 in "Change Format for Type" in L&W context menu");
+
+
+    // These tests should result in properly displayed umlauts in the
+    // Locals&Watchers view. It is only support on gdb with Python");
+    QTest::newRow("CharPointers")
+            << Data("const char *s = \"aöa\";\n"
+                    "const char *t = \"a\\xc3\\xb6\";\n"
+                    "const unsigned char uu[] = { 'a', 153 /* ö Latin1 */, 'a' };\n"
+                    "const unsigned char *u = uu;\n"
+                    "const wchar_t *w = L\"aöa\";\n")
+               % CheckType("u unsigned char *")
+               % CheckType("uu unsigned char [3]")
+               % CheckType("s char *")
+               % CheckType("t char *")
+               % CheckType("w wchar_t *");
+
+        // All: Select UTF-8 in "Change Format for Type" in L&W context menu");
+        // Windows: Select UTF-16 in "Change Format for Type" in L&W context menu");
+        // Other: Select UCS-6 in "Change Format for Type" in L&W context menu");
+
+
+    QTest::newRow("CharArrays")
+            << Data("const char s[] = \"aöa\";\n"
+                    "const char t[] = \"aöax\";\n"
+                    "const wchar_t w[] = L\"aöa\";\n")
+               % CheckType("s char [5]")
+               % CheckType("t char [6]")
+               % CheckType("w wchar_t [4]");
+
+
+    QTest::newRow("Text")
+            << Data("QApplication app(arrc, argv)\n"
+                    "QTextDocument doc;\n"
+                    "doc.setPlainText(\"Hallo\\nWorld\");\n"
+                    "QTextCursor tc;\n"
+                    "tc = doc.find(\"all\");\n"
+                    "int pos = tc.position();\n"
+                    "int anc = tc.anchor();\n")
+               % CheckType("doc QTextDocument")
+               % Check("tc 4 QTextCursor")
+               % Check("pos 4 int")
+               % Check("anc 1 int");
+
+    QTest::newRow("QThread")
+            << Data("const int N = 14;\n"
+                    "Thread thread[N];\n"
+                    "for (int i = 0; i != N; ++i) {\n"
+                    "    thread[i].setId(i);\n"
+                    "    thread[i].setObjectName(\"This is thread #\" + QString::number(i));\n"
+                    "    thread[i].start();\n"
+                    "}\n")
+               % CheckType("thread qthread::Thread [14]")
+               % Check("thread.0  qthread::Thread")
+               % Check("thread.0.@1.@1 \"This is thread #0\" qthread::Thread")
+               % Check("thread.13  qthread::Thread")
+               % Check("thread.13.@1.@1 \"This is thread #13\" qthread::Thread");
+
+    QByteArray variantData =
+            "Q_DECLARE_METATYPE(QHostAddress)\n"
+            "Q_DECLARE_METATYPE(QList<int>)\n"
+            "Q_DECLARE_METATYPE(QStringList)\n"
+            "#define COMMA ,\n"
+            "Q_DECLARE_METATYPE(QMap<uint COMMA QStringList>)\n";
+
+    QTest::newRow("QVariant1")
+            << Data("QVariant value;\n"
+                    "QVariant::Type t = QVariant::String;\n"
+                    "value = QVariant(t, (void*)0);\n"
+                    "*(QString*)value.data() = QString(\"Some string\");\n"
+                    "int i = 1;\n")
+               % Check("t QVariant::String (10) QVariant::Type")
+               % Check("value \"Some string\" QVariant (QString)");
+
+    QTest::newRow("QVariant2")
+            << Data(variantData,
+                    "QVariant var;                               // Type 0, invalid\n"
+                    "QVariant var1(true);                        // 1, bool\n"
+                    "QVariant var2(2);                           // 2, int\n"
+                    "QVariant var3(3u);                          // 3, uint\n"
+                    "QVariant var4(qlonglong(4));                // 4, qlonglong\n"
+                    "QVariant var5(qulonglong(5));               // 5, qulonglong\n"
+                    "QVariant var6(double(6));                   // 6, double\n"
+                    "QVariant var7(QChar(7));                    // 7, QChar\n"
+                    //None,          # 8, QVariantMap
+                    // None,          # 9, QVariantList
+                    "QVariant var10(QString(\"Hello 10\"));      // 10, QString\n"
+                    "QVariant var19(QRect(100, 200, 300, 400));  // 19 QRect\n"
+                    "QVariant var20(QRectF(100, 200, 300, 400)); // 20 QRectF\n"
+                    )
+               % Check("var (invalid) QVariant (invalid)")
+               % Check("var1 true QVariant (bool)")
+               % Check("var2 2 QVariant (int)")
+               % Check("var3 3 QVariant (uint)")
+               % Check("var4 4 QVariant (qlonglong)")
+               % Check("var5 5 QVariant (qulonglong)")
+               % Check("var6 6 QVariant (double)")
+               % Check("var7 '?' (7) QVariant (QChar)")
+               % Check("var10 \"Hello 10\" QVariant (QString)")
+               % Check("var19 300x400+100+200 QVariant (QRect)")
+               % Check("var20 300x400+100+200 QVariant (QRectF)");
+
+        /*
+         "QStringList", # 11
+         "QByteArray",  # 12
+         "QBitArray",   # 13
+         "QDate",       # 14
+         "QTime",       # 15
+         "QDateTime",   # 16
+         "QUrl",        # 17
+         "QLocale",     # 18
+         "QRect",       # 19
+         "QRectF",      # 20
+         "QSize",       # 21
+         "QSizeF",      # 22
+         "QLine",       # 23
+         "QLineF",      # 24
+         "QPoint",      # 25
+         "QPointF",     # 26
+         "QRegExp",     # 27
+         */
+
+//    QTest::newRow("QVariant3")
+//                  << Data(
+//        "QVariant var;\n"
+//         % Check("var (invalid) QVariant (invalid)");
+//         % Check("the list is updated properly");
+//        "var.setValue(QStringList() << "World");\n"
+//         % Check("var <1 items> QVariant (QStringList)");
+//         % Check("var.0 "World" QString");
+//        "var.setValue(QStringList() << "World" << "Hello");\n"
+//         % Check("var <2 items> QVariant (QStringList)");
+//         % Check("var.1 "Hello" QString");
+//        "var.setValue(QStringList() << "Hello" << "Hello");\n"
+//         % Check("var <2 items> QVariant (QStringList)");
+//         % Check("var.0 "Hello" QString");
+//         % Check("var.1 "Hello" QString");
+//        "var.setValue(QStringList() << "World" << "Hello" << "Hello");\n"
+//         % Check("var <3 items> QVariant (QStringList)");
+//         % Check("var.0 "World" QString");
+
+//    QTest::newRow("QVariant4")
+//                      << Data(
+//        "QVariant var;\n"
+//        "QHostAddress ha("127.0.0.1");\n"
+//        "var.setValue(ha);\n"
+//        "QHostAddress ha1 = var.value<QHostAddress>();\n"
+//         % Check("ha "127.0.0.1" QHostAddress");
+//         % Check("ha.a 0 quint32");
+//         % CheckType("ha.a6 Q_IPV6ADDR");
+//         % Check("ha.ipString "127.0.0.1" QString");
+//         % Check("ha.isParsed false bool");
+//         % Check("ha.protocol QAbstractSocket::UnknownNetworkLayerProtocol (-1) QAbstractSocket::NetworkLayerProtocol");
+//         % Check("ha.scopeId "" QString");
+//         % Check("ha1 "127.0.0.1" QHostAddress");
+//         % Check("ha1.a 0 quint32");
+//         % CheckType("ha1.a6 Q_IPV6ADDR");
+//         % Check("ha1.ipString "127.0.0.1" QString");
+//         % Check("ha1.isParsed false bool");
+//         % Check("ha1.protocol QAbstractSocket::UnknownNetworkLayerProtocol (-1) QAbstractSocket::NetworkLayerProtocol");
+//         % Check("ha1.scopeId "" QString");
+//         % CheckType("var QVariant (QHostAddress)");
+//         % Check("var.data "127.0.0.1" QHostAddress");
+
+//    QTest::newRow("QVariant5")
+//                          << Data(
+//        // This checks user defined types in QVariants");
+//        "typedef QMap<uint, QStringList>\n" MyType;
+//        "MyType my;\n"
+//        "my[1] = (QStringList() << "Hello");\n"
+//        "my[3] = (QStringList() << "World");\n"
+//        "QVariant var;\n"
+//        "var.setValue(my);\n"
+//        // FIXME: Known to break\n"
+//        //QString type = var.typeName();\n"
+//        "var.setValue(my);\n"
+//         % Check("my <2 items> qvariant::MyType");
+//         % Check("my.0   QMapNode<unsigned int, QStringList>");
+//         % Check("my.0.key 1 unsigned int");
+//         % Check("my.0.value <1 items> QStringList");
+//         % Check("my.0.value.0 "Hello" QString");
+//         % Check("my.1   QMapNode<unsigned int, QStringList>");
+//         % Check("my.1.key 3 unsigned int");
+//         % Check("my.1.value <1 items> QStringList");
+//         % Check("my.1.value.0 "World" QString");
+//         % CheckType("var QVariant (QMap<unsigned int , QStringList>)");
+//         % Check("var.data <2 items> QMap<unsigned int, QStringList>");
+//         % Check("var.data.0   QMapNode<unsigned int, QStringList>");
+//         % Check("var.data.0.key 1 unsigned int");
+//         % Check("var.data.0.value <1 items> QStringList");
+//         % Check("var.0.value.0 "Hello" QString");
+//         % Check("var.data.1   QMapNode<unsigned int, QStringList>");
+//         % Check("var.data.1.key 3 unsigned int");
+//         % Check("var.data.1.value <1 items> QStringList");
+//         % Check("var.data.1.value.0 "World" QString");
+//        // Continue");
+//        var.setValue(my);
+
+//    QTest::newRow("QVariant6")
+//                              << Data(
+//        "QList<int> list;\n"
+//        "list << 1 << 2 << 3;\n"
+//        "QVariant variant = qVariantFromValue(list);\n"
+//         % Check("list <3 items> QList<int>");
+//         % Check("list.0 1 int");
+//         % Check("list.1 2 int");
+//         % Check("list.2 3 int");
+//         % CheckType("variant QVariant (QList<int>)");
+//         % Check("variant.data <3 items> QList<int>");
+//         % Check("variant.data.0 1 int");
+//         % Check("variant.data.1 2 int");
+//         % Check("variant.data.2 3 int");
+//        // Continue");
+//        list.clear();\n"
+//        list = variant.value<QList<int> >();\n"
+//         % Check("list <3 items> QList<int>");\n"
+//         % Check("list.0 1 int");
+//         % Check("list.1 2 int");
+//         % Check("list.2 3 int");
+
+//    QTest::newRow("QVariantList")
+//                                  << Data(
+//        "QVariantList vl;\n"
+//        " % Check("vl <0 items> QVariantList");\n"
+//        "// Continue");\n"
+//        "vl.append(QVariant(1));\n"
+//        "vl.append(QVariant(2));\n"
+//        "vl.append(QVariant("Some String"));\n"
+//        "vl.append(QVariant(21));\n"
+//        "vl.append(QVariant(22));\n"
+//        "vl.append(QVariant("2Some String"));\n"
+//         % Check("vl <6 items> QVariantList");
+//         % CheckType("vl.0 QVariant (int)");
+//         % CheckType("vl.2 QVariant (QString)");
+
+//    QTest::newRow("QVariantMap")
+//                                      << Data(
+//        "QVariantMap vm;\n"
+//         % Check("vm <0 items> QVariantMap");
+//        "// Continue");\n"
+//        "vm["a"] = QVariant(1);\n"
+//        "vm["b"] = QVariant(2);\n"
+//        "vm["c"] = QVariant("Some String");\n"
+//        "vm["d"] = QVariant(21);\n"
+//        "vm["e"] = QVariant(22);\n"
+//        "vm["f"] = QVariant("2Some String");\n"
+//         % Check("vm <6 items> QVariantMap");
+//         % Check("vm.0   QMapNode<QString, QVariant>");
+//         % Check("vm.0.key "a" QString");
+//         % Check("vm.0.value 1 QVariant (int)");
+//         % Check("vm.5   QMapNode<QString, QVariant>");
+//         % Check("vm.5.key "f" QString");
+//         % Check("vm.5.value "2Some String" QVariant (QString)");
+
+//    QTest::newRow("QVectorIntBig")
+//          << Data(
+//        // This tests the display of a big vector");
+//        QVector<int> vec(10000);
+//        for (int i = 0; i != vec.size(); ++i)
+//            vec[i] = i * i;
+//         % Check("vec <10000 items> QVector<int>");
+//         % Check("vec.0 0 int");
+//         % Check("vec.1999 3996001 int");
+//        // Continue");
+
+//        // step over
+//        // check that the display updates in reasonable time
+//        vec[1] = 1;
+//        vec[2] = 2;
+//        vec.append(1);
+//        vec.append(1);
+//         % Check("vec <10002 items> QVector<int>");
+//         % Check("vec.1 1 int");
+//         % Check("vec.2 2 int");
+
+//    QTest::newRow("QVectorFoo")
+//                 << Data(
+//        // This tests the display of a vector of pointers to custom structs");\n"
+//        "QVector<Foo> vec;\n"
+//         % Check("vec <0 items> QVector<Foo>");
+//        // Continue");\n"
+//        // step over, check display");\n"
+//        "vec.append(1);\n"
+//        "vec.append(2);\n"
+//         % Check("vec <2 items> QVector<Foo>");
+//         % CheckType("vec.0 Foo");
+//         % Check("vec.0.a 1 int");
+//         % CheckType("vec.1 Foo");
+//         % Check("vec.1.a 2 int");
+
+//    typedef QVector<Foo> FooVector;
+
+//    QTest::newRow("QVectorFooTypedef")
+//                 << Data(
+//    {
+//        "FooVector vec;\n"
+//        "vec.append(Foo(2));\n"
+//        "vec.append(Foo(3));\n"
+//        dummyStatement(&vec);
+//    }
+
+//    QTest::newRow("QVectorFooStar")
+//                     << Data(
+//    {
+//        // This tests the display of a vector of pointers to custom structs");
+//        "QVector<Foo *> vec;\n"
+//         % Check("vec <0 items> QVector<Foo*>");
+//        // Continue");\n"
+//        // step over\n"
+//        // check that the display is ok");\n"
+//        "vec.append(new Foo(1));\n"
+//        "vec.append(0);\n"
+//        "vec.append(new Foo(2));\n"
+//        "vec.append(new Fooooo(3));\n"
+//        // switch "Auto derefencing pointers" in Locals context menu\n"
+//        // off and on again, and check result looks sane");\n"
+//         % Check("vec <4 items> QVector<Foo*>");
+//         % CheckType("vec.0 Foo");
+//         % Check("vec.0.a 1 int");
+//         % Check("vec.1 0x0 Foo *");
+//         % CheckType("vec.2 Foo");
+//         % Check("vec.2.a 2 int");
+//         % CheckType("vec.3 Fooooo");
+//         % Check("vec.3.a 5 int");
+
+//    QTest::newRow("QVectorBool")
+//                         << Data(
+//        QVector<bool> vec;
+//         % Check("vec <0 items> QVector<bool>");
+//        // Continue");
+//        // step over
+//        // check that the display is ok");
+//        vec.append(true);
+//        vec.append(false);
+//         % Check("vec <2 items> QVector<bool>");
+//         % Check("vec.0 true bool");
+//         % Check("vec.1 false bool");
+
+//    QTest::newRow("QVectorListInt")
+//                             << Data(
+//        "QVector<QList<int> > vec;
+//        "QVector<QList<int> > *pv = &vec;
+//         % CheckType("pv QVector<QList<int>>");
+//         % Check("vec <0 items> QVector<QList<int>>");
+//        // Continue");
+//        "vec.append(QList<int>() << 1);
+//        "vec.append(QList<int>() << 2 << 3);
+//         % CheckType("pv QVector<QList<int>>");
+//         % Check("pv.0 <1 items> QList<int>");
+//         % Check("pv.0.0 1 int");
+//         % Check("pv.1 <2 items> QList<int>");
+//         % Check("pv.1.0 2 int");
+//         % Check("pv.1.1 3 int");
+//         % Check("vec <2 items> QVector<QList<int>>");
+//         % Check("vec.0 <1 items> QList<int>");
+//         % Check("vec.0.0 1 int");
+//         % Check("vec.1 <2 items> QList<int>");
+//         % Check("vec.1.0 2 int");
+//         % Check("vec.1.1 3 int");
+
+//namespace noargs {
+
+//    class Goo
+//    {
+//    public:
+//       Goo(const QString &str, const int n) : str_(str), n_(n) {}
+//    private:
+//       QString str_;
+//       int n_;
+//    };
+
+//    typedef QList<Goo> GooList;
+
+//    QTest::newRow("NoArgumentName(int i, int, int k)
+//    {
+//        // This is not supposed to work with the compiled dumpers");
+//        "GooList list;
+//        "list.append(Goo("Hello", 1));
+//        "list.append(Goo("World", 2));
+
+//        "QList<Goo> list2;
+//        "list2.append(Goo("Hello", 1));
+//        "list2.append(Goo("World", 2));
+
+//         % Check("i 1 int");
+//         % Check("k 3 int");
+//         % Check("list <2 items> noargs::GooList");
+//         % CheckType("list.0 noargs::Goo");
+//         % Check("list.0.n_ 1 int");
+//         % Check("list.0.str_ "Hello" QString");
+//         % CheckType("list.1 noargs::Goo");
+//         % Check("list.1.n_ 2 int");
+//         % Check("list.1.str_ "World" QString");
+//         % Check("list2 <2 items> QList<noargs::Goo>");
+//         % CheckType("list2.0 noargs::Goo");
+//         % Check("list2.0.n_ 1 int");
+//         % Check("list2.0.str_ "Hello" QString");
+//         % CheckType("list2.1 noargs::Goo");
+//         % Check("list2.1.n_ 2 int");
+//         % Check("list2.1.str_ "World" QString");
+
+
+//"void foo() {}\n"
+//"void foo(int) {}\n"
+//"void foo(QList<int>) {}\n"
+//"void foo(QList<QVector<int> >) {}\n"
+//"void foo(QList<QVector<int> *>) {}\n"
+//"void foo(QList<QVector<int *> *>) {}\n"
+//"\n"
+//"template <class T>\n"
+//"void foo(QList<QVector<T> *>) {}\n"
+//"\n"
+//"\n"
+//"namespace namespc {\n"
+//"\n"
+//"    class MyBase : public QObject\n"
+//"    {\n"
+//"    public:\n"
+//"        MyBase() {}\n"
+//"        virtual void doit(int i)\n"
+//"        {\n"
+//"           n = i;\n"
+//"        }\n"
+//"    protected:\n"
+//"        int n;\n"
+//"    };\n"
+//"\n"
+//"    namespace nested {\n"
+//"\n"
+//"        class MyFoo : public MyBase\n"
+//"        {\n"
+//"        public:\n"
+//"            MyFoo() {}\n"
+//"            virtual void doit(int i)\n"
+//"            {\n"
+//"                // Note there's a local 'n' and one in the base class");\n"
+//"                n = i;\n"
+//"            }\n"
+//"        protected:\n"
+//"            int n;\n"
+//"        };\n"
+//"\n"
+//"        class MyBar : public MyFoo\n"
+//"        {\n"
+//"        public:\n"
+//"            virtual void doit(int i)\n"
+//"            {\n"
+//"               n = i + 1;\n"
+//"            }\n"
+//"        };\n"
+//"\n"
+//"        namespace {\n"
+//"\n"
+//"            class MyAnon : public MyBar\n"
+//"            {\n"
+//"            public:\n"
+//"                virtual void doit(int i)\n"
+//"                {\n"
+//"                   n = i + 3;\n"
+//"                }\n"
+//"            };\n"
+//"\n"
+//"            namespace baz {\n"
+//"\n"
+//"                class MyBaz : public MyAnon\n"
+//"                {\n"
+//"                public:\n"
+//"                    virtual void doit(int i)\n"
+//"                    {\n"
+//"                       n = i + 5;\n"
+//"                    }\n"
+//"                };\n"
+//"\n"
+//"            } // namespace baz\n"
+//"\n"
+//"        } // namespace anon\n"
+//"\n"
+//"    } // namespace nested\n"
+//"\n"
+//    QTest::newRow("Namespace()
+//    {
+//        // This checks whether classes with "special" names are
+//        // properly displayed");
+//        "using namespace nested;\n"
+//        "MyFoo foo;\n"
+//        "MyBar bar;\n"
+//        "MyAnon anon;\n"
+//        "baz::MyBaz baz;\n"
+//         % CheckType("anon namespc::nested::(anonymous namespace)::MyAnon");
+//         % CheckType("bar namespc::nested::MyBar");
+//         % CheckType("baz namespc::nested::(anonymous namespace)::baz::MyBaz");
+//         % CheckType("foo namespc::nested::MyFoo");
+//        // Continue");
+//        // step into the doit() functions
+
+//        baz.doit(1);\n"
+//        anon.doit(1);\n"
+//        foo.doit(1);\n"
+//        bar.doit(1);\n"
+//        dummyStatement();\n"
+//    }
+
+
+//    QTest::newRow("GccExtensions")
+//        "#ifdef __GNUC__\n"
+//        "char v[8] = { 1, 2 };\n"
+//        "char w __attribute__ ((vector_size (8))) = { 1, 2 };\n"
+//        "int y[2] = { 1, 2 };\n"
+//        "int z __attribute__ ((vector_size (8))) = { 1, 2 };\n"
+//        "#endif\n"
+//         % Check("v.0 1 char");
+//         % Check("v.1 2 char");
+//         % Check("w.0 1 char");
+//         % Check("w.1 2 char");
+//         % Check("y.0 1 int");
+//         % Check("y.1 2 int");
+//         % Check("z.0 1 int");
+//         % Check("z.1 2 int");
+
+
+//class Z : public QObject
+//{
+//public:
+//    Z() {
+//        f = new Foo();
+//        i = 0;
+//        i = 1;
+//        i = 2;
+//        i = 3;
+//    }
+//    int i;
+//    Foo *f;
+//};
+
+//QString fooxx()
+//{
+//    return "bababa";
+//}
+
+
+//    QTest::newRow("Int()
+//        "quint64 u64 = ULLONG_MAX;\n"
+//        "qint64 s64 = LLONG_MAX;\n"
+//        "quint32 u32 = ULONG_MAX;\n"
+//        "qint32 s32 = LONG_MAX;\n"
+//        "quint64 u64s = 0;\n"
+//        "qint64 s64s = LLONG_MIN;\n"
+//        "quint32 u32s = 0;\n"
+//        "qint32 s32s = LONG_MIN;\n"
+
+//         % Check("u64 18446744073709551615 quint64");
+//         % Check("s64 9223372036854775807 qint64");
+//         % Check("u32 4294967295 quint32");
+//         % Check("s32 2147483647 qint32");
+//         % Check("u64s 0 quint64");
+//         % Check("s64s -9223372036854775808 qint64");
+//         % Check("u32s 0 quint32");
+//         % Check("s32s -2147483648 qint32");
+
+
+//    QTest::newRow("Array1")
+//                  << Data(
+//        "double d[3][3];\n"
+//        "for (int i = 0; i != 3; ++i)\n"
+//        "    for (int j = 0; j != 3; ++j)\n"
+//        "        d[i][j] = i + j;\n"
+//         % CheckType("d double [3][3]");
+//         % CheckType("d.0 double [3]");
+//         % Check("d.0.0 0 double");
+//         % Check("d.0.2 2 double");
+//         % CheckType("d.2 double [3]");
+
+//    QTest::newRow("Array2")
+//                  << Data(
+//        "char c[20];\n"
+//        "c[0] = 'a';\n"
+//        "c[1] = 'b';\n"
+//        "c[2] = 'c';\n"
+//        "c[3] = 'd';\n"
+//         % CheckType("c char [20]");
+//         % Check("c.0 97 'a' char");
+//         % Check("c.3 100 'd' char");
+
+//    QTest::newRow("Array3")
+//                  << Data(
+//        "QString s[20];
+//        "s[0] = "a";\n"
+//        "s[1] = "b";\n"
+//        "s[2] = "c";\n"
+//        "s[3] = "d";\n"
+//         % CheckType("s QString [20]");
+//         % Check("s.0 "a" QString");
+//         % Check("s.3 "d" QString");
+//         % Check("s.4 "" QString");
+//         % Check("s.19 "" QString");
+
+//    QTest::newRow("Array4")
+//                  << Data(
+//        "QByteArray b[20];\n"
+//        "b[0] = "a";\n"
+//        "b[1] = "b";\n"
+//        "b[2] = "c";\n"
+//        "b[3] = "d";\n"
+//         % CheckType("b QByteArray [20]");
+//         % Check("b.0 "a" QByteArray");
+//         % Check("b.3 "d" QByteArray");
+//         % Check("b.4 "" QByteArray");
+//         % Check("b.19 "" QByteArray");
+
+//    QTest::newRow("Array5")
+//                  << Data(
+//        "Foo foo[10];\n"
+//        "//for (int i = 0; i != sizeof(foo)/sizeof(foo[0]); ++i) {\n"
+//        "for (int i = 0; i < 5; ++i) {\n"
+//        "    foo[i].a = i;\n"
+//        "    foo[i].doit")\n"
+//        "                  << Data(\n"
+//        "}\n"
+//         % CheckType("foo Foo [10]");
+//         % CheckType("foo.0 Foo");
+//         % CheckType("foo.9 Foo");
+
+
+//    QTest::newRow("Bitfields")
+//                  << Data(
+//    "struct S\n"
+//    "{\n"
+//    "    uint x : 1;\n"
+//    "    uint y : 1;\n"
+//    "    bool c : 1;\n"
+//    "    bool b;\n"
+//    "    float f;\n"
+//    "    double d;\n"
+//    "    qreal q;\n"
+//    "    int i;\n"
+//    "};\n"
+//"\n"
+//        "S s;\n"
+//         % CheckType("s basic::S");
+//         % CheckType("s.b bool");
+//         % CheckType("s.c bool");
+//         % CheckType("s.d double");
+//         % CheckType("s.f float");
+//         % CheckType("s.i int");
+//         % CheckType("s.q qreal");
+//         % CheckType("s.x uint");
+//         % CheckType("s.y uint");
+
+
+//    QTest::newRow("Function")
+//                  << Data(
+//    "struct Function\n"
+//    "{\n"
+//    "    Function(QByteArray var, QByteArray f, double min, double max)\n"
+//    "      : var(var), f(f), min(min), max(max) {}\n"
+//    "    QByteArray var;\n"
+//    "    QByteArray f;\n"
+//    "    double min;\n"
+//    "    double max;\n"
+//    "};\n",\n"
+//        "// In order to use this, switch on the 'qDump__Function' in dumper.py\n"
+//        "Function func0, func("x", "sin(x)", 0, 1);\n"
+//        "func.max = 10;\n"
+//        "func.f = "cos(x)";\n"
+//        "func.max = 4;\n"
+//        "func.max = 5;\n"
+//        "func.max = 6;\n"
+//        "func.max = 7;\n"
+//         % CheckType("func basic::Function");
+//         % Check("func.f "sin(x)" QByteArray");
+//         % Check("func.max 1 double");
+//         % Check("func.min 0 double");
+//         % Check("func.var "x" QByteArray");
+//         % CheckType("func basic::Function");
+//         % Check("func.f "cos(x)" QByteArray");
+//         % Check("func.max 7 double");
+
+//    QTest::newRow("AlphabeticSorting")
+//                  << Data(
+//        "// This checks whether alphabetic sorting of structure\n"
+//        "// members work");\n"
+//        "struct Color\n"
+//        "{\n"
+//        "    int r,g,b,a;\n"
+//        "    Color() { r = 1, g = 2, b = 3, a = 4; }\n"
+//        "};\n"
+//        "    Color c;\n"
+//         % CheckType("c basic::Color");
+//         % Check("c.a 4 int");
+//         % Check("c.b 3 int");
+//         % Check("c.g 2 int");
+//         % Check("c.r 1 int");
+
+//        // Manual: Toogle "Sort Member Alphabetically" in context menu
+//        // Manual: of "Locals and Expressions" view");
+//        // Manual: Check that order of displayed members changes");
+
+//    QTest::newRow("Typedef")
+//                  << Data(
+//    "namespace ns {\n"
+//    "    typedef unsigned long long vl;\n"
+//    "    typedef vl verylong;\n"
+//    "}\n"
+
+//    "typedef quint32 myType1;\n"
+//    "typedef unsigned int myType2;\n"
+//    "myType1 t1 = 0;\n"
+//    "myType2 t2 = 0;\n"
+//    "ns::vl j = 1000;\n"
+//    "ns::verylong k = 1000;\n"
+//         % Check("j 1000 basic::ns::vl");
+//         % Check("k 1000 basic::ns::verylong");
+//         % Check("t1 0 basic::myType1");
+//         % Check("t2 0 basic::myType2");
+
+//    QTest::newRow("Struct")
+//                  << Data(
+//    "Foo f(2);\n"
+//    "f.doit();\n"
+//    "f.doit();\n"
+//    "f.doit();\n"
+//         % CheckType("f Foo");
+//         % Check("f.a 5 int");
+//         % Check("f.b 2 int");
+
+//    QTest::newRow("Union")
+//                  << Data(
+//    "union U\n"
+//    "{\n"
+//    "  int a;\n"
+//    "  int b;\n"
+//    "} u;\n"
+//         % CheckType("u basic::U");
+//         % CheckType("u.a int");
+//         % CheckType("u.b int");
+
+//    QTest::newRow("TypeFormats")
+//                  << Data(
+//    "// These tests should result in properly displayed umlauts in the\n"
+//    "// Locals and Expressions view. It is only support on gdb with Python");\n"
+//    "const char *s = "aöa";\n"
+//    "const wchar_t *w = L"aöa";\n"
+//    "QString u;\n"
+//    "// All: Select UTF-8 in "Change Format for Type" in L&W context menu");\n"
+//    "// Windows: Select UTF-16 in "Change Format for Type" in L&W context menu");\n"
+//    "// Other: Select UCS-6 in "Change Format for Type" in L&W context menu");\n"
+//    "if (sizeof(wchar_t) == 4)\n"
+//    "    u = QString::fromUcs4((uint *)w);\n"
+//    "else\n"
+//    "    u = QString::fromUtf16((ushort *)w);\n"
+//         % CheckType("s char *");
+//         % Check("u "" QString");
+//         % CheckType("w wchar_t *");
+
+
+
+//    typedef void *VoidPtr;
+//    typedef const void *CVoidPtr;
+
+//    struct A
+//    {
+//        A() : test(7) {}
+//        int test;
+//        void doSomething(CVoidPtr cp) const;
+//    };
+
+//    void A::doSomething(CVoidPtr cp) const
+//         % CheckType("cp basic::CVoidPtr");
+
+//    QTest::newRow("Pointer")
+//                  << Data(
+//        "Foo *f = new Foo();\n"
+//         % CheckType("f Foo");
+//         % Check("f.a 0 int");
+//         % Check("f.b 5 int");
+
+//    QTest::newRow("PointerTypedef")
+//                  << Data(
+//        "A a;\n"
+//        "VoidPtr p = &a;\n"
+//        "CVoidPtr cp = &a;\n"
+//         % CheckType("a basic::A");
+//         % CheckType("cp basic::CVoidPtr");
+//         % CheckType("p basic::VoidPtr");
+
+//    QTest::newRow("StringWithNewline")
+//                  << Data(
+//        "QString hallo = "hallo\nwelt";\n"
+//         % Check("hallo "hallo\nwelt" QString");
+//         % Check("that string is properly displayed");
+
+//    QTest::newRow("Reference1")
+//                  << Data(
+//        "int a = 43;\n"
+//        "const int &b = a;\n"
+//        "typedef int &Ref;\n"
+//        "const int c = 44;\n"
+//        "const Ref d = a;\n"
+//         % Check("a 43 int");
+//         % Check("b 43 int &");
+//         % Check("c 44 int");
+//         % Check("d 43 basic::Ref");
+
+//    QTest::newRow("Reference2")
+//                  << Data(
+//        "QString a = "hello";\n"
+//        "const QString &b = fooxx();\n"
+//        "typedef QString &Ref;\n"
+//        "const QString c = "world";\n"
+//        "const Ref d = a;\n"
+//         % Check("a "hello" QString");
+//         % Check("b "bababa" QString &");
+//         % Check("c "world" QString");
+//         % Check("d "hello" basic::Ref");
+
+//    QTest::newRow("Reference3(const QString &a)\n"
+//        "const QString &b = a;\n"
+//        "typedef QString &Ref;\n"
+//        "const Ref d = const_cast<Ref>(a);\n"
+//         % Check("a "hello" QString &");
+//         % Check("b "hello" QString &");
+//         % Check("d "hello" basic::Ref");
+
+//    QTest::newRow("DynamicReference")
+//                  << Data(
+//        "DerivedClass d;\n"
+//        "BaseClass *b1 = &d;\n"
+//        "BaseClass &b2 = d;\n"
+//         % CheckType("b1 DerivedClass *");
+//         % CheckType("b2 DerivedClass &");
+
+//    QTest::newRow("LongEvaluation1")
+//                  << Data(
+//        "QDateTime time = QDateTime::currentDateTime();\n"
+//        "const int N = 10000;\n"
+//        "QDateTime bigv[N];\n"
+//        "for (int i = 0; i < 10000; ++i) {\n"
+//        "    bigv[i] = time;\n"
+//        "    time = time.addDays(1);\n"
+//        "}\n"
+//         % Check("N 10000 int");
+//         % CheckType("bigv QDateTime [10000]");
+//         % CheckType("bigv.0 QDateTime");
+//         % CheckType("bigv.9999 QDateTime");
+//         % CheckType("time QDateTime");
+
+//    QTest::newRow("LongEvaluation2")
+//                  << Data(
+//        "const int N = 10000;\n"
+//        "int bigv[N];\n"
+//        "for (int i = 0; i < 10000; ++i)\n"
+//        "    bigv[i] = i;\n"
+//         % Check("N 10000 int");
+//         % CheckType("bigv int [10000]");
+//         % Check("bigv.0 0 int");
+//         % Check("bigv.9999 9999 int");
+
+//    QTest::newRow("Fork")
+//                  << Data(
+//        "QProcess proc;\n"
+//        "proc.start("/bin/ls");\n"
+//        "proc.waitForFinished();\n"
+//        "QByteArray ba = proc.readAllStandardError();\n"
+//        "ba.append('x');\n"
+//         % Check("ba "x" QByteArray");
+//         % Check("proc  QProcess");
+
+
+//    QTest::newRow("FunctionPointer")
+//                  << Data(
+//        "int testFunctionPointerHelper(int x) { return x; }\n"
+//        "typedef int (*func_t)(int);\n"
+//        "func_t f = testFunctionPointerHelper;\n"
+//        "int a = f(43);\n"
+//         % CheckType("f basic::func_t");
+
+//    QByteArray dataClass = "struct Class
+//    "{\n"
+//    "    Class() : a(34) {}\n"
+//    "    int testFunctionPointerHelper(int x) { return x; }\n"
+//    "    int a;\n"
+//    "};\n"
+
+//    QTest::newRow("MemberFunctionPointer")
+//                  << Data(
+
+//        "Class x;\n"
+//        "typedef int (Class::*func_t)(int);\n"
+//        "func_t f = &Class::testFunctionPointerHelper;\n"
+//        "int a = (x.*f)(43);\n"
+//         % CheckType("f basic::func_t");
+
+//    QTest::newRow("MemberPointer")
+//                  << Data(
+//        Class x;\n"
+//        typedef int (Class::*member_t);\n"
+//        member_t m = &Class::a;\n"
+//        int a = x.*m;\n"
+//         % CheckType("m basic::member_t");\n"
+//        // Continue");\n"
+
+//         % Check("there's a valid display for m");
+
+//    QTest::newRow("PassByReferenceHelper(Foo &f)
+//         % CheckType("f Foo &");\n"
+//         % Check("f.a 12 int");\n"
+//        // Continue");\n"
+//        ++f.a;\n"
+//         % CheckType("f Foo &");\n"
+//         % Check("f.a 13 int");\n"
+
+//    QTest::newRow("PassByReference")
+//                  << Data(
+//        "Foo f(12);\n"
+//        "testPassByReferenceHelper(f);\n"
+
+//    QTest::newRow("BigInt")
+//                  << Data(
+//        "qint64 a = Q_INT64_C(0xF020304050607080);\n"
+//        "quint64 b = Q_UINT64_C(0xF020304050607080);\n"
+//        "quint64 c = std::numeric_limits<quint64>::max() - quint64(1);\n"
+//         % Check("a -1143861252567568256 qint64");
+//         % Check("b -1143861252567568256 quint64");
+//         % Check("c -2 quint64");
+
+//    QTest::newRow("Hidden")
+//                  << Data(
+//    {
+//        int  n = 1;\n"
+//        n = 2;\n"
+//        BREAK_HERE;\n"
+//         % Check("n 2 int");\n"
+//        // Continue");\n"
+//        n = 3;\n"
+//        BREAK_HERE;\n"
+//         % Check("n 3 int");\n"
+//        // Continue");\n"
+//        {\n"
+//            QString n = "2";\n"
+//            BREAK_HERE;\n"
+//             % Check("n "2" QString");\n"
+//             % Check("n@1 3 int");\n"
+//            // Continue");\n"
+//            n = "3";\n"
+//            BREAK_HERE;\n"
+//             % Check("n "3" QString");\n"
+//             % Check("n@1 3 int");\n"
+//            // Continue");\n"
+//            {\n"
+//                double n = 3.5;\n"
+//                BREAK_HERE;\n"
+//                 % Check("n 3.5 double");\n"
+//                 % Check("n@1 "3" QString");\n"
+//                 % Check("n@2 3 int");\n"
+//                // Continue");\n"
+//                ++n;\n"
+//                BREAK_HERE;\n"
+//                 % Check("n 4.5 double");\n"
+//                 % Check("n@1 "3" QString");\n"
+//                 % Check("n@2 3 int");\n"
+//                // Continue");\n"
+//                dummyStatement(&n);\n"
+//            }\n"
+//            BREAK_HERE;\n"
+//             % Check("n "3" QString");\n"
+//             % Check("n@1 3 int");\n"
+//            // Continue");\n"
+//            n = "3";\n"
+//            n = "4";
+//            BREAK_HERE;\n"
+//             % Check("n "4" QString");\n"
+//             % Check("n@1 3 int");\n"
+//            // Continue");\n"
+//            dummyStatement(&n);\n"
+//        }\n"
+//        ++n;\n"
+//        dummyStatement(&n);\n"
+//    }\n"
+//\n"
+//    int testReturnInt")
+//                  << Data(
+//    {
+//        return 1;
+//    }
+
+//    bool testReturnBool")
+//                  << Data(
+//    {
+//        return true;
+//    }
+
+//    QString testReturnQString")
+//                  << Data(
+//    {
+//        return "string";
+//    }
+
+//    QTest::newRow("Return")
+//                  << Data(
+//    {
+//        bool b = testReturnBool();
+//        BREAK_HERE;
+//         % Check("b true bool");
+//        // Continue");
+//        int i = testReturnInt();
+//        BREAK_HERE;
+//         % Check("i 1 int");
+//        // Continue");
+//        QString s = testReturnQString();
+//        BREAK_HERE;
+//         % Check("s "string" QString");
+//        // Continue");
+//        dummyStatement(&i, &b, &s);
+//    }
+
+//    #ifdef Q_COMPILER_RVALUE_REFS\n"
+//    struct X { X() : a(2), b(3) {} int a, b; };\n"
+//\n"
+//    X testRValueReferenceHelper1()\n"
+//    {\n"
+//        return X();\n"
+//    }\n"
+//\n"
+//    X testRValueReferenceHelper2(X &&x)\n"
+//    {\n"
+//        return x;\n"
+//    }\n"
+//\n"
+//    QTest::newRow("RValueReference()\n"
+//    {\n"
+//        X &&x1 = testRValueReferenceHelper1();\n"
+//        X &&x2 = testRValueReferenceHelper2(std::move(x1));\n"
+//        X &&x3 = testRValueReferenceHelper2(testRValueReferenceHelper1());\n"
+//\n"
+//        X y1 = testRValueReferenceHelper1();\n"
+//        X y2 = testRValueReferenceHelper2(std::move(y1));\n"
+//        X y3 = testRValueReferenceHelper2(testRValueReferenceHelper1());\n"
+//\n"
+//        BREAK_HERE;\n"
+//        // Continue");\n"
+//        dummyStatement(&x1, &x2, &x3, &y1, &y2, &y3);\n"
+//    }\n"
+
+//    QTest::newRow("SSE")
+//                  << Data(
+//    {
+//    #ifdef __SSE__\n"
+//        float a[4];\n"
+//        float b[4];\n"
+//        int i;\n"
+//        for (i = 0; i < 4; i++) {\n"
+//            a[i] = 2 * i;\n"
+//            b[i] = 2 * i;\n"
+//        }\n"
+//        __m128 sseA, sseB;\n"
+//        sseA = _mm_loadu_ps(a);\n"
+//        sseB = _mm_loadu_ps(b);\n"
+//         % CheckType("sseA __m128");
+//         % CheckType("sseB __m128");
+//        // Continue");
+//        dummyStatement(&i, &sseA, &sseB);
+//    #endif
+//    }
+
+//} // namespace sse
+
+
+//namespace qscript {
+
+//    QTest::newRow("QScript")
+//                  << Data(
+//"        QScriptEngine engine;n"
+//"        QDateTime date = QDateTime::currentDateTime();n"
+//"        QScriptValue s;n"
+//"n"
+//"         % Check("engine  QScriptEngine");n"
+//"         % Check("s (invalid) QScriptValue");n"
+//"         % Check("x1 <not accessible> QString");n"
+//"        // Continue");n"
+//"        s = QScriptValue(33);n"
+//"        int x = s.toInt32();n"
+//"n"
+//"        s = QScriptValue(QString("34"));n"
+//"        QString x1 = s.toString();n"
+//"n"
+//"        s = engine.newVariant(QVariant(43));n"
+//"        QVariant v = s.toVariant();n"
+//"n"
+//"        s = engine.newVariant(QVariant(43.0));n"
+//"        s = engine.newVariant(QVariant(QString("sss")));n"
+//"        s = engine.newDate(date);n"
+//"        date = s.toDateTime();n"
+//"        s.setProperty("a", QScriptValue());n"
+//"        QScriptValue d = s.data();n"
+//         % Check("d (invalid) QScriptValue");
+//         % Check("v 43 QVariant (int)");
+//         % Check("x 33 int");
+//         % Check("x1 "34" QString");
+
+
+//    QTest::newRow("WTFString")
+//                  << Data(
+//        "QWebPage p;
+//         % CheckType("p QWebPage");
+
+//    QTest::newRow("BoostOptional1")
+//                  << Data(
+//        "boost::optional<int> i0, i;
+//        "i = 1;
+//         % Check("i0 <uninitialized> boost::optional<int>");
+//         % Check("i 1 boost::optional<int>");
+
+//    QTest::newRow("BoostOptional2")
+//                  << Data(
+//        "boost::optional<QStringList> sl0, sl;\n"
+//        "sl = (QStringList() << "xxx" << "yyy");\n"
+//        "sl.get().append("zzz");\n"
+//         % Check("sl <uninitialized> boost::optional<QStringList>");
+//         % Check("sl <3 items> boost::optional<QStringList>");
+
+//    QTest::newRow("BoostSharedPtr")
+//                  << Data(
+//        "boost::shared_ptr<int> s;\n"
+//        "boost::shared_ptr<int> i(new int(43));\n"
+//        "boost::shared_ptr<int> j = i;\n"
+//        "boost::shared_ptr<QStringList> sl(new QStringList(QStringList() << "HUH!"));
+//         % Check("s (null) boost::shared_ptr<int>");
+//         % Check("i 43 boost::shared_ptr<int>");
+//         % Check("j 43 boost::shared_ptr<int>");
+//         % Check("sl  boost::shared_ptr<QStringList>");
+//         % Check("sl.data <1 items> QStringList
+
+//    QTest::newRow("BoostGregorianDate")
+//                  << Data(
+//        "using namespace boost;\n"
+//        "using namespace gregorian;\n"
+//        "date d(2005, Nov, 29);\n"
+//        "d += months(1);\n"
+//        "d += months(1);\n"
+//        "// snap-to-end-of-month behavior kicks in:\n"
+//        "d += months(1);\n"
+//        "// Also end of the month (expected in boost)\n"
+//        "d += months(1);\n"
+//        "// Not where we started (expected in boost)\n"
+//        "d -= months(4);\n"
+//         % Check("d Tue Nov 29 2005 boost::gregorian::date");
+//         % Check("d Thu Dec 29 2005 boost::gregorian::date");
+//         % Check("d Sun Jan 29 2006 boost::gregorian::date");
+//         % Check("d Tue Feb 28 2006 boost::gregorian::date");
+//         % Check("d Fri Mar 31 2006 boost::gregorian::date");
+//         % Check("d Wed Nov 30 2005 boost::gregorian::date");
+
+//    QTest::newRow("BoostPosixTimeTimeDuration")
+//                  << Data(
+//        "using namespace boost;\n"
+//        "using namespace posix_time;\n"
+//        "time_duration d1(1, 0, 0);\n"
+//        "time_duration d2(0, 1, 0);\n"
+//        "time_duration d3(0, 0, 1);\n"
+//         % Check("d1 01:00:00 boost::posix_time::time_duration");
+//         % Check("d2 00:01:00 boost::posix_time::time_duration");
+//         % Check("d3 00:00:01 boost::posix_time::time_duration");
+
+//    QTest::newRow("BoostBimap")
+//                  << Data(
+//        "typedef boost::bimap<int, int> B;\n"
+//        "B b;\n"
+//        "b.left.insert(B::left_value_type(1, 2));\n"
+//        "B::left_const_iterator it = b.left.begin();\n"
+//        "int l = it->first;\n"
+//        "int r = it->second;\n"
+//         % Check("b <0 items> boost::B");
+//         % Check("b <1 items> boost::B");
+
+//    QTest::newRow("BoostPosixTimePtime")
+//                  << Data(
+//        "using namespace boost;\n"
+//        "using namespace gregorian;\n"
+//        "using namespace posix_time;\n"
+//        "ptime p1(date(2002, 1, 10), time_duration(1, 0, 0));\n"
+//        "ptime p2(date(2002, 1, 10), time_duration(0, 0, 0));\n"
+//        "ptime p3(date(1970, 1, 1), time_duration(0, 0, 0));\n"
+//         % Check("p1 Thu Jan 10 01:00:00 2002 boost::posix_time::ptime");
+//         % Check("p2 Thu Jan 10 00:00:00 2002 boost::posix_time::ptime");
+//         % Check("p3 Thu Jan 1 00:00:00 1970 boost::posix_time::ptime");
+
+
+
+//    // This tests qdump__KRBase in dumpers/qttypes.py which uses
+//    // a static typeflag to dispatch to subclasses");
+
+//    QTest::newRow("KR")
+//          << Data(
+//            "namespace kr {\n"
+//\n"
+//            "   // FIXME: put in namespace kr, adjust qdump__KRBase in dumpers/qttypes.py\n"
+//            "   struct KRBase\n"
+//            "   {\n"
+//            "       enum Type { TYPE_A, TYPE_B } type;\n"
+//            "       KRBase(Type _type) : type(_type) {}\n"
+//            "   };\n"
+//\n"
+//            "   struct KRA : KRBase { int x; int y; KRA():KRBase(TYPE_A), x(1), y(32) {} };\n"
+//            "   struct KRB : KRBase { KRB():KRBase(TYPE_B) {} };\n"
+
+//            "/} // namespace kr\n"
+
+//        "KRBase *ptr1 = new KRA;\n"
+//        "KRBase *ptr2 = new KRB;\n"
+//        "ptr2 = new KRB;\n"
+//         % CheckType("ptr1 KRBase");
+//         % Check("ptr1.type KRBase::TYPE_A (0) KRBase::Type");
+//         % CheckType("ptr2 KRBase");
+//         % Check("ptr2.type KRBase::TYPE_B (1) KRBase::Type");
+
+
+
+//    QTest::newRow("Eigen")
+//             << Data(
+//        "using namespace Eigen;\n"
+
+//        "Vector3d test = Vector3d::Zero();\n"
+
+//        "Matrix3d myMatrix = Matrix3d::Constant(5);\n"
+//        "MatrixXd myDynamicMatrix(30, 10);\n"
+
+//        "myDynamicMatrix(0, 0) = 0;\n"
+//        "myDynamicMatrix(1, 0) = 1;\n"
+//        "myDynamicMatrix(2, 0) = 2;\n"
+
+//        "Matrix<double, 12, 15, ColMajor> colMajorMatrix;\n"
+//        "Matrix<double, 12, 15, RowMajor> rowMajorMatrix;\n"
+
+//        "int k = 0;\n"
+//        "for (int i = 0; i != 12; ++i) {\n"
+//        "    for (int j = 0; j != 15; ++j) {\n"
+//        "        colMajorMatrix(i, j) = k;\n"
+//        "        rowMajorMatrix(i, j) = k;\n"
+//        "        ++k;\n"
+//        "    }\n"
+//        "}\n"
+
+
+
+//    QTest::newRow("https://bugreports.qt-project.org/browse/QTCREATORBUG-3611")
+//        "typedef unsigned char byte;\n"
+//        "byte f = '2';\n"
+//        "int *x = (int*)&f;\n"
+//         % Check("f 50 '2' bug3611::byte");
+
+
+
+//    QTest::newRow("https://bugreports.qt-project.org/browse/QTCREATORBUG-4904")
+//        << Data(
+
+//    "struct CustomStruct {\n"
+//    "    int id;\n"
+//    "    double dvalue;\n"
+//    "};",
+//        "QMap<int, CustomStruct> map;\n"
+//        "CustomStruct cs1;\n"
+//        "cs1.id = 1;\n"
+//        "cs1.dvalue = 3.14;\n"
+//        "CustomStruct cs2 = cs1;\n"
+//        "cs2.id = -1;\n"
+//        "map.insert(cs1.id, cs1);\n"
+//        "map.insert(cs2.id, cs2);\n"
+//        "QMap<int, CustomStruct>::iterator it = map.begin();\n"
+//         % Check("map <2 items> QMap<int, bug4904::CustomStruct>");
+//         % Check("map.0   QMapNode<int, bug4904::CustomStruct>");
+//         % Check("map.0.key -1 int");
+//         % CheckType("map.0.value bug4904::CustomStruct");
+//         % Check("map.0.value.dvalue 3.1400000000000001 double");
+//         % Check("map.0.value.id -1 int");
+
+
+//    QTest::newRow("// https://bugreports.qt-project.org/browse/QTCREATORBUG-5106")
+//        << Data(
+//    "class A5106\n"
+//    "{\n"
+//    "public:\n"
+//    "        A5106(int a, int b) : m_a(a), m_b(b) {}\n"
+//    "        virtual int test() { return 5; }\n"
+//    "private:\n"
+//    "        int m_a, m_b;\n"
+//    "};\n"
+
+//    "class B5106 : public A5106\n"
+//    "{\n"
+//    "public:\n"
+//    "        B5106(int c, int a, int b) : A5106(a, b), m_c(c) {}\n"
+//    "        virtual int test() { return 4; BREAK_HERE; }\n"
+//    "private:\n"
+//    "        int m_c;\n"
+//    "};\n"
+//    ,
+//    "    B5106 b(1,2,3);\n"
+//    "    b.test();\n"
+//    "    b.A5106::test();\n"
+//    }
+
+
+//    // https://bugreports.qt-project.org/browse/QTCREATORBUG-5184
+
+//    // Note: The report there shows type field "QUrl &" instead of QUrl");
+//    // It's unclear how this can happen. It should never have been like
+//    // that with a stock 7.2 and any version of Creator");
+
+//    void helper(const QUrl &url)\n"
+//    {\n"
+//        QNetworkRequest request(url);\n"
+//        QList<QByteArray> raw = request.rawHeaderList();\n"
+//         % Check("raw <0 items> QList<QByteArray>");
+//         % CheckType("request QNetworkRequest");
+//         % Check("url "http://127.0.0.1/" QUrl &");
+//    }
+
+//    QTest::newRow("5184()
+//    {
+//        QUrl url(QString("http://127.0.0.1/"));\n"
+//        helper(url);\n"
+//    }
+
+
+//namespace qc42170 {
+
+//    // http://www.qtcentre.org/threads/42170-How-to-watch-data-of-actual-type-in-debugger
+
+//    struct Object
+//    {
+//        Object(int id_) : id(id_) {}
+//        virtual ~Object() {}
+//        int id;
+//    };
+
+//    struct Point : Object
+//    {
+//        Point(double x_, double y_) : Object(1), x(x_), y(y_) {}
+//        double x, y;
+//    };
+
+//    struct Circle : Point
+//    {
+//        Circle(double x_, double y_, double r_) : Point(x_, y_), r(r_) { id = 2; }
+//        double r;
+//    };
+
+//    void helper(Object *obj)
+//    {
+//         % CheckType("obj qc42170::Circle");
+//        // Continue");
+
+//         % Check("that obj is shown as a 'Circle' object");
+//        dummyStatement(obj);
+//    }
+
+//    QTest::newRow("42170")
+//                      << Data(
+//    {
+//        Circle *circle = new Circle(1.5, -2.5, 3.0);
+//        Object *obj = circle;
+//        helper(circle);
+//        helper(obj);
+//    }
+
+//} // namespace qc42170
+
+
+//namespace bug5799 {
+
+//    // https://bugreports.qt-project.org/browse/QTCREATORBUG-5799
+
+//    QTest::newRow("5799()
+//    "typedef struct { int m1; int m2; } S1;\n"
+//    "struct S2 : S1 { };\n"
+//    "typedef struct S3 { int m1; int m2; } S3;\n"
+//    "struct S4 : S3 { };\n"
+
+//        "S2 s2;\n"
+//        "s2.m1 = 5;\n"
+//        "S4 s4;\n"
+//        "s4.m1 = 5;\n"
+//        "S1 a1[10];\n"
+//        "typedef S1 Array[10];\n"
+//        "Array a2;\n"
+//         % CheckType("a1 bug5799::S1 [10]");
+//         % CheckType("a2 bug5799::Array");
+//         % CheckType("s2 bug5799::S2");
+//         % CheckType("s2.@1 bug5799::S1");
+//         % Check("s2.@1.m1 5 int");
+//         % CheckType("s2.@1.m2 int");
+//         % CheckType("s4 bug5799::S4");
+//         % CheckType("s4.@1 bug5799::S3");
+//         % Check("s4.@1.m1 5 int");
+//         % CheckType("s4.@1.m2 int");
+
+
+//    // http://www.qtcentre.org/threads/41700-How-to-watch-STL-containers-iterators-during-debugging
+
+//    QTest::newRow("41700")
+//                            << Data(
+//    {
+//        "using namespace std;\n"
+//        "typedef map<string, list<string> > map_t;\n"
+//        "map_t m;\n"
+//        "m["one"].push_back("a");\n"
+//        "m["one"].push_back("b");\n"
+//        "m["one"].push_back("c");\n"
+//        "m["two"].push_back("1");\n"
+//        "m["two"].push_back("2");\n"
+//        "m["two"].push_back("3");\n"
+//        "map_t::const_iterator it = m.begin();
+//         % Check("m <2 items> qc41700::map_t");
+//         % Check("m.0   std::pair<std::string const, std::list<std::string>>");
+//         % Check("m.0.first "one" std::string");
+//         % Check("m.0.second <3 items> std::list<std::string>");
+//         % Check("m.0.second.0 "a" std::string");
+//         % Check("m.0.second.1 "b" std::string");
+//         % Check("m.0.second.2 "c" std::string");
+//         % Check("m.1   std::pair<std::string const, std::list<std::string>>");
+//         % Check("m.1.first "two" std::string");
+//         % Check("m.1.second <3 items> std::list<std::string>");
+//         % Check("m.1.second.0 "1" std::string");
+//         % Check("m.1.second.1 "2" std::string");
+//         % Check("m.1.second.2 "3" std::string");
+
+
+//    // http://codepaster.europe.nokia.com/?id=42895
+
+//    QTest::newRow("42895()
+//    "void g(int c, int d)\n"
+//    "{\n"
+//        "qDebug() << c << d;\n"
+//        "stopper()"\n"
+//\n"
+//    "void f(int a, int b)\n"
+//    "{\n"
+//    "    g(a, b);\n"
+//    "}\n"
+
+//    "    f(3, 4);\n"
+
+//         % Check("c 3 int");
+//         % Check("d 4 int");
+//         % Check("there are frames for g and f in the stack view");
+
+
+
+
+//    // https://bugreports.qt-project.org/browse/QTCREATORBUG-6465
+
+//    QTest::newRow("6465()\n"
+//    {\n"
+//        typedef char Foo[20];\n"
+//        Foo foo = "foo";\n"
+//        char bar[20] = "baz";
+
+//namespace bug6857 {
+
+//    class MyFile : public QFile
+//    {
+//    public:
+//        MyFile(const QString &fileName)
+//            : QFile(fileName) {}
+//    };
+
+//    QTest::newRow("6857")
+//                               << Data(
+//        MyFile file("/tmp/tt");
+//        file.setObjectName("A file");
+//         % Check("file  bug6857::MyFile");
+//         % Check("file.@1 "/tmp/tt" QFile");
+//         % Check("file.@1.@1.@1 "A file" QObject");
+
+
+//namespace bug6858 {
+
+//    class MyFile : public QFile\n"
+//    {\n"
+//    public:\n"
+//        MyFile(const QString &fileName)\n"
+//            : QFile(fileName) {}\n"
+//    };\n"
+
+//    QTest::newRow("6858")
+//                                  << Data(
+//        MyFile file("/tmp/tt");\n"
+//        file.setObjectName("Another file");\n"
+//        QFile *pfile = &file;\n"
+//         % Check("pfile  bug6858::MyFile");
+//         % Check("pfile.@1 "/tmp/tt" QFile");
+//         % Check("pfile.@1.@1.@1 "Another file" QObject");
+
+//namespace bug6863 {
+
+//    class MyObject : public QObject\n"
+//    {\n"
+//        Q_OBJECT\n"
+//    public:\n"
+//        MyObject() {}\n"
+//    };\n"
+//\n"
+//    void setProp(QObject *obj)\n"
+//    {\n"
+//        obj->setProperty("foo", "bar");
+//         % Check("obj.[QObject].properties <2 items>");
+//        // Continue");
+//        dummyStatement(&obj);
+//    }
+
+//    QTest::newRow("6863")
+//                                     << Data(
+//    {
+//        QFile file("/tmp/tt");\n"
+//        setProp(&file);\n"
+//        MyObject obj;\n"
+//        setProp(&obj);\n"
+//    }\n"
+
+//}
+
+
+
+//    QTest::newRow("6933")
+//                                        << Data(
+//    "class Base\n"
+//    "{\n"
+//    "public:\n"
+//    "    Base() : a(21) {}\n"
+//    "    virtual ~Base() {}\n"
+//    "    int a;\n"
+//    "};\n"
+
+//    "class Derived : public Base\n"
+//    "{\n"
+//    "public:\n"
+//    "    Derived() : b(42) {}\n"
+//    "    int b;\n"
+//    "};\n"
+
+//        "Derived d;\n"
+//        "Base *b = &d;\n"
+//         % Check("b.[bug6933::Base].[vptr]
+//         % Check("b.b 42 int");
+
+
+//    QTest::newRow("(const char *format, ...)\n"
+//        "va_list arg;\n"
+//        "va_start(arg, format);\n"
+//        "int i = va_arg(arg, int);\n"
+//        "double f = va_arg(arg, double);\n"
+//        "va_end(arg);\n"
+
+//    QTest::newRow("VaList()")
+//            << Data("test(\"abc\", 1, 2.0);\n");
+
+
+
+
+//    QTest::newRow("13393")
+//                                           << Data(
+//    "struct Base {\n"
+//    "    Base() : a(1) {}
+//    "    virtual ~Base() {}  // Enforce type to have RTTI\n"
+//    "    int a;\n"
+//    "};\n"
+
+
+//"    struct Derived : public Base {\n"
+//"        Derived() : b(2) {}\n"
+//"        int b;\n"
+//"    };\n"
+
+//"    struct S\n"
+//"    {\n"
+//"        Base *ptr;\n"
+//"        const Base *ptrConst;\n"
+//"        Base &ref;\n"
+//"        const Base &refConst;\n"
+//"\n"
+//"        S(Derived &d)\n"
+//"            : ptr(&d), ptrConst(&d), ref(d), refConst(d)\n"
+//"        {}\n"
+//"    };\n"
+//        "Derived d;\n"
+//        "S s(d);\n"
+//        "Base *ptr = &d;\n"
+//        "const Base *ptrConst = &d;\n"
+//        "Base &ref = d;\n"
+//        "const Base &refConst = d;\n"
+//        "Base **ptrToPtr = &ptr;\n"
+//        "#if USE_BOOST\n"
+//        "boost::shared_ptr<Base> sharedPtr(new Derived());\n"
+//        "#else\n"
+//        "int sharedPtr = 1;\n"
+//        "#endif\n"
+//         % CheckType("d gdb13393::Derived");
+//         % CheckType("d.@1 gdb13393::Base");
+//         % Check("d.b 2 int");
+//         % CheckType("ptr gdb13393::Derived");
+//         % CheckType("ptr.@1 gdb13393::Base");
+//         % Check("ptr.@1.a 1 int");
+//         % CheckType("ptrConst gdb13393::Derived");
+//         % CheckType("ptrConst.@1 gdb13393::Base");
+//         % Check("ptrConst.b 2 int");
+//         % CheckType("ptrToPtr gdb13393::Derived");
+//         % CheckType("ptrToPtr.[vptr] ");
+//         % Check("ptrToPtr.@1.a 1 int");
+//         % CheckType("ref gdb13393::Derived");
+//         % CheckType("ref.[vptr] ");
+//         % Check("ref.@1.a 1 int");
+//         % CheckType("refConst gdb13393::Derived");
+//         % CheckType("refConst.[vptr] ");
+//         % Check("refConst.@1.a 1 int");
+//         % CheckType("s gdb13393::S");
+//         % CheckType("s.ptr gdb13393::Derived");
+//         % CheckType("s.ptrConst gdb13393::Derived");
+//         % CheckType("s.ref gdb13393::Derived");
+//         % CheckType("s.refConst gdb13393::Derived");
+//         % Check("sharedPtr 1 int");
+
+
+
+    // http://sourceware.org/bugzilla/show_bug.cgi?id=10586. fsf/MI errors out
+    // on -var-list-children on an anonymous union. mac/MI was fixed in 2006");
+    // The proposed fix has been reported to crash gdb steered from eclipse");
+    // http://sourceware.org/ml/gdb-patches/2011-12/msg00420.html
+    QTest::newRow("gdb10586mi")
+            << Data("struct test {\n"
+                    "    struct { int a; float b; };\n"
+                    "    struct { int c; float d; };\n"
+                    "} v = {{1, 2}, {3, 4}};\n")
+               % Check("v  gdb10586::test")
+               % Check("v.a 1 int");
+
+    QTest::newRow("gdb10586eclipse")
+            << Data("struct { int x; struct { int a; }; struct { int b; }; } v = {1, {2}, {3}};\n"
+                    "struct s { int x, y; } n = {10, 20};\n")
+               % CheckType("v {...}")
+               % CheckType("n gdb10586::s")
+               % Check("v.a 2 int")
+               % Check("v.b 3 int")
+               % Check("v.x 1 int")
+               % Check("n.x 10 int")
+               % Check("n.y 20 int");
 }
 
+
 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
@@ -311,4 +3617,3 @@ int main(int argc, char *argv[])
 }
 
 #include "tst_dumpers.moc"
-