LsColXMLParser: More testing
authorMarkus Goetz <markus@woboq.com>
Tue, 14 Apr 2015 12:41:48 +0000 (14:41 +0200)
committerMarkus Goetz <markus@woboq.com>
Tue, 14 Apr 2015 12:41:48 +0000 (14:41 +0200)
test/testxmlparse.h

index 4e871902c448010020ceb75aa397cc95057012ab..065d5cf6de65b069164bc906da227a7e1a092b66 100644 (file)
@@ -22,30 +22,35 @@ private:
   QStringList _subdirs;
   QStringList _items;
 
+public slots:
+  void slotDirectoryListingSubFolders(const QStringList& list)
+  {
+     qDebug() << "subfolders: " << list;
+     _subdirs.append(list);
+  }
+
+  void slotDirectoryListingIterated(const QString& item, const QMap<QString,QString>& )
+  {
+    qDebug() << "     item: " << item;
+    _items.append(item);
+  }
+
+  void slotFinishedSuccessfully()
+  {
+      _success = true;
+  }
+
 private slots:
-    void initTestCase() {
+    void init() {
+        qDebug() << Q_FUNC_INFO;
       _success = false;
+      _subdirs.clear();
+      _items.clear();
     }
 
-    void cleanupTestCase() {
-    }
-
-    void slotDirectoryListingSubFolders(const QStringList& list)
-    {
-       qDebug() << "subfolders: " << list;
-       _subdirs.append(list);
+    void cleanup() {
     }
 
-    void slotDirectoryListingIterated(const QString& item, const QMap<QString,QString>& )
-    {
-      qDebug() << "     item: " << item;
-      _items.append(item);
-    }
-
-    void slotFinishedSuccessfully()
-    {
-        _success = true;
-    }
 
     void testParser1() {
         const QByteArray testXml = "<?xml version='1.0' encoding='utf-8'?>"
@@ -120,6 +125,99 @@ private slots:
         QVERIFY(_subdirs.contains("/oc/remote.php/webdav/sharefolder/"));
         QVERIFY(_subdirs.size() == 1);
     }
+
+    void testParserBrokenXml() {
+        const QByteArray testXml = "X<?xml version='1.0' encoding='utf-8'?>"
+              "<d:multistatus xmlns:d=\"DAV:\" xmlns:s=\"http://sabredav.org/ns\" xmlns:oc=\"http://owncloud.org/ns\">"
+              "<d:response>"
+              "<d:href>/oc/remote.php/webdav/sharefolder/</d:href>"
+              "<d:propstat>"
+              "<d:prop>"
+              "<oc:id>00004213ocobzus5kn6s</oc:id>"
+              "<oc:permissions>RDNVCK</oc:permissions>"
+              "<oc:size>121780</oc:size>"
+              "<d:getetag>\"5527beb0400b0\"</d:getetag>"
+              "<d:resourcetype>"
+              "<d:collection/>"
+              "</d:resourcetype>"
+              "<d:getlastmodified>Fri, 06 Feb 2015 13:49:55 GMT</d:getlastmodified>"
+              "</d:prop>"
+              "<d:status>HTTP/1.1 200 OK</d:status>"
+              "</d:propstat>"
+              "<d:propstat>"
+              "<d:prop>"
+              "<d:getcontentlength/>"
+              "<oc:downloadURL/>"
+              "<oc:dDC/>"
+              "</d:prop>"
+              "<d:status>HTTP/1.1 404 Not Found</d:status>"
+              "</d:propstat>"
+              "</d:response>"
+              "<d:response>"
+              "<d:href>/oc/remote.php/webdav/sharefolder/quitte.pdf</d:href>"
+              "<d:propstat>"
+              "<d:prop>"
+              "<oc:id>00004215ocobzus5kn6s</oc:id>"
+              "<oc:permissions>RDNVW</oc:permissions>"
+              "<d:getetag>\"2fa2f0d9ed49ea0c3e409d49e652dea0\"</d:getetag>"
+              "<d:resourcetype/>"
+              "<d:getlastmodified>Fri, 06 Feb 2015 13:49:55 GMT</d:getlastmodified>"
+              "<d:getcontentlength>121780</d:getcontentlength>"
+              "</d:prop>"
+              "<d:status>HTTP/1.1 200 OK</d:status>"
+              "</d:propstat>"
+              "<d:propstat>"
+              "<d:prop>"
+              "<oc:downloadURL/>"
+              "<oc:dDC/>"
+              "</d:prop>"
+              "<d:status>HTTP/1.1 404 Not Found</d:status>"
+              "</d:propstat>"
+              "</d:response>"
+              "</d:multistatus>";
+
+
+        LsColXMLParser parser;
+
+        connect( &parser, SIGNAL(directoryListingSubfolders(const QStringList&)),
+                 this, SLOT(slotDirectoryListingSubFolders(const QStringList&)) );
+        connect( &parser, SIGNAL(directoryListingIterated(const QString&, const QMap<QString,QString>&)),
+                 this, SLOT(slotDirectoryListingIterated(const QString&, const QMap<QString,QString>&)) );
+        connect( &parser, SIGNAL(finishedWithoutError()),
+                 this, SLOT(slotFinishedSuccessfully()) );
+
+        QHash <QString, qint64> sizes;
+        QVERIFY(false == parser.parse( testXml, &sizes )); // verify false
+
+        QVERIFY(!_success);
+        QVERIFY(sizes.size() == 0 ); // No quota info in the XML
+
+        QVERIFY(_items.size() == 0 ); // FIXME: We should change the parser to not emit during parsing but at the end
+
+        QVERIFY(_subdirs.size() == 0);
+    }
+
+    void testParserEmptyXml() {
+        const QByteArray testXml = "";
+
+        LsColXMLParser parser;
+
+        connect( &parser, SIGNAL(directoryListingSubfolders(const QStringList&)),
+                 this, SLOT(slotDirectoryListingSubFolders(const QStringList&)) );
+        connect( &parser, SIGNAL(directoryListingIterated(const QString&, const QMap<QString,QString>&)),
+                 this, SLOT(slotDirectoryListingIterated(const QString&, const QMap<QString,QString>&)) );
+        connect( &parser, SIGNAL(finishedWithoutError()),
+                 this, SLOT(slotFinishedSuccessfully()) );
+
+        QHash <QString, qint64> sizes;
+        QVERIFY(false == parser.parse( testXml, &sizes )); // verify false
+
+        QVERIFY(!_success);
+        QVERIFY(sizes.size() == 0 ); // No quota info in the XML
+
+        QVERIFY(_items.size() == 0 ); // FIXME: We should change the parser to not emit during parsing but at the end
+        QVERIFY(_subdirs.size() == 0);
+    }
 };
 
 #endif