diff --git a/src/plugins/debugger/gdbmi.cpp b/src/plugins/debugger/gdbmi.cpp
index 2e778cb8e83c9b6965f56ccc7c81d6a0cf65def8..febf3841f8f10b5af6b4e6fd793812386ca7cc2f 100644
--- a/src/plugins/debugger/gdbmi.cpp
+++ b/src/plugins/debugger/gdbmi.cpp
@@ -239,9 +239,9 @@ QByteArray GdbMi::toString(bool multiline, int indent) const
             dumpChildren(&result, multiline, indent + 1);
             result += '\n' + ind(indent) + "}";
         } else {
-        result += "{";
+            result += "{";
             dumpChildren(&result, multiline, indent + 1);
-        result += "}";
+            result += "}";
         }
         break;
     case List:
@@ -250,11 +250,11 @@ QByteArray GdbMi::toString(bool multiline, int indent) const
         if (multiline) {
             result += "[\n";
             dumpChildren(&result, multiline, indent + 1);
-            result += "]";
+            result += '\n' + ind(indent) + "]";
         } else {
             result += "[";
             dumpChildren(&result, multiline, indent + 1);
-            result += '\n' + ind(indent) + "]";
+            result += "]";
         }
         break;
     }
@@ -319,152 +319,5 @@ QByteArray GdbResultRecord::toString() const
     return result;
 }
 
-
-//////////////////////////////////////////////////////////////////////////////////
-//
-// GdbStreamOutput
-//
-//////////////////////////////////////////////////////////////////////////////////
-
-#if 0
-
-static const char test1[] =
-    "1^done,stack=[frame={level=\"0\",addr=\"0x00000000004061ca\","
-    "func=\"main\",file=\"test1.cpp\","
-    "fullname=\"/home/apoenitz/work/test1/test1.cpp\",line=\"209\"}]\n"
-    "(gdb)\n";
-
-static const char test2[] =
-    "2^done,stack=[frame={level=\"0\",addr=\"0x00002ac058675840\","
-    "func=\"QApplication\",file=\"/home/apoenitz/dev/qt/src/gui/kernel/qapplication.cpp\","
-    "fullname=\"/home/apoenitz/dev/qt/src/gui/kernel/qapplication.cpp\",line=\"592\"},"
-    "frame={level=\"1\",addr=\"0x00000000004061e0\",func=\"main\",file=\"test1.cpp\","
-    "fullname=\"/home/apoenitz/work/test1/test1.cpp\",line=\"209\"}]\n"
-    "(gdb)\n";
-
-static const char test3[] =
-    "3^done,stack=[frame={level=\"0\",addr=\"0x00000000004061ca\","
-    "func=\"main\",file=\"test1.cpp\","
-    "fullname=\"/home/apoenitz/work/test1/test1.cpp\",line=\"209\"}]\n"
-    "(gdb)\n";
-
-static const char test4[] =
-    "&\"source /home/apoenitz/dev/ide/main/bin/gdb/qt4macros\\n\"\n"
-    "4^done\n"
-    "(gdb)\n";
-
-
-static const char test5[] =
-    "1*stopped,reason=\"breakpoint-hit\",bkptno=\"1\",thread-id=\"1\","
-    "frame={addr=\"0x0000000000405738\",func=\"main\","
-    "args=[{name=\"argc\",value=\"1\"},{name=\"argv\",value=\"0x7fff1ac78f28\"}],"
-    "file=\"test1.cpp\",fullname=\"/home/apoenitz/work/test1/test1.cpp\","
-    "line=\"209\"}\n"
-    "(gdb)\n";
-
-static const char test6[] =
-    "{u = {u = 2048, v = 16788279, w = -689265400}, a = 1, b = -689265424, c = 11063, s = {static null = {<No data fields>}, static shared_null = {ref = {value = 2}, alloc = 0, size = 0, data = 0x6098da, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, static shared_empty = {ref = {value = 1}, alloc = 0, size = 0, data = 0x2b37d84f8fba, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, d = 0x6098c0, static codecForCStrings = 0x0}}";
-
-static const char test8[] =
-    "8^done,data={locals={{name=\"a\"},{name=\"w\"}}}\n"
-    "(gdb)\n";
-
-static const char test9[] =
-    "9^done,data={locals=[name=\"baz\",name=\"urgs\",name=\"purgs\"]}\n"
-    "(gdb)\n";
-
-
-static const char test10[] =
-    "16^done,name=\"urgs\",numchild=\"1\",type=\"Urgs\"\n"
-    "(gdb)\n"
-    "17^done,name=\"purgs\",numchild=\"1\",type=\"Urgs *\"\n"
-    "(gdb)\n"
-    "18^done,name=\"bar\",numchild=\"0\",type=\"int\"\n"
-    "(gdb)\n"
-    "19^done,name=\"z\",numchild=\"0\",type=\"int\"\n"
-    "(gdb)\n";
-
-static const char test11[] =
-    "[{name=\"size\",value=\"1\",type=\"size_t\",readonly=\"true\"},"
-     "{name=\"0\",value=\"one\",type=\"QByteArray\"}]";
-
-static const char test12[] =
-    "{iname=\"local.hallo\",value=\"\\\"\\\"\",type=\"QByteArray\",numchild=\"0\"}";
-
-static struct Tester {
-
-    Tester() {
-        //test(test10);
-        test2(test12);
-        //test(test4);
-        //apple();
-        exit(0);
-    }
-
-    void test(const char* input)
-    {
-        //qDebug("\n<<<<\n%s\n====\n%s\n>>>>\n", input,
-           //qPrintable(GdbResponse(input).toString()));
-    }
-
-    void test2(const char* input)
-    {
-        GdbMi mi(input);
-        qDebug("\n<<<<\n%s\n====\n%s\n>>>>\n", input,
-            qPrintable(mi.toString()));
-    }
-
-    void apple()
-    {
-        QByteArray input(test9);
-/*
-        qDebug() << "input: " << input;
-        input = input.replace("{{","[");
-        input = input.replace("},{",",");
-        input = input.replace("}}","]");
-        qDebug() << "input: " << input;
-        GdbResponse response(input);
-        qDebug() << "read: " << response.toString();
-        GdbMi list = response.results[0].data.findChild("data").findChild("locals");
-        QByteArrayList locals;
-        foreach (const GdbMi &item, list.children())
-            locals.append(item.string());
-        qDebug() << "Locals (new): " << locals;
-*/
-    }
-    void parse(const QByteArray &str)
-    {
-        QByteArray result;
-        result += "\n ";
-        int indent = 0;
-        int from = 0;
-        int to = str.size();
-        if (str.size() && str[0] == '{' /*'}'*/) {
-            ++from;
-            --to;
-        }
-        for (int i = from; i < to; ++i) {
-            if (str[i] == '{')
-                result += "{\n" + QByteArray(2*++indent + 1, ' ');
-            else if (str[i] == '}') {
-                if (!result.isEmpty() && result[result.size() - 1] != '\n')
-                    result += "\n";
-                result += QByteArray(2*--indent + 1, ' ') + "}\n";
-            }
-            else if (str[i] == ',') {
-                if (true || !result.isEmpty() && result[result.size() - 1] != '\n')
-                    result += "\n";
-                result += QByteArray(2*indent, ' ');
-            }
-            else
-                result += str[i];
-        }
-        qDebug() << "result:\n" << result;
-    }
-
-} dummy;
-
-#endif
-
 } // namespace Internal
 } // namespace Debugger
diff --git a/tests/auto/debugger/debugger.pro b/tests/auto/debugger/debugger.pro
new file mode 100644
index 0000000000000000000000000000000000000000..ddb80b2ba86fc2fec9dc3cdd5cb88345b3b09381
--- /dev/null
+++ b/tests/auto/debugger/debugger.pro
@@ -0,0 +1,12 @@
+
+QT += testlib
+
+DEBUGGERDIR = ../../../src/plugins/debugger
+UTILSDIR = ../../../src/libs
+
+SOURCES += \
+    $$DEBUGGERDIR/gdbmi.cpp \
+    main.cpp \
+
+INCLUDEPATH += $$DEBUGGERDIR $$UTILSDIR
+
diff --git a/tests/auto/debugger/main.cpp b/tests/auto/debugger/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e4e4a801c262923ee31919078a274dccb5d4e8ae
--- /dev/null
+++ b/tests/auto/debugger/main.cpp
@@ -0,0 +1,119 @@
+
+#include "gdbmi.h"
+
+#include <QtCore/QObject>
+#include <QtTest/QtTest>
+
+using namespace Debugger;
+using namespace Debugger::Internal;
+
+static const char test1[] =
+    "1^done,stack=[frame={level=\"0\",addr=\"0x00000000004061ca\","
+    "func=\"main\",file=\"test1.cpp\","
+    "fullname=\"/home/apoenitz/work/test1/test1.cpp\",line=\"209\"}]";
+
+static const char test2[] =
+    "2^done,stack=[frame={level=\"0\",addr=\"0x00002ac058675840\","
+    "func=\"QApplication\",file=\"/home/apoenitz/dev/qt/src/gui/kernel/qapplication.cpp\","
+    "fullname=\"/home/apoenitz/dev/qt/src/gui/kernel/qapplication.cpp\",line=\"592\"},"
+    "frame={level=\"1\",addr=\"0x00000000004061e0\",func=\"main\",file=\"test1.cpp\","
+    "fullname=\"/home/apoenitz/work/test1/test1.cpp\",line=\"209\"}]\n";
+
+static const char test3[] =
+    "3^done,stack=[frame={level=\"0\",addr=\"0x00000000004061ca\","
+    "func=\"main\",file=\"test1.cpp\","
+    "fullname=\"/home/apoenitz/work/test1/test1.cpp\",line=\"209\"}]\n";
+
+static const char test4[] =
+    "&\"source /home/apoenitz/dev/ide/main/bin/gdb/qt4macros\\n\"\n"
+    "4^done\n";
+
+static const char test5[] =
+    "1*stopped,reason=\"breakpoint-hit\",bkptno=\"1\",thread-id=\"1\","
+    "frame={addr=\"0x0000000000405738\",func=\"main\","
+    "args=[{name=\"argc\",value=\"1\"},{name=\"argv\",value=\"0x7fff1ac78f28\"}],"
+    "file=\"test1.cpp\",fullname=\"/home/apoenitz/work/test1/test1.cpp\","
+    "line=\"209\"}\n";
+
+static const char test6[] =
+    "{u = {u = 2048, v = 16788279, w = -689265400}, a = 1, b = -689265424, c = 11063, s = {static null = {<No data fields>}, static shared_null = {ref = {value = 2}, alloc = 0, size = 0, data = 0x6098da, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, static shared_empty = {ref = {value = 1}, alloc = 0, size = 0, data = 0x2b37d84f8fba, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, d = 0x6098c0, static codecForCStrings = 0x0}}";
+
+static const char test8[] =
+    "8^done,data={locals={{name=\"a\"},{name=\"w\"}}}\n";
+
+static const char test9[] =
+    "9^done,data={locals=[name=\"baz\",name=\"urgs\",name=\"purgs\"]}\n";
+
+static const char test10[] =
+    "16^done,name=\"urgs\",numchild=\"1\",type=\"Urgs\"\n";
+
+static const char test11[] =
+    "[{name=\"size\",value=\"1\",type=\"size_t\",readonly=\"true\"},"
+     "{name=\"0\",value=\"one\",type=\"QByteArray\"}]";
+
+static const char test12[] =
+    "{iname=\"local.hallo\",value=\"\\\"\\\"\",type=\"QByteArray\",numchild=\"0\"}";
+
+class tst_Debugger : public QObject
+{
+    Q_OBJECT
+
+public:
+    tst_Debugger() {}
+
+    void testMi(const char* input)
+    {
+        QCOMPARE('\n' + QString::fromLatin1(GdbMi(input).toString(false)),
+            '\n' + QString(input));
+    }
+
+    void parse(const QByteArray &str)
+    {
+        QByteArray result;
+        result += "\n ";
+        int indent = 0;
+        int from = 0;
+        int to = str.size();
+        if (str.size() && str[0] == '{' /*'}'*/) {
+            ++from;
+            --to;
+        }
+        for (int i = from; i < to; ++i) {
+            if (str[i] == '{')
+                result += "{\n" + QByteArray(2*++indent + 1, ' ');
+            else if (str[i] == '}') {
+                if (!result.isEmpty() && result[result.size() - 1] != '\n')
+                    result += "\n";
+                result += QByteArray(2*--indent + 1, ' ') + "}\n";
+            }
+            else if (str[i] == ',') {
+                if (!result.isEmpty() && result[result.size() - 1] != '\n')
+                    result += "\n";
+                result += QByteArray(2*indent, ' ');
+            }
+            else
+                result += str[i];
+        }
+        qDebug() << "result:\n" << result;
+    }
+
+
+
+private slots:
+    void mi1()  { testMi(test1);  }
+    void mi2()  { testMi(test2);  }
+    void mi3()  { testMi(test3);  }
+    void mi4()  { testMi(test4);  }
+    void mi5()  { testMi(test5);  }
+    void mi6()  { testMi(test6);  }
+    void mi8()  { testMi(test8);  }
+    void mi9()  { testMi(test9);  }
+    void mi10() { testMi(test10); }
+    void mi11() { testMi(test11); }
+    void mi12() { testMi(test12); }
+};
+
+QTEST_MAIN(tst_Debugger)
+
+#include "main.moc"
+