From 911d15a8797342432dff244b718d63bf260d466d Mon Sep 17 00:00:00 2001
From: ck <qt-info@nokia.com>
Date: Fri, 10 Jul 2009 14:57:50 +0200
Subject: [PATCH] Added QDumper auto tests.

Added auto tests for QChar and QFile dumpers.
---
 share/qtcreator/gdbmacros/gdbmacros.cpp |  3 +-
 tests/auto/debugger/main.cpp            | 83 ++++++++++++++++++++++---
 2 files changed, 77 insertions(+), 9 deletions(-)

diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp
index 520378ea195..0b8beb049c5 100644
--- a/share/qtcreator/gdbmacros/gdbmacros.cpp
+++ b/share/qtcreator/gdbmacros/gdbmacros.cpp
@@ -1473,6 +1473,7 @@ static void qDumpQHash(QDumper &d)
         const int keyOffset = hashOffset(opt, true, keySize, valueSize);
         const int valueOffset = hashOffset(opt, false, keySize, valueSize);
 
+#if 0
         d.beginItem("extra");
         d.put("isSimpleKey: ").put(isSimpleKey);
         d.put(" isSimpleValue: ").put(isSimpleValue);
@@ -1481,7 +1482,7 @@ static void qDumpQHash(QDumper &d)
         d.put(" valueOffset: ").put(valueOffset);
         d.put(" opt: ").put(opt);
         d.endItem();
-
+#endif
         QHashData::Node *node = h->firstNode();
         QHashData::Node *end = reinterpret_cast<QHashData::Node *>(h);
         int i = 0;
diff --git a/tests/auto/debugger/main.cpp b/tests/auto/debugger/main.cpp
index 7e0b947220e..faf00d4406a 100644
--- a/tests/auto/debugger/main.cpp
+++ b/tests/auto/debugger/main.cpp
@@ -123,6 +123,8 @@ private slots:
     void niceType_data();
 
     void dumperCompatibility();
+    void dumpQChar();
+    void dumpQFile();
     void dumpQHash();
     void dumpQList_int();
     void dumpQList_char();
@@ -145,6 +147,9 @@ public slots:
 
 private:
     QProcess m_proc; // the Qt Creator process
+
+    void dumpQFileHelper(const QString &name, bool exists);
+    void dumpQCharHelper(QChar &c);
 };
 
 static QByteArray stripped(QByteArray ba)
