mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-26 15:06:08 +03:00
f427955512
Remove all configure_files: - Move all tests to cpp files - Use the QTEST_MAIN macro instead of a generated main.cpp - Include test*.moc in the cpp to let CMAKE_AUTOMOC call moc - Pass info through add_definitions instead of generating oc_bin.h with them This makes sure that build errors points to the original test source file instead of the generated one in the build directory to be able to jump and fix errors directly from the IDE's error pane.
445 lines
18 KiB
C++
445 lines
18 KiB
C++
/*
|
|
* This software is in the public domain, furnished "as is", without technical
|
|
* support, and with no warranty, express or implied, as to its usefulness for
|
|
* any purpose.
|
|
* */
|
|
|
|
#include <QtTest>
|
|
|
|
#include "networkjobs.h"
|
|
|
|
using namespace OCC;
|
|
|
|
class TestXmlParse : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
private:
|
|
bool _success;
|
|
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 init() {
|
|
qDebug() << Q_FUNC_INFO;
|
|
_success = false;
|
|
_subdirs.clear();
|
|
_items.clear();
|
|
}
|
|
|
|
void cleanup() {
|
|
}
|
|
|
|
|
|
void testParser1() {
|
|
const QByteArray testXml = "<?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(parser.parse( testXml, &sizes, "/oc/remote.php/webdav/sharefolder" ));
|
|
|
|
QVERIFY(_success);
|
|
QCOMPARE(sizes.size(), 1 ); // Quota info in the XML
|
|
|
|
QVERIFY(_items.contains("/oc/remote.php/webdav/sharefolder/quitte.pdf"));
|
|
QVERIFY(_items.contains("/oc/remote.php/webdav/sharefolder"));
|
|
QVERIFY(_items.size() == 2 );
|
|
|
|
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, "/oc/remote.php/webdav/sharefolder" )); // 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 testParserEmptyXmlNoDav() {
|
|
const QByteArray testXml = "<html><body>I am under construction</body></html>";
|
|
|
|
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, "/oc/remote.php/webdav/sharefolder" )); // 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, "/oc/remote.php/webdav/sharefolder" )); // 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 testParserBogfusHref1() {
|
|
const QByteArray testXml = "<?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>http://127.0.0.1:81/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>http://127.0.0.1:81/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, "/oc/remote.php/webdav/sharefolder" ));
|
|
QVERIFY(!_success);
|
|
}
|
|
|
|
void testParserBogfusHref2() {
|
|
const QByteArray testXml = "<?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>/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>/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, "/oc/remote.php/webdav/sharefolder" ));
|
|
QVERIFY(!_success);
|
|
}
|
|
|
|
void testHrefUrlEncoding() {
|
|
const QByteArray testXml = "<?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>/%C3%A4</d:href>" // a-umlaut utf8
|
|
"<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>/%C3%A4/%C3%A4.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(parser.parse( testXml, &sizes, QString::fromUtf8("/ä") ));
|
|
QVERIFY(_success);
|
|
|
|
QVERIFY(_items.contains(QString::fromUtf8("/ä/ä.pdf")));
|
|
QVERIFY(_items.contains(QString::fromUtf8("/ä")));
|
|
QVERIFY(_items.size() == 2 );
|
|
|
|
QVERIFY(_subdirs.contains(QString::fromUtf8("/ä")));
|
|
QVERIFY(_subdirs.size() == 1);
|
|
}
|
|
|
|
};
|
|
|
|
QTEST_MAIN(TestXmlParse)
|
|
#include "testxmlparse.moc"
|