@@ -160,7 +165,7 @@ static QByteArray stripped(QByteArray ba)
 
 void tst_Debugger::infoBreak()
 {
-    // This tests the regular expression used in GdbEngine::extractDataFromInfoBreak 
+    // This tests the regular expression used in GdbEngine::extractDataFromInfoBreak
     // to discover breakpoints in constructors.
 
     // Copied from gdbengine.cpp:
@@ -220,7 +225,7 @@ QString niceType(QString type)
     for (int i = 0; i < 10; ++i) {
         int start = type.indexOf("std::allocator<");
         if (start == -1)
-            break; 
+            break;
         // search for matching '>'
         int pos;
         int level = 0;
@@ -328,7 +333,7 @@ void tst_Debugger::niceType_data()
     QTest::newRow("stack")
         << "std::stack<int, std::deque<int, std::allocator<int> > >"
         << "std::stack<int>";
-    
+
     QTest::newRow("map")
         << "std::map<myns::QString, Foo, std::less<myns::QString>, "
            "std::allocator<std::pair<const myns::QString, Foo> > >"
@@ -347,8 +352,8 @@ void tst_Debugger::niceType_data()
 static void testDumper(QByteArray expected0, void *data, QByteArray outertype,
     bool dumpChildren, QByteArray innertype = "", QByteArray exp = "",
     int extraInt0 = 0, int extraInt1 = 0, int extraInt2 = 0, int extraInt3 = 0)
-{ 
-    sprintf(xDumpInBuffer, "%s%c%s%c%s%c%s%c%s%c", 
+{
+    sprintf(xDumpInBuffer, "%s%c%s%c%s%c%s%c%s%c",
         outertype.data(), 0, "iname", 0, exp.data(), 0,
         innertype.data(), 0, "iname", 0);
     void *res = qDumpObjectData440(2, 42, data, dumpChildren,
@@ -396,6 +401,68 @@ void tst_Debugger::dumperCompatibility()
 {
 }
 
+void tst_Debugger::dumpQCharHelper(QChar &c)
+{
+    char ch = c.isPrint() && c.unicode() < 127 ? c.toAscii() : '?';
+    testDumper(QByteArray("value=''") + QByteArray(1, ch) + QByteArray("', ucs=")
+        + QByteArray(QString::number(c.unicode()).toAscii())
+        + QByteArray("',numchild='0'"), &c, NS"QChar", false);
+}
+
+
+void tst_Debugger::dumpQChar()
+{
+    // Case 1: Printable ASCII character.
+    QChar c('X');
+    dumpQCharHelper(c);
+
+    // Case 2: Printable non-ASCII character.
+    c = QChar(0x600);
+    dumpQCharHelper(c);
+
+    // Case 3: Non-printable ASCII character.
+    c = QChar::fromAscii('\a');
+    dumpQCharHelper(c);
+
+    // Case 4: Non-printable non-ASCII character.
+    c = QChar(0x9f);
+    dumpQCharHelper(c);
+
+    // Case 5: Printable ASCII Character that looks like the replacement character.
+    c = QChar::fromAscii('?');
+    dumpQCharHelper(c);
+}
+
+void tst_Debugger::dumpQFileHelper(const QString &name, bool exists)
+{
+    QFile file(name);
+    QByteArray filenameAsBase64(reinterpret_cast<const char *>(name.utf16()), 2 * name.size());
+    filenameAsBase64 = filenameAsBase64.toBase64();
+    const char *existsString = exists ? "'true'" : "'false'";
+    testDumper(
+            QByteArray("value='") + filenameAsBase64 +
+            QByteArray("',valueencoded='2',type='$T',numchild='2',children=[{name='fileName',value='") +
+            filenameAsBase64 +
+            QByteArray("',type='"NS"QString',numchild='0',valueencoded='2'},{name='exists',value=") +
+            QByteArray(existsString) + QByteArray(",type='bool',numchild='0'}]"),
+            &file, NS"QFile", true);
+
+}
+
+void tst_Debugger::dumpQFile()
+{
+    // Case 1: Empty file name => Does not exist.
+    dumpQFileHelper("", false);
+
+    // Case 2: File that is known to exist.
+    QTemporaryFile file;
+    file.open();
+    dumpQFileHelper(file.fileName(), true);
+
+    // Case 3: File with a name that most likely does not exist.
+    dumpQFileHelper("jfjfdskjdflsdfjfdls", false);
+}
+
 void tst_Debugger::dumpQHash()
 {
     QHash<QString, QList<int> > hash;
@@ -540,7 +607,7 @@ void tst_Debugger::dumpQObject()
 }
 
 void tst_Debugger::dumpQString()
-{ 
+{
     QString s;
     testDumper("value='',valueencoded='2',type='$T',numchild='0'",
         &s, NS"QString", false);
@@ -550,14 +617,14 @@ void tst_Debugger::dumpQString()
 }
 
 void tst_Debugger::dumpQVariant_invalid()
-{ 
+{
     QVariant v;
     testDumper("value='(invalid)',type='$T',numchild='0'",
         &v, NS"QVariant", false);
 }
 
 void tst_Debugger::dumpQVariant_QString()
-{ 
+{
     QVariant v = "abc";
     testDumper("value='KFFTdHJpbmcpICJhYmMi',valueencoded='5',type='$T',"
         "numchild='0'",
-- 
GitLab