diff options
Diffstat (limited to 'tests/auto/qgallerytrackerschema_tracker/tst_qgallerytrackerschema.cpp')
-rw-r--r-- | tests/auto/qgallerytrackerschema_tracker/tst_qgallerytrackerschema.cpp | 2890 |
1 files changed, 2890 insertions, 0 deletions
diff --git a/tests/auto/qgallerytrackerschema_tracker/tst_qgallerytrackerschema.cpp b/tests/auto/qgallerytrackerschema_tracker/tst_qgallerytrackerschema.cpp new file mode 100644 index 0000000..b05de64 --- /dev/null +++ b/tests/auto/qgallerytrackerschema_tracker/tst_qgallerytrackerschema.cpp @@ -0,0 +1,2890 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//TESTED_COMPONENT=src/gallery + +#include <private/qgallerytrackerschema_p.h> + +#include <qdocumentgallery.h> +#include <private/qgallerytrackerlistcolumn_p.h> +#include <private/qgallerytrackerresultset_p.h> +#include <private/qgallerytrackertyperesultset_p.h> + +#include <QtTest/QtTest> + +Q_DECLARE_METATYPE(QDocumentGallery::Error) +Q_DECLARE_METATYPE(QVariant) +Q_DECLARE_METATYPE(QVector<QVariant>) +Q_DECLARE_METATYPE(QGalleryDBusInterfacePointer) +Q_DECLARE_METATYPE(QGalleryQueryRequest::Scope) +Q_DECLARE_METATYPE(QVector<QVariant::Type>) +Q_DECLARE_METATYPE(QGalleryProperty::Attributes) +Q_DECLARE_METATYPE(QVector<QGalleryProperty::Attributes>) +Q_DECLARE_METATYPE(QVector<int>) +Q_DECLARE_METATYPE(QGalleryFilter) + +#define QT_FILE_QUERY_ARGUMENTS_COUNT 9 +#define QT_FILE_QUERY_SERVICE_POSITION 1 +#define QT_FILE_QUERY_STRING_POSITION 5 + +#define QT_AGGREGATE_QUERY_ARGUMENTS_COUNT 6 +#define QT_AGGREGATE_QUERY_SERVICE_POSITION 0 +#define QT_AGGREGATE_QUERY_STRING_POSITION 2 + +class tst_QGalleryTrackerSchema : public QObject, public QGalleryDBusInterfaceFactory +{ + Q_OBJECT +private Q_SLOTS: + void initTestCase(); + + void fromItemType_data(); + void fromItemType(); + void fromItemId_data(); + void fromItemId(); + void serviceUpdateId_data(); + void serviceUpdateId(); + void supportedPropertyNames_data(); + void supportedPropertyNames(); + void propertyAttributes_data(); + void propertyAttributes(); + void prepareValidTypeResponse_data(); + void prepareValidTypeResponse(); + void prepareInvalidTypeResponse_data(); + void prepareInvalidTypeResponse(); + void prepareValidItemResponse_data(); + void prepareValidItemResponse(); + void prepareInvalidItemResponse_data(); + void prepareInvalidItemResponse(); + void queryResponseRootType_data(); + void queryResponseRootType(); + void queryResponseFilePropertyNames_data(); + void queryResponseFilePropertyNames(); + void queryResponseRootItem_data(); + void queryResponseRootItem(); + void queryResponseFilter_data(); + void queryResponseFilter(); + void queryResponseValueColumnToVariant_data(); + void queryResponseValueColumnToVariant(); + void queryResponseValueColumnToString_data(); + void queryResponseValueColumnToString(); + void queryResponseCompositeColumn_data(); + void queryResponseCompositeColumn(); + void prepareInvalidQueryResponse_data(); + void prepareInvalidQueryResponse(); + void serviceForType_data(); + void serviceForType(); + +private: + QGalleryDBusInterfacePointer daemonInterface() { return m_daemonInterface; } + QGalleryDBusInterfacePointer metaDataInterface() { return m_metaDataInterface; } + QGalleryDBusInterfacePointer searchInterface() { return m_searchInterface; } + QGalleryDBusInterfacePointer fileInterface() { return m_fileInterface; } + QGalleryDBusInterfacePointer statisticsInterface() { return m_statisticsInterface; } + QGalleryDBusInterfacePointer resourcesClassInterface( const QString &) { return m_resourcesClassInterface; } + + QGalleryDBusInterfacePointer m_daemonInterface; + QGalleryDBusInterfacePointer m_metaDataInterface; + QGalleryDBusInterfacePointer m_searchInterface; + QGalleryDBusInterfacePointer m_fileInterface; + QGalleryDBusInterfacePointer m_statisticsInterface; + QGalleryDBusInterfacePointer m_resourcesClassInterface; +}; + +void tst_QGalleryTrackerSchema::initTestCase() +{ + qRegisterMetaType<QDocumentGallery::Error>(); + qRegisterMetaType<QVariant>(); + qRegisterMetaType<QVector<QVariant> >(); + qRegisterMetaType<QGalleryDBusInterfacePointer>(); + qRegisterMetaType<QGalleryQueryRequest::Scope>(); + qRegisterMetaType<QVector<QVariant::Type> >(); + qRegisterMetaType<QGalleryProperty::Attributes>(); + qRegisterMetaType<QVector<QGalleryProperty::Attributes> >(); + qRegisterMetaType<QVector<int> >(); + qRegisterMetaType<QGalleryFilter>(); + + // Initialize dbus interfaces of some sort here. +} + +void tst_QGalleryTrackerSchema::fromItemType_data() +{ + QTest::addColumn<QString>("itemType"); + QTest::addColumn<QString>("expectedType"); + QTest::addColumn<bool>("isValid"); + + QTest::newRow("File") + << QString::fromLatin1("File") + << QString::fromLatin1("File") + << true; + QTest::newRow("AudioGenre") + << QString::fromLatin1("AudioGenre") + << QString::fromLatin1("AudioGenre") + << true; + QTest::newRow("Turtle") + << QString::fromLatin1("Turtle") + << QString() + << false; +} + +void tst_QGalleryTrackerSchema::fromItemType() +{ + QFETCH(QString, itemType); + QFETCH(QString, expectedType); + QFETCH(bool, isValid); + + QGalleryTrackerSchema schema(itemType); + + QCOMPARE(schema.itemType(), expectedType); + QCOMPARE(schema.isValid(), isValid); +} + +void tst_QGalleryTrackerSchema::fromItemId_data() +{ + QTest::addColumn<QString>("itemId"); + QTest::addColumn<QString>("itemType"); + QTest::addColumn<bool>("isValid"); + + QTest::newRow("File") + << QString::fromLatin1("file::/path/to/file.ext") + << QString::fromLatin1("File") + << true; + QTest::newRow("AudioGenre") + << QString::fromLatin1("audioGenre::Rock") + << QString::fromLatin1("AudioGenre") + << true; + QTest::newRow("Turtle") + << QString::fromLatin1("turtle::its/a/turtle") + << QString() + << false; +} + +void tst_QGalleryTrackerSchema::fromItemId() +{ + QFETCH(QString, itemId); + QFETCH(QString, itemType); + QFETCH(bool, isValid); + + QGalleryTrackerSchema schema = QGalleryTrackerSchema::fromItemId(itemId); + + QCOMPARE(schema.itemType(), itemType); + QCOMPARE(schema.isValid(), isValid); +} + +void tst_QGalleryTrackerSchema::serviceUpdateId_data() +{ + QTest::addColumn<QString>("service"); + QTest::addColumn<int>("updateId"); + + QTest::newRow("File") + << QString::fromLatin1("nfo:FileDataObject") + << 0x01; + QTest::newRow("Folder") + << QString::fromLatin1("nfo:Folder") + << 0x02; + QTest::newRow("Document") + << QString::fromLatin1("nfo:Document") + << 0x04; + QTest::newRow("Audio") + << QString::fromLatin1("nfo:Audio") + << 0x08; + QTest::newRow("Image") + << QString::fromLatin1("nmm:Photo") + << 0x10; + QTest::newRow("Video") + << QString::fromLatin1("nfo:Video") + << 0x20; + QTest::newRow("Playlist") + << QString::fromLatin1("nmm:Playlist") + << 0x40; + QTest::newRow("Text") + << QString::fromLatin1("nfo:PlainTextDocument") + << 0x80; + QTest::newRow("Artist") + << QString::fromLatin1("nmm:Artist") + << 0x100; + QTest::newRow("Album") + << QString::fromLatin1("nmm:MusicAlbum") + << 0x200; + QTest::newRow("PhotoAlbum") + << QString::fromLatin1("nmm:ImageList") + << 0x400; + QTest::newRow("Turtles") + << QString::fromLatin1("Turtles") + << 0x01; +} + +void tst_QGalleryTrackerSchema::serviceUpdateId() +{ + QFETCH(QString, service); + QFETCH(int, updateId); + + QCOMPARE(QGalleryTrackerSchema::serviceUpdateId(service), updateId); +} + +void tst_QGalleryTrackerSchema::supportedPropertyNames_data() +{ + QTest::addColumn<QString>("itemType"); + QTest::addColumn<QStringList>("propertyNames"); + + QTest::newRow("File") << QString::fromLatin1("File") << (QStringList() + << QLatin1String("author") + << QLatin1String("fileExtension") + << QLatin1String("fileName") + << QLatin1String("filePath") + << QLatin1String("fileSize") + << QLatin1String("comments") + << QLatin1String("copyright") + << QLatin1String("description") + << QLatin1String("keywords") + << QLatin1String("language") + << QLatin1String("lastAccessed") + << QLatin1String("lastModified") + << QLatin1String("mimeType") + << QLatin1String("path") + << QLatin1String("rating") + << QLatin1String("subject") + << QLatin1String("title") + << QLatin1String("url") + ); + + QTest::newRow("AudioGenre") << QString::fromLatin1("AudioGenre") << (QStringList() + << QLatin1String("duration") + << QLatin1String("genre") + << QLatin1String("title") + << QLatin1String("trackCount") + ); + + QTest::newRow("Turtle") + << QString::fromLatin1("Turtle") + << QStringList(); +} + +void tst_QGalleryTrackerSchema::supportedPropertyNames() +{ + QFETCH(QString, itemType); + QFETCH(QStringList, propertyNames); + propertyNames.sort(); + + QGalleryTrackerSchema schema(itemType); + + QStringList supportedPropertyNames = schema.supportedPropertyNames(); + supportedPropertyNames.sort(); + + QCOMPARE(supportedPropertyNames, propertyNames); +} + +void tst_QGalleryTrackerSchema::propertyAttributes_data() +{ + QTest::addColumn<QString>("itemType"); + QTest::addColumn<QString>("propertyName"); + QTest::addColumn<QGalleryProperty::Attributes>("attributes"); + + QTest::newRow("Null itemType, propertyName") + << QString() + << QString() + << QGalleryProperty::Attributes(); + QTest::newRow("Null itemType, invalid propertyName") + << QString() + << QString::fromLatin1("Goodbye") + << QGalleryProperty::Attributes(); + QTest::newRow("Null itemType, valid propertyName") + << QString() + << QString::fromLatin1("fileName") + << QGalleryProperty::Attributes(); + QTest::newRow("Invalid itemType, invalid propertyName") + << QString::fromLatin1("Hello") + << QString::fromLatin1("Goodbye") + << QGalleryProperty::Attributes(); + QTest::newRow("Invalid itemType, valid propertyName") + << QString::fromLatin1("Hello") + << QString::fromLatin1("fileName") + << QGalleryProperty::Attributes(); + QTest::newRow("Valid itemType, invalid propertyName") + << QString::fromLatin1("File") + << QString::fromLatin1("Goodbye") + << QGalleryProperty::Attributes(); + QTest::newRow("File.fileName") + << QString::fromLatin1("File") + << QString::fromLatin1("fileName") + << (QGalleryProperty::CanRead | QGalleryProperty::CanFilter | QGalleryProperty::CanSort); + QTest::newRow("File.filePath") + << QString::fromLatin1("File") + << QString::fromLatin1("filePath") + << (QGalleryProperty::CanRead | QGalleryProperty::CanFilter); + QTest::newRow("File.url") + << QString::fromLatin1("File") + << QString::fromLatin1("url") + << (QGalleryProperty::CanRead | QGalleryProperty::CanFilter | QGalleryProperty::CanSort); + QTest::newRow("Audio.albumTitle") + << QString::fromLatin1("Audio") + << QString::fromLatin1("albumTitle") + << (QGalleryProperty::CanRead | QGalleryProperty::CanFilter | QGalleryProperty::CanSort); + QTest::newRow("Album.title") + << QString::fromLatin1("Album") + << QString::fromLatin1("albumTitle") + << (QGalleryProperty::CanRead | QGalleryProperty::CanWrite | QGalleryProperty::CanFilter | QGalleryProperty::CanSort); + QTest::newRow("Album.albumTitle") + << QString::fromLatin1("Album") + << QString::fromLatin1("albumTitle") + << (QGalleryProperty::CanRead | QGalleryProperty::CanWrite | QGalleryProperty::CanFilter | QGalleryProperty::CanSort); + QTest::newRow("Album.duration") + << QString::fromLatin1("Album") + << QString::fromLatin1("duration") + << QGalleryProperty::Attributes(QGalleryProperty::CanRead | QGalleryProperty::CanFilter | QGalleryProperty::CanSort); + QTest::newRow("Album.turtle") + << QString::fromLatin1("Album") + << QString::fromLatin1("turtle") + << QGalleryProperty::Attributes(); +} + +void tst_QGalleryTrackerSchema::propertyAttributes() +{ + QFETCH(QString, itemType); + QFETCH(QString, propertyName); + QFETCH(QGalleryProperty::Attributes, attributes); + + QGalleryTrackerSchema schema(itemType); + + QCOMPARE(schema.propertyAttributes(propertyName), attributes); +} + +void tst_QGalleryTrackerSchema::prepareValidTypeResponse_data() +{ + QTest::addColumn<QString>("itemType"); + QTest::addColumn<int>("updateMask"); + QTest::addColumn<QGalleryDBusInterfacePointer>("queryInterface"); + QTest::addColumn<QString>("queryMethod"); + QTest::addColumn<QVariantList>("queryArguments"); + + QTest::newRow("File") + << "File" + << 0xFF + << m_metaDataInterface + << "Get" + << QVariantList(); + + QTest::newRow("Artist") + << QString::fromLatin1("Artist") + << 0x0100 + << m_metaDataInterface + << "SparqlQuery" + << (QVariantList() << QLatin1String( + "SELECT COUNT(DISTINCT ?x) " + "WHERE {" + "{?x rdf:type nmm:Artist}" + "{?y rdf:type nmm:MusicPiece}" + "FILTER(nmm:performer(?y)=?x)" + "}")); + + QTest::newRow("Album") + << QString::fromLatin1("Album") + << 0x0200 + << m_metaDataInterface + << "Get" + << QVariantList(); + + QTest::newRow("AudioGenre") + << "AudioGenre" + << 0x08 + << m_metaDataInterface + << "SparqlQuery" + << (QVariantList() << QLatin1String( + "SELECT COUNT(DISTINCT nfo:genre(?x)) " + "WHERE {" + "{?x rdf:type nfo:Audio}" + "FILTER(nfo:genre(?x)!='')" + "}")); +} + +void tst_QGalleryTrackerSchema::prepareValidTypeResponse() +{ + QFETCH(QString, itemType); + QFETCH(int, updateMask); + QFETCH(QGalleryDBusInterfacePointer, queryInterface); + QFETCH(QString, queryMethod); + QFETCH(QVariantList, queryArguments); + + QGalleryTrackerTypeResultSetArguments arguments; + + QGalleryTrackerSchema schema(itemType); + QCOMPARE(schema.prepareTypeResponse(&arguments, this), QDocumentGallery::NoError); + + QCOMPARE(arguments.accumulative, false); + QCOMPARE(arguments.updateMask, updateMask); + QCOMPARE(arguments.queryInterface, queryInterface); + QCOMPARE(arguments.queryMethod, queryMethod); + QCOMPARE(arguments.queryArguments, queryArguments); +} + +void tst_QGalleryTrackerSchema::prepareInvalidTypeResponse_data() +{ + QTest::addColumn<QString>("itemType"); + QTest::addColumn<QDocumentGallery::Error>("error"); + + QTest::newRow("Turtle") + << QString::fromLatin1("Turtle") + << QDocumentGallery::ItemTypeError; +} + +void tst_QGalleryTrackerSchema::prepareInvalidTypeResponse() +{ + QFETCH(QString, itemType); + QFETCH(QDocumentGallery::Error, error); + + QGalleryTrackerTypeResultSetArguments arguments; + + QGalleryTrackerSchema schema(itemType); + QCOMPARE(schema.prepareTypeResponse(&arguments, this), error); +} + +void tst_QGalleryTrackerSchema::prepareValidItemResponse_data() +{ + QTest::addColumn<QVariant>("itemId"); + QTest::addColumn<QStringList>("propertyNames"); + QTest::addColumn<QVector<QVariant> >("row"); + QTest::addColumn<QVariant>("itemUrl"); + QTest::addColumn<QVariant>("itemType"); + QTest::addColumn<int>("updateMask"); + QTest::addColumn<int>("identityWidth"); + QTest::addColumn<int>("tableWidth"); + QTest::addColumn<int>("valueOffset"); + QTest::addColumn<int>("compositeOffset"); + QTest::addColumn<QGalleryDBusInterfacePointer>("queryInterface"); + QTest::addColumn<QString>("sparql"); + + QTest::newRow("file:://path/to/file.ext") + << QVariant(QLatin1String("file::uuid:ff172362-d959-99e0-a792-0ddafdd2c559")) + << QStringList() + << (QVector<QVariant>() + << QLatin1String("uuid:ff172362-d959-99e0-a792-0ddafdd2c559") + << QLatin1String("file:///path/to/file.ext") + << 0) + << QVariant(QUrl(QLatin1String("file:///path/to/file.ext"))) + << QVariant(QLatin1String("File")) + << 0xFF + << 1 + << 3 + << 3 + << 3 + << m_metaDataInterface + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(?x=<uuid:ff172362-d959-99e0-a792-0ddafdd2c559>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("album::album:Greatest Hits") + << QVariant(QLatin1String("album::album:Greatest Hits")) + << QStringList() + << (QVector<QVariant>() + << QLatin1String("album:Greatest Hits") + << QVariant() + << 10) + << QVariant() + << QVariant(QLatin1String("Album")) + << 0x0200 + << 1 + << 1 + << 1 + << 1 + << m_metaDataInterface + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:MusicAlbum}" + "FILTER(?x=<album:Greatest Hits>)" + "} " + "GROUP BY ?x"; +} + +void tst_QGalleryTrackerSchema::prepareValidItemResponse() +{ + QFETCH(QVariant, itemId); + QFETCH(QStringList, propertyNames); + QFETCH(QVector<QVariant>, row); + QFETCH(QVariant, itemUrl); + QFETCH(QVariant, itemType); + QFETCH(int, updateMask); + QFETCH(int, identityWidth); + QFETCH(int, tableWidth); + QFETCH(int, valueOffset); + QFETCH(int, compositeOffset); + QFETCH(QGalleryDBusInterfacePointer, queryInterface); + QFETCH(QString, sparql); + + QGalleryTrackerResultSetArguments arguments; + + QGalleryTrackerSchema schema = QGalleryTrackerSchema::fromItemId(itemId.toString()); + QCOMPARE( + schema.prepareItemResponse(&arguments, this, itemId.toString(), propertyNames), + QDocumentGallery::NoError); + + QVERIFY(arguments.idColumn != 0); + QCOMPARE(arguments.idColumn->value(row.constBegin()), itemId); + + QVERIFY(arguments.urlColumn != 0); + QCOMPARE(arguments.urlColumn->value(row.constBegin()), itemUrl); + + QVERIFY(arguments.typeColumn != 0); + QCOMPARE(arguments.typeColumn->value(row.constBegin()), itemType); + + QCOMPARE(arguments.updateMask, updateMask); + QCOMPARE(arguments.identityWidth, identityWidth); + QCOMPARE(arguments.tableWidth, tableWidth); + QCOMPARE(arguments.valueOffset, valueOffset); + QCOMPARE(arguments.compositeOffset, compositeOffset); + + QCOMPARE(arguments.queryInterface, queryInterface); + QCOMPARE(arguments.sparql, sparql); +} + +void tst_QGalleryTrackerSchema::prepareInvalidItemResponse_data() +{ + QTest::addColumn<QString>("itemId"); + QTest::addColumn<QStringList>("propertyNames"); + QTest::addColumn<QDocumentGallery::Error>("error"); + + QTest::newRow("Invalid Type") + << QString::fromLatin1("turtle::its/a/turtle") + << QStringList() + << QDocumentGallery::ItemIdError; +} + +void tst_QGalleryTrackerSchema::prepareInvalidItemResponse() +{ + QFETCH(QString, itemId); + QFETCH(QStringList, propertyNames); + QFETCH(QDocumentGallery::Error, error); + + QGalleryTrackerResultSetArguments arguments; + + QGalleryTrackerSchema schema = QGalleryTrackerSchema::fromItemId(itemId); + QCOMPARE(schema.prepareItemResponse(&arguments, this, itemId, propertyNames), error); +} + +void tst_QGalleryTrackerSchema::queryResponseRootType_data() +{ + QTest::addColumn<QString>("rootType"); + QTest::addColumn<QString>("sparql"); + QTest::addColumn<int>("updateMask"); + QTest::addColumn<int>("identityWidth"); + QTest::addColumn<QVector<QVariant> >("rowData"); + QTest::addColumn<QString>("itemId"); + QTest::addColumn<QVariant>("itemUrl"); + QTest::addColumn<QString>("itemType"); + + QTest::newRow("File: Files") + << "File" + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x" + << 0xFF + << 1 + << (QVector<QVariant>() + << QLatin1String("uuid:ff172362-d959-99e0-a792-0ddafdd2c559") + << QLatin1String("file:///path/to/file.ext") + << 0) + << "file::uuid:ff172362-d959-99e0-a792-0ddafdd2c559" + << QVariant(QUrl(QLatin1String("file:///path/to/file.ext"))) + << "File"; + + QTest::newRow("File: Images") + << "File" + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x" + << 0xFF + << 1 + << (QVector<QVariant>() + << QLatin1String("uuid:ff172362-d959-99e0-a792-0ddafdd2c559") + << QLatin1String("file:///path/to/image.png") + << 4) + << "image::uuid:ff172362-d959-99e0-a792-0ddafdd2c559" + << QVariant(QUrl(QLatin1String("file:///path/to/image.png"))) + << "Image"; + + QTest::newRow("Text: Text") + << "Text" + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {{?x rdf:type nfo:PlainTextDocument}} " + "GROUP BY ?x" + << 0x80 + << 1 + << (QVector<QVariant>() + << QLatin1String("uuid:ff172362-d959-99e0-a792-0ddafdd2c559") + << QLatin1String("file:///path/to/text.txt") + << 7) + << "text::uuid:ff172362-d959-99e0-a792-0ddafdd2c559" + << QVariant(QUrl(QLatin1String("file:///path/to/text.txt"))) + << "Text"; + + QTest::newRow("Artist") + << "Artist" + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:Artist}" + "{?y rdf:type nmm:MusicPiece}" + "FILTER(nmm:performer(?y)=?x)" + "} " + "GROUP BY ?x" + << 0x0100 + << 1 + << (QVector<QVariant>() + << QLatin1String("artist:Self%20Titled") + << QString() + << 8) + << QString::fromLatin1("artist::artist:Self%20Titled") + << QVariant() + << "Artist"; + + QTest::newRow("AlbumArtist") + << "AlbumArtist" + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:Artist}" + "{?y rdf:type nmm:MusicAlbum}" + "FILTER(nmm:albumArtist(?y)=?x)" + "} " + "GROUP BY ?x" + << 0x0100 + << 1 + << (QVector<QVariant>() + << QLatin1String("artist:Self%20Titled") + << QString() + << 9) + << QString::fromLatin1("albumArtist::artist:Self%20Titled") + << QVariant() + << "AlbumArtist"; + + QTest::newRow("Album") + << "Album" + << "SELECT ?x " + "WHERE {{?x rdf:type nmm:MusicAlbum}} " + "GROUP BY ?x" + << 0x0200 + << 1 + << (QVector<QVariant>() + << QLatin1String("musicAlbum:Greatest%20Hits") + << QString() + << 9) + << QString::fromLatin1("album::musicAlbum:Greatest%20Hits") + << QVariant() + << "Album"; +} + +void tst_QGalleryTrackerSchema::queryResponseRootType() +{ + QFETCH(QString, rootType); + QFETCH(QString, sparql); + QFETCH(int, updateMask); + QFETCH(int, identityWidth); + QFETCH(QVector<QVariant>, rowData); + QFETCH(QString, itemId); + QFETCH(QVariant, itemUrl); + QFETCH(QString, itemType); + + QGalleryTrackerResultSetArguments arguments; + + QGalleryTrackerSchema schema(rootType); + + QCOMPARE( + schema.prepareQueryResponse( + &arguments, + this, + QGalleryQueryRequest::AllDescendants, + QString(), + QGalleryFilter(), + QStringList(), + QStringList(), + 0, + 0), + QDocumentGallery::NoError); + + QCOMPARE(arguments.queryInterface, m_metaDataInterface); + QCOMPARE(arguments.sparql, sparql); + + QCOMPARE(arguments.updateMask, updateMask); + QCOMPARE(arguments.identityWidth, identityWidth); + + QVERIFY(arguments.idColumn != 0); + QCOMPARE(arguments.idColumn->value(rowData.constBegin()), QVariant(itemId)); + + QVERIFY(arguments.urlColumn != 0); + QCOMPARE(arguments.urlColumn->value(rowData.constBegin()), itemUrl); + + QVERIFY(arguments.typeColumn != 0); + QCOMPARE(arguments.typeColumn->value(rowData.constBegin()), QVariant(itemType)); +} + +void tst_QGalleryTrackerSchema::queryResponseFilePropertyNames_data() +{ + QTest::addColumn<QString>("rootType"); + QTest::addColumn<QStringList>("propertyNames"); + QTest::addColumn<QStringList>("sortPropertyNames"); + QTest::addColumn<int>("tableWidth"); + QTest::addColumn<int>("compositeOffset"); + QTest::addColumn<QString>("sparql"); + QTest::addColumn<QStringList>("fieldNames"); + QTest::addColumn<QStringList>("filteredPropertyNames"); + QTest::addColumn<QVector<int> >("aliasColumns"); + QTest::addColumn<QVector<int> >("resourceKeys"); + + QTest::newRow("File: [fileName, mimeType], []") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QStringList() // sortPropertyNames + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [turtle, mimeType], []") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("turtle") + << QLatin1String("mimeType")) + << QStringList() // sortPropertyNames + << 4 // tableWidth + << 4 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x" + << (QStringList() // fieldNames + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 3); + + QTest::newRow("File: [fileName, mimeType], [fileName, mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY ASC(nfo:fileName(?x)) ASC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [fileName, -mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("fileName") + << QLatin1String("-mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY ASC(nfo:fileName(?x)) DESC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [-fileName, +mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("-fileName") + << QLatin1String("+mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY DESC(nfo:fileName(?x)) ASC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [-fileName, -mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("-fileName") + << QLatin1String("-mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY DESC(nfo:fileName(?x)) DESC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName], [fileName, mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName")) + << (QStringList() // sortPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << 4 // tableWidth + << 4 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY ASC(nfo:fileName(?x)) ASC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName")) + << QVector<int>() // aliasColumns + << QVector<int>(); // resourceKeys + + QTest::newRow("File: [fileName], [fileName, -mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName")) + << (QStringList() // sortPropertyNames + << QLatin1String("fileName") + << QLatin1String("-mimeType")) + << 4 // tableWidth + << 4 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY ASC(nfo:fileName(?x)) DESC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName")) + << QVector<int>() // aliasColumns + << QVector<int>(); // resourceKeys + + QTest::newRow("File: [fileName], [-fileName, +mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName")) + << (QStringList() // sortPropertyNames + << QLatin1String("-fileName") + << QLatin1String("+mimeType")) + << 4 // tableWidth + << 4 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY DESC(nfo:fileName(?x)) ASC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName")) + << QVector<int>() // aliasColumns + << QVector<int>(); // resourceKeys + + QTest::newRow("File: [fileName], [-fileName, -mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName")) + << (QStringList() // sortPropertyNames + << QLatin1String("-fileName") + << QLatin1String("-mimeType")) + << 4 // tableWidth + << 4 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY DESC(nfo:fileName(?x)) DESC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName")) + << QVector<int>() // aliasColumns + << QVector<int>(); // resourceKeys + + // turtle is an non-existent property. + QTest::newRow("File: [fileName, mimeType], [+turtle, +mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("+turtle") + << QLatin1String("+mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY ASC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [-turtle, +mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("-turtle") + << QLatin1String("+mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY ASC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [+turtle, -mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("+turtle") + << QLatin1String("-mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY DESC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [-turtle, -mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("-turtle") + << QLatin1String("-mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY DESC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [+url, +mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("+url") + << QLatin1String("+mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY ASC(nie:url(?x)) ASC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [-url, +mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("-url") + << QLatin1String("+mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY DESC(nie:url(?x)) ASC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [+url, -mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("+url") + << QLatin1String("-mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY ASC(nie:url(?x)) DESC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [-url, -mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("-url") + << QLatin1String("-mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY DESC(nie:url(?x)) DESC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [+keywords, +mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("+keywords") + << QLatin1String("+mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY ASC(nie:keyword(?x)) ASC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [-keywords, +mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("-keywords") + << QLatin1String("+mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY DESC(nie:keyword(?x)) ASC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [+keywords, -mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("+keywords") + << QLatin1String("-mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY ASC(nie:keyword(?x)) DESC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); + + QTest::newRow("File: [fileName, mimeType], [-keywords, -mimeType]") + << "File" // rootType + << (QStringList() // propertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << (QStringList() // sortPropertyNames + << QLatin1String("-keywords") + << QLatin1String("-mimeType")) + << 5 // tableWidth + << 5 // compositeOffset + << "SELECT ?x nie:url(?x) rdf:type(?x) nfo:fileName(?x) nie:mimeType(?x) " + "WHERE {{?x rdf:type nfo:FileDataObject}} " + "GROUP BY ?x " + "ORDER BY DESC(nie:keyword(?x)) DESC(nie:mimeType(?x))" + << (QStringList() // fieldNames + << QLatin1String("nfo:fileName") + << QLatin1String("nie:mimeType")) + << (QStringList() // filteredPropertyNames + << QLatin1String("fileName") + << QLatin1String("mimeType")) + << QVector<int>() // aliasColumns + << (QVector<int>() // resourceKeys + << 4); +} + +void tst_QGalleryTrackerSchema::queryResponseFilePropertyNames() +{ + QFETCH(QString, rootType); + QFETCH(QStringList, propertyNames); + QFETCH(QStringList, sortPropertyNames); + QFETCH(int, tableWidth); + QFETCH(int, compositeOffset); + QFETCH(QString, sparql); + QFETCH(QStringList, filteredPropertyNames); + QFETCH(QStringList, fieldNames); + QFETCH(QVector<int>, aliasColumns); + QFETCH(QVector<int>, resourceKeys); + + QGalleryTrackerResultSetArguments arguments; + + QGalleryTrackerSchema schema(rootType); + + QCOMPARE( + schema.prepareQueryResponse( + &arguments, + this, + QGalleryQueryRequest::AllDescendants, + QString(), + QGalleryFilter(), + propertyNames, + sortPropertyNames, + 0, + 0), + QDocumentGallery::NoError); + + QCOMPARE(arguments.tableWidth, tableWidth); + QCOMPARE(arguments.valueOffset, 3); + QCOMPARE(arguments.compositeOffset, compositeOffset); + + QCOMPARE(arguments.sparql, sparql); + + QCOMPARE(arguments.propertyNames, filteredPropertyNames); + QCOMPARE(arguments.fieldNames, fieldNames); + + QCOMPARE(arguments.aliasColumns, aliasColumns); + QCOMPARE(arguments.resourceKeys, resourceKeys); +} + +void tst_QGalleryTrackerSchema::queryResponseRootItem_data() +{ + QTest::addColumn<QString>("rootType"); + QTest::addColumn<QString>("rootItem"); + QTest::addColumn<QGalleryQueryRequest::Scope>("scope"); + QTest::addColumn<QString>("sparql"); + + QTest::newRow("Folder, All File Descendants") + << QString::fromLatin1("File") + << QString::fromLatin1("folder::uuid:ff172362-d959-99e0-a792-0ddafdd2c559") + << QGalleryQueryRequest::AllDescendants + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(nie:url(?x) > fn:concat(nie:url(<uuid:ff172362-d959-99e0-a792-0ddafdd2c559>),'/') " + "&& nie:url(?x) < fn:concat(nie:url(<uuid:ff172362-d959-99e0-a792-0ddafdd2c559>),'0'))" + "} " + "GROUP BY ?x"; + + QTest::newRow("Folder, Direct File Descendants") + << QString::fromLatin1("File") + << QString::fromLatin1("folder::uuid:ff172362-d959-99e0-a792-0ddafdd2c559") + << QGalleryQueryRequest::DirectDescendants + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(nfo:belongsToContainer(?x)=<uuid:ff172362-d959-99e0-a792-0ddafdd2c559>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("Album, All Audio Descendants") + << QString::fromLatin1("Audio") + << QString::fromLatin1("album::musicAlbum:Greatest%20Hits") + << QGalleryQueryRequest::AllDescendants + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:Audio}" + "FILTER(nmm:musicAlbum(?x)=<musicAlbum:Greatest%20Hits>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("Album, Direct Audio Descendants") + << QString::fromLatin1("Audio") + << QString::fromLatin1("album::musicAlbum:Greatest%20Hits") + << QGalleryQueryRequest::DirectDescendants + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:Audio}" + "FILTER(nmm:musicAlbum(?x)=<musicAlbum:Greatest%20Hits>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("Album Artist, All Audio Descendants") + << QString::fromLatin1("Audio") + << QString::fromLatin1("albumArtist::artist:Self%20Titled") + << QGalleryQueryRequest::AllDescendants + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:Audio}" + "FILTER(nmm:albumArtist(nmm:musicAlbum(?x))=<artist:Self%20Titled>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("Album Artist, Direct Audio Descendants") + << QString::fromLatin1("Audio") + << QString::fromLatin1("albumArtist::artist:Self%20Titled") + << QGalleryQueryRequest::DirectDescendants + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:Audio}" + "FILTER(nmm:albumArtist(nmm:musicAlbum(?x))=<artist:Self%20Titled>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("Album Artist, All Album Descendants") + << QString::fromLatin1("Album") + << QString::fromLatin1("albumArtist::artist:Self%20Titled") + << QGalleryQueryRequest::AllDescendants + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:MusicAlbum}" + "FILTER(nmm:albumArtist(?x)=<artist:Self%20Titled>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("Album Artist, Direct Album Descendants") + << QString::fromLatin1("Album") + << QString::fromLatin1("albumArtist::artist:Self%20Titled") + << QGalleryQueryRequest::DirectDescendants + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:MusicAlbum}" + "FILTER(nmm:albumArtist(?x)=<artist:Self%20Titled>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("Artist, All Audio Descendants") + << QString::fromLatin1("Audio") + << QString::fromLatin1("artist::artist:Self%20Titled") + << QGalleryQueryRequest::AllDescendants + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:Audio}" + "FILTER(nmm:performer(?x)=<artist:Self%20Titled>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("Artist, Direct Audio Descendants") + << QString::fromLatin1("Audio") + << QString::fromLatin1("artist::artist:Self%20Titled") + << QGalleryQueryRequest::DirectDescendants + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:Audio}" + "FILTER(nmm:performer(?x)=<artist:Self%20Titled>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("Artist, All Album Descendants") + << QString::fromLatin1("Album") + << QString::fromLatin1("artist::artist:Self%20Titled") + << QGalleryQueryRequest::AllDescendants + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:MusicAlbum}" + "{?track nie:isLogicalPartOf ?x}" + "FILTER(nmm:performer(?track)=<artist:Self%20Titled>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("Artist, Direct Album Descendants") + << QString::fromLatin1("Album") + << QString::fromLatin1("artist::artist:Self%20Titled") + << QGalleryQueryRequest::DirectDescendants + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:MusicAlbum}" + "{?track nie:isLogicalPartOf ?x}" + "FILTER(nmm:performer(?track)=<artist:Self%20Titled>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("Audio Genre, All Audio Descendants") + << QString::fromLatin1("Audio") + << QString::fromLatin1("audioGenre::Rock") + << QGalleryQueryRequest::AllDescendants + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:Audio}" + "FILTER(nfo:genre(?x)='Rock')" + "} " + "GROUP BY ?x"; + + QTest::newRow("Audio Genre, Direct Audio Descendants") + << QString::fromLatin1("Audio") + << QString::fromLatin1("audioGenre::Rock") + << QGalleryQueryRequest::DirectDescendants + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:Audio}" + "FILTER(nfo:genre(?x)='Rock')" + "} " + "GROUP BY ?x"; + + QTest::newRow("Audio Genre, All Album Descendants") + << QString::fromLatin1("Album") + << QString::fromLatin1("audioGenre::Rock") + << QGalleryQueryRequest::AllDescendants + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:MusicAlbum}" + "{?track nie:isLogicalPartOf ?x}" + "FILTER(nfo:genre(?track)='Rock')" + "} " + "GROUP BY ?x"; + + QTest::newRow("Audio Genre, Direct Album Descendants") + << QString::fromLatin1("Album") + << QString::fromLatin1("audioGenre::Rock") + << QGalleryQueryRequest::DirectDescendants + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:MusicAlbum}" + "{?track nie:isLogicalPartOf ?x}" + "FILTER(nfo:genre(?track)='Rock')" + "} " + "GROUP BY ?x"; + + QTest::newRow("Audio Genre, All Artist Descendants") + << QString::fromLatin1("Artist") + << QString::fromLatin1("audioGenre::Rock") + << QGalleryQueryRequest::AllDescendants + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:Artist}" + "{?y rdf:type nmm:MusicPiece}" + "FILTER(nmm:performer(?y)=?x && nfo:genre(?y)='Rock')" + "} " + "GROUP BY ?x"; + + QTest::newRow("Audio Genre, Direct Artist Descendants") + << QString::fromLatin1("Artist") + << QString::fromLatin1("audioGenre::Rock") + << QGalleryQueryRequest::DirectDescendants + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:Artist}" + "{?y rdf:type nmm:MusicPiece}" + "FILTER(nmm:performer(?y)=?x && nfo:genre(?y)='Rock')" + "} " + "GROUP BY ?x"; + + QTest::newRow("Audio Genre, All AlbumArtist Descendants") + << QString::fromLatin1("AlbumArtist") + << QString::fromLatin1("audioGenre::Rock") + << QGalleryQueryRequest::AllDescendants + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:Artist}" + "{?y rdf:type nmm:MusicAlbum}" + "{?track nie:isLogicalPartOf ?y}" + "FILTER(nmm:albumArtist(?y)=?x && nfo:genre(?track)='Rock')" + "} " + "GROUP BY ?x"; + + QTest::newRow("Audio Genre, Direct AlbumArtist Descendants") + << QString::fromLatin1("AlbumArtist") + << QString::fromLatin1("audioGenre::Rock") + << QGalleryQueryRequest::DirectDescendants + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:Artist}" + "{?y rdf:type nmm:MusicAlbum}" + "{?track nie:isLogicalPartOf ?y}" + "FILTER(nmm:albumArtist(?y)=?x && nfo:genre(?track)='Rock')" + "} " + "GROUP BY ?x"; + + QTest::newRow("Photo Album, All Image Descendants") + << QString::fromLatin1("Image") + << QString::fromLatin1("photoAlbum::photoAlbum:Camping") + << QGalleryQueryRequest::AllDescendants + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "FILTER(nie:isLogicalPartOf(?x)=<photoAlbum:Camping>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("Photo Album, Direct Image Descendants") + << QString::fromLatin1("Image") + << QString::fromLatin1("photoAlbum::photoAlbum:Camping") + << QGalleryQueryRequest::DirectDescendants + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "FILTER(nie:isLogicalPartOf(?x)=<photoAlbum:Camping>)" + "} " + "GROUP BY ?x"; + + QTest::newRow("No Root Item, All Image Descendants") + << QString::fromLatin1("Image") + << QString() + << QGalleryQueryRequest::AllDescendants + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "} " + "GROUP BY ?x"; + + QTest::newRow("No Root Item, All Album Descendants") + << QString::fromLatin1("Album") + << QString() + << QGalleryQueryRequest::AllDescendants + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:MusicAlbum}" + "} " + "GROUP BY ?x"; + + QTest::newRow("No Root Item, Direct Album Descendants") + << QString::fromLatin1("Album") + << QString() + << QGalleryQueryRequest::DirectDescendants + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:MusicAlbum}" + "} " + "GROUP BY ?x"; +} + +void tst_QGalleryTrackerSchema::queryResponseRootItem() +{ + QFETCH(QString, rootType); + QFETCH(QString, rootItem); + QFETCH(QGalleryQueryRequest::Scope, scope); + QFETCH(QString, sparql); + + QGalleryTrackerResultSetArguments arguments; + + QGalleryTrackerSchema schema(rootType); + + QCOMPARE( + schema.prepareQueryResponse( + &arguments, + this, + scope, + rootItem, + QGalleryFilter(), + QStringList(), + QStringList(), + 0, + 0), + QDocumentGallery::NoError); + + QCOMPARE(arguments.sparql, sparql); +} + +void tst_QGalleryTrackerSchema::queryResponseFilter_data() +{ + QTest::addColumn<QString>("rootType"); + QTest::addColumn<QString>("rootItem"); + QTest::addColumn<QGalleryQueryRequest::Scope>("scope"); + QTest::addColumn<QGalleryFilter>("filter"); + QTest::addColumn<QString>("sparql"); + + { + QGalleryFilter filter + = QDocumentGallery::url == QUrl::fromLocalFile(QLatin1String("/path/to/file.ext")); + + QTest::newRow("File.url == file:///path/to/file.ext") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER((nie:url(?x)='file:///path/to/file.ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter + = QDocumentGallery::url == QUrl::fromLocalFile(QLatin1String("/")); + + QTest::newRow("File.url == file:///") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER((nie:url(?x)='file:///'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter + = QDocumentGallery::url == QUrl(QLatin1String("http://example.com")); + + QTest::newRow("File.url == http://example.com") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER((nie:url(?x)='http://example.com'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter + = QDocumentGallery::url == QUrl(QLatin1String("http://example.com/index.html")); + + QTest::newRow("File.url == http://example.com/index.html") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER((nie:url(?x)='http://example.com/index.html'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::filePath == QLatin1String("/path/to/file.ext"); + + QTest::newRow("File.filePath == /path/to/file.ext") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER((nie:url(?x)='file:///path/to/file.ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::filePath > QLatin1String("/path/to/file.ext"); + + QTest::newRow("File.filePath > /path/to/file.ext") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER((nie:url(?x)>'file:///path/to/file.ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::filePath >= QLatin1String("/path/to/file.ext"); + + QTest::newRow("File.filePath >= /path/to/file.ext") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER((nie:url(?x)>='file:///path/to/file.ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::filePath < QLatin1String("/path/to/file.ext"); + + QTest::newRow("File.filePath < /path/to/file.ext") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER((nie:url(?x)<'file:///path/to/file.ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::filePath <= QLatin1String("/path/to/file.ext"); + + QTest::newRow("File.filePath <= /path/to/file.ext") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER((nie:url(?x)<='file:///path/to/file.ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::path.startsWith(QLatin1String("/path/")); + + QTest::newRow("File.path.startsWith(/path/)") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(fn:starts-with(nie:url(nfo:belongsToContainer(?x)),'file:///path/'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::path.endsWith(QLatin1String("/to")); + + QTest::newRow("File.path.endsWith(/to)") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(fn:ends-with(nie:url(nfo:belongsToContainer(?x)),'/to'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::path.contains(QLatin1String("path")); + + QTest::newRow("File.path.contains(path)") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(fn:contains(nie:url(nfo:belongsToContainer(?x)),'path'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::path.wildcard(QLatin1String("/*/to")); + + QTest::newRow("File.path.wildcard(/*/to)") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(fn:contains(nie:url(nfo:belongsToContainer(?x)),'file:///*/to'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::fileExtension == QLatin1String("ext"); + + QTest::newRow("File.fileExtension == ext") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(fn:ends-with(nfo:fileName(?x),'.ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::fileName == QLatin1String("file.ext"); + + QTest::newRow("File.fileName == file.ext") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER((nfo:fileName(?x)='file.ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::fileName.startsWith(QLatin1String("file.")); + + QTest::newRow("File.fileName.startsWith(file.)") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(fn:starts-with(nfo:fileName(?x),'file.'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::fileName.endsWith(QLatin1String(".ext")); + + QTest::newRow("File.fileName.endsWith(.ext)") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(fn:ends-with(nfo:fileName(?x),'.ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::fileName.contains(QLatin1String("ext")); + + QTest::newRow("File.fileName.contains(ext)") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(fn:contains(nfo:fileName(?x),'ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::fileName.wildcard(QLatin1String("file*ext")); + + QTest::newRow("File.fileName.wildcard(file*ext") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(fn:contains(nfo:fileName(?x),'file*ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter + = QDocumentGallery::fileName.regExp(QLatin1String("(file|document).ext")); + + QTest::newRow("File.fileName.regExp((file|document).ext)") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(REGEX(nfo:fileName(?x),'(file|document).ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter + = QDocumentGallery::fileName.regExp(QRegExp(QLatin1String("(file|document).ext"))); + + QTest::newRow("File.fileName.regExp(QRegExp((file|document).ext))") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(REGEX(nfo:fileName(?x),'(file|document).ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter + = QDocumentGallery::description == QUrl(QLatin1String("http://example.com/index.html")); + + QTest::newRow("File.description == http://example.com/index.html") + << "File" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER((nie:description(?x)='http://example.com/index.html'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::width > 1024; + + QTest::newRow("Image.width > 1024") + << "Image" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "FILTER((nfo:width(?x)>'1024'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::width >= 1024u; + + QTest::newRow("Video.width >= 1024u") + << "Video" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:Video}" + "FILTER((nfo:width(?x)>='1024'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::height < Q_INT64_C(1024); + + QTest::newRow("Image.height < 1024ll") + << "Image" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "FILTER((nfo:height(?x)<'1024'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::height <= Q_UINT64_C(1024); + + QTest::newRow("Video.height <= 1024ull") + << "Video" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:Video}" + "FILTER((nfo:height(?x)<='1024'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::focalLength <= 1.9; + + QTest::newRow("Image.focalLength <= 1.9") + << "Image" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "FILTER((nmm:focalLength(?x)<='1.9'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::focalLength < 0.25f; + + QTest::newRow("Image.focalLength <= 0.25f") + << "Image" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "FILTER((nmm:focalLength(?x)<'0.25'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter + = QDocumentGallery::lastModified > QDateTime(QDate(2008, 06, 01), QTime(12, 5, 8)); + + QTest::newRow("Image.lastModified > 2008-06-01T12:05:08") + << "Image" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "FILTER((nfo:fileLastModified(?x)>'2008-06-01T12:05:08'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = !( + QDocumentGallery::lastModified > QDateTime(QDate(2008, 06, 01), QTime(12, 5, 8))); + + QTest::newRow("!(Image.lastModified > 2008-06-01T12:05:08") + << "Image" + << QString() + << QGalleryQueryRequest::AllDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "FILTER(!(nfo:fileLastModified(?x)>'2008-06-01T12:05:08'))" + "} " + "GROUP BY ?x"; + + } { + QGalleryIntersectionFilter filter; + filter.append(QDocumentGallery::width > 1024); + filter.append(QDocumentGallery::height > 768); + + QTest::newRow("Image.width > 1024 && Image.height > 768") + << "Image" + << QString() + << QGalleryQueryRequest::AllDescendants + << QGalleryFilter(filter) + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "FILTER(((nfo:width(?x)>'1024')&&(nfo:height(?x)>'768')))" + "} " + "GROUP BY ?x"; + } { + QGalleryIntersectionFilter filter; + filter.append(QDocumentGallery::width > 1024); + + QTest::newRow("Image.width > 1024 (Single intersection item)") + << "Image" + << QString() + << QGalleryQueryRequest::AllDescendants + << QGalleryFilter(filter) + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "FILTER(((nfo:width(?x)>'1024')))" + "} " + "GROUP BY ?x"; + } { + QGalleryUnionFilter filter; + filter.append(QDocumentGallery::width < 1920); + filter.append(QDocumentGallery::height < 1024); + + QTest::newRow("Image.width < 1920 || Image.height < 1024") + << "Image" + << QString() + << QGalleryQueryRequest::AllDescendants + << QGalleryFilter(filter) + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "FILTER(((nfo:width(?x)<'1920')||(nfo:height(?x)<'1024')))" + "} " + "GROUP BY ?x"; + } { + QGalleryUnionFilter filter; + filter.append(QDocumentGallery::width < 1920); + + QTest::newRow("Image.width < 1920 (Single union item") + << "Image" + << QString() + << QGalleryQueryRequest::AllDescendants + << QGalleryFilter(filter) + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "FILTER(((nfo:width(?x)<'1920')))" + "} " + "GROUP BY ?x"; + } { + QGalleryUnionFilter filter; + + QTest::newRow("Image (Empty union filter)") + << "Image" + << QString() + << QGalleryQueryRequest::AllDescendants + << QGalleryFilter(filter) + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "} " + "GROUP BY ?x"; + } { + QGalleryIntersectionFilter filter; + + QTest::newRow("Image (Empty intersection filter)") + << "Image" + << QString() + << QGalleryQueryRequest::AllDescendants + << QGalleryFilter(filter) + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nmm:Photo}" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::fileName == QLatin1String("file.ext"); + + QTest::newRow("File.fileName == file.ext, In folder") + << "File" + << "folder::uuid:ff172362-d959-99e0-a792-0ddafdd2c559" + << QGalleryQueryRequest::DirectDescendants + << filter + << "SELECT ?x nie:url(?x) rdf:type(?x) " + "WHERE {" + "{?x rdf:type nfo:FileDataObject}" + "FILTER(nfo:belongsToContainer(?x)=<uuid:ff172362-d959-99e0-a792-0ddafdd2c559> " + "&& (nfo:fileName(?x)='file.ext'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::title == QLatin1String("Greatest Hits"); + + QTest::newRow("Album.title == Greatest Hits (All)") + << "Album" + << QString() + << QGalleryQueryRequest::AllDescendants + << QGalleryFilter(filter) + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:MusicAlbum}" + "FILTER((nmm:albumTitle(?x)='Greatest Hits'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::title == QLatin1String("Greatest Hits"); + + QTest::newRow("Album.title == Greatest Hits (Direct)") + << "Album" + << QString() + << QGalleryQueryRequest::DirectDescendants + << QGalleryFilter(filter) + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:MusicAlbum}" + "FILTER((nmm:albumTitle(?x)='Greatest Hits'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::title == QLatin1String("Greatest Hits"); + + QTest::newRow("Album.title == Greatest Hits, Belonging to AlbumArtist (All)") + << "Album" + << "albumArtist::artist:Self%20Titled" + << QGalleryQueryRequest::AllDescendants + << QGalleryFilter(filter) + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:MusicAlbum}" + "FILTER(nmm:albumArtist(?x)=<artist:Self%20Titled> " + "&& (nmm:albumTitle(?x)='Greatest Hits'))" + "} " + "GROUP BY ?x"; + } { + QGalleryFilter filter = QDocumentGallery::title == QLatin1String("Greatest Hits"); + + QTest::newRow("Album.title == Greatest Hits, Belonging to AlbumArtist (Direct)") + << "Album" + << "albumArtist::artist:Self%20Titled" + << QGalleryQueryRequest::DirectDescendants + << QGalleryFilter(filter) + << "SELECT ?x " + "WHERE {" + "{?x rdf:type nmm:MusicAlbum}" + "FILTER(nmm:albumArtist(?x)=<artist:Self%20Titled> " + "&& (nmm:albumTitle(?x)='Greatest Hits'))" + "} " + "GROUP BY ?x"; + } +} + +void tst_QGalleryTrackerSchema::queryResponseFilter() +{ + QFETCH(QString, rootType); + QFETCH(QString, rootItem); + QFETCH(QGalleryQueryRequest::Scope, scope); + QFETCH(QGalleryFilter, filter); + QFETCH(QString, sparql); + + QGalleryTrackerResultSetArguments arguments; + + QGalleryTrackerSchema schema(rootType); + + QCOMPARE( + schema.prepareQueryResponse( + &arguments, + this, + scope, + rootItem, + filter, + QStringList(), + QStringList(), + 0, + 0), + QDocumentGallery::NoError); + + QCOMPARE(arguments.sparql, sparql); +} + +void tst_QGalleryTrackerSchema::queryResponseValueColumnToVariant_data() +{ + QTest::addColumn<QString>("rootType"); + QTest::addColumn<QString>("propertyName"); + QTest::addColumn<QString>("string"); + QTest::addColumn<QVariant>("value"); + + QTest::newRow("File.fileName") + << "File" + << "fileName" + << "file.ext" + << QVariant(QLatin1String("file.ext")); + + QTest::newRow("File.fileName (Empty)") + << "File" + << "fileName" + << QString() + << QVariant(QString()); + + QTest::newRow("File.keywords (1)") + << "File" + << "keywords" + << "Holiday" + << QVariant(QStringList() << QLatin1String("Holiday")); + + QTest::newRow("File.keywords (2)") + << "File" + << "keywords" + << "Holiday|Summer" + << QVariant(QStringList() << QLatin1String("Holiday") << QLatin1String("Summer")); + + QTest::newRow("File.keywords (3)") + << "File" + << "keywords" + << "2009|Holiday|Summer" + << QVariant(QStringList() + << QLatin1String("2009") + << QLatin1String("Holiday") + << QLatin1String("Summer")); + + QTest::newRow("File.keywords (Empty") + << "File" + << "keywords" + << QString() + << QVariant(QStringList()); + + QTest::newRow("Image.lastModified") + << "Image" + << "lastModified" + << "2009-08-23T09:03:32" + << QVariant(QDateTime(QDate(2009, 8, 23), QTime(9, 3, 32))); + + QTest::newRow("Image.lastModfied (Invalid)") + << "Image" + << "lastModified" + << "Yesterday" + << QVariant(); + + QTest::newRow("Image.dateTaken (Empty)") + << "Image" + << "lastModified" + << QString() + << QVariant(); + + QTest::newRow("Image.focalLength (12)") + << "Image" + << "focalLength" + << "12" + << QVariant(12.0); + + QTest::newRow("Image.focalLength (12.5)") + << "Image" + << "focalLength" + << "12.5" + << QVariant(12.5); + + QTest::newRow("Image.focalLength (Invalid)") + << "Image" + << "focalLength" + << "twelve point 5" + << QVariant(); + + QTest::newRow("Image.focalLength (Empty") + << "Image" + << "focalLength" + << QString() + << QVariant(); + + QTest::newRow("Image.height") + << "Image" + << "height" + << "720" + << QVariant(720); + + QTest::newRow("Image.height (Invalid") + << "Image" + << "height" + << "seven twenty" + << QVariant(); + + QTest::newRow("Image.height (Empty)") + << "Image" + << "height" + << QString() + << QVariant(); +} + +void tst_QGalleryTrackerSchema::queryResponseValueColumnToVariant() +{ + QFETCH(QString, rootType); + QFETCH(QString, propertyName); + QFETCH(QString, string); + QFETCH(QVariant, value); + + QGalleryTrackerResultSetArguments arguments; + + QGalleryTrackerSchema schema(rootType); + + QCOMPARE( + schema.prepareQueryResponse( + &arguments, + this, + QGalleryQueryRequest::AllDescendants, + QString(), + QGalleryFilter(), + QStringList() << propertyName, + QStringList(), + 0, + 0), + QDocumentGallery::NoError); + + QCOMPARE(arguments.valueColumns.count(), 4); + QCOMPARE(arguments.valueColumns.at(3)->toVariant(string), value); +} + +void tst_QGalleryTrackerSchema::queryResponseValueColumnToString_data() +{ + QTest::addColumn<QString>("rootType"); + QTest::addColumn<QString>("propertyName"); + QTest::addColumn<QVariant>("value"); + QTest::addColumn<QString>("string"); + + QTest::newRow("File.fileName") + << "File" + << "fileName" + << QVariant(QLatin1String("file.ext")) + << "file.ext"; + + QTest::newRow("File.fileName (Empty)") + << "File" + << "fileName" + << QVariant(QString()) + << QString(); + + QTest::newRow("File.keywords (1)") + << "File" + << "keywords" + << QVariant(QStringList() << QLatin1String("Holiday")) + << "Holiday"; + + QTest::newRow("File.keywords (2)") + << "File" + << "keywords" + << QVariant(QStringList() << QLatin1String("Holiday") << QLatin1String("Summer")) + << "Holiday|Summer"; + + QTest::newRow("File.keywords (3)") + << "File" + << "keywords" + << QVariant(QStringList() + << QLatin1String("2009") + << QLatin1String("Holiday") + << QLatin1String("Summer")) + << "2009|Holiday|Summer"; + + QTest::newRow("File.keywords (QString)") + << "File" + << "keywords" + << QVariant(QLatin1String("Holiday")) + << "Holiday"; + + QTest::newRow("File.keywords (Empty") + << "File" + << "keywords" + << QVariant(QStringList()) + << QString(); + + QTest::newRow("Image.lastModified") + << "Image" + << "lastModified" + << QVariant(QDateTime(QDate(2009, 8, 23), QTime(9, 3, 32))) + << "2009-08-23T09:03:32"; + + QTest::newRow("Image.lastModified (Invalid)") + << "Image" + << "lastModified" + << QVariant(QDateTime(QDate(2009, 8, 56), QTime(95, 3, 32))) + << QString(); + + QTest::newRow("Image.lastModified (Empty)") + << "Image" + << "lastModified" + << QVariant() + << QString(); + + QTest::newRow("Image.focalLength (12)") + << "Image" + << "focalLength" + << QVariant(12.0) + << "12"; + + QTest::newRow("Image.focalLength (12.5)") + << "Image" + << "focalLength" + << QVariant(12.5) + << "12.5"; + + QTest::newRow("Image.focalLength (Empty") + << "Image" + << "focalLength" + << QVariant() + << QString(); + + QTest::newRow("Image.height") + << "Image" + << "height" + << QVariant(720) + << "720"; + + QTest::newRow("Image.height (Empty)") + << "Image" + << "height" + << QVariant() + << QString(); +} + +void tst_QGalleryTrackerSchema::queryResponseValueColumnToString() +{ + QFETCH(QString, rootType); + QFETCH(QString, propertyName); + QFETCH(QVariant, value); + QFETCH(QString, string); + + QGalleryTrackerResultSetArguments arguments; + + QGalleryTrackerSchema schema(rootType); + + QCOMPARE( + schema.prepareQueryResponse( + &arguments, + this, + QGalleryQueryRequest::AllDescendants, + QString(), + QGalleryFilter(), + QStringList() << propertyName, + QStringList(), + 0, + 0), + QDocumentGallery::NoError); + + QCOMPARE(arguments.valueColumns.count(), 4); + QCOMPARE(arguments.valueColumns.at(3)->toString(value), string); +} + +void tst_QGalleryTrackerSchema::queryResponseCompositeColumn_data() +{ + QTest::addColumn<QString>("rootType"); + QTest::addColumn<QString>("propertyName"); + QTest::addColumn<QVector<QVariant> >("rowData"); + QTest::addColumn<QVariant>("value"); + + QTest::newRow("File.filePath") + << QString::fromLatin1("Image") + << QString::fromLatin1("filePath") + << (QVector<QVariant>() + << QLatin1String("uuid:ff172362-d959-99e0-a792-0ddafdd2c559") + << QLatin1String("file:///path/to/file.ext") + << QLatin1String("Files")) + << QVariant(QLatin1String("/path/to/file.ext")); + + QTest::newRow("File.path") + << QString::fromLatin1("Image") + << QString::fromLatin1("path") + << (QVector<QVariant>() + << QLatin1String("uuid:ff172362-d959-99e0-a792-0ddafdd2c559") + << QLatin1String("file:///path/to/file.ext") + << QLatin1String("Files")) + << QVariant(QLatin1String("/path/to")); + + QTest::newRow("File.path (empty fileName)") + << QString::fromLatin1("Image") + << QString::fromLatin1("path") + << (QVector<QVariant>() + << QLatin1String("uuid:ff172362-d959-99e0-a792-0ddafdd2c559") + << QLatin1String("file:///path/to/") + << QLatin1String("Files")) + << QVariant(QLatin1String("/path/to")); + + QTest::newRow("File.fileExtension") + << QString::fromLatin1("Image") + << QString::fromLatin1("fileExtension") + << (QVector<QVariant>() + << QLatin1String("uuid:ff172362-d959-99e0-a792-0ddafdd2c559") + << QLatin1String("file:///path/to/file.ext") + << QLatin1String("Files")) + << QVariant(QLatin1String("ext")); + + + QTest::newRow("File.fileExtension (no extension)") + << QString::fromLatin1("Image") + << QString::fromLatin1("fileExtension") + << (QVector<QVariant>() + << QLatin1String("uuid:ff172362-d959-99e0-a792-0ddafdd2c559") + << QLatin1String("file:///path/to") + << QLatin1String("Files")) + << QVariant(); +} + +void tst_QGalleryTrackerSchema::queryResponseCompositeColumn() +{ + QFETCH(QString, rootType); + QFETCH(QString, propertyName); + QFETCH(QVector<QVariant>, rowData); + QFETCH(QVariant, value); + + QGalleryTrackerResultSetArguments arguments; + + QGalleryTrackerSchema schema(rootType); + + QCOMPARE( + schema.prepareQueryResponse( + &arguments, + this, + QGalleryQueryRequest::AllDescendants, + QString(), + QGalleryFilter(), + QStringList() << propertyName, + QStringList(), + 0, + 0), + QDocumentGallery::NoError); + + QCOMPARE(arguments.compositeColumns.count(), 1); + QCOMPARE(arguments.compositeColumns.at(0)->value(rowData.constBegin()), value); +} + +void tst_QGalleryTrackerSchema::prepareInvalidQueryResponse_data() +{ + QTest::addColumn<QString>("rootItem"); + QTest::addColumn<QGalleryQueryRequest::Scope>("scope"); + QTest::addColumn<QString>("rootType"); + QTest::addColumn<QGalleryFilter>("filter"); + QTest::addColumn<QStringList>("propertyNames"); + QTest::addColumn<QStringList>("sortPropertyNames"); + QTest::addColumn<QDocumentGallery::Error>("error"); + + QTest::addColumn<QVariant>("itemId"); + QTest::addColumn<QStringList>("propertyNames"); + QTest::addColumn<QDocumentGallery::Error>("error"); + + QTest::newRow("Invalid Type, No Filter") + << QString() + << QGalleryQueryRequest::AllDescendants + << "Turtle" + << QGalleryFilter() + << QStringList() + << QStringList() + << QDocumentGallery::ItemTypeError; + + QTest::newRow("Invalid Type, With Filter") + << QString() + << QGalleryQueryRequest::AllDescendants + << "Turtle" + << QGalleryFilter(QDocumentGallery::fileName == QLatin1String("file.ext")) + << QStringList() + << QStringList() + << QDocumentGallery::ItemTypeError; + + QTest::newRow("No Type") + << QString() + << QGalleryQueryRequest::AllDescendants + << QString() + << QGalleryFilter() + << QStringList() + << QStringList() + << QDocumentGallery::ItemTypeError; + + QTest::newRow("Invalid Root Item Type") + << "turtle::urn:turtle:/its/a/turtle" + << QGalleryQueryRequest::AllDescendants + << "File" + << QGalleryFilter() + << QStringList() + << QStringList() + << QDocumentGallery::ItemIdError; + + QTest::newRow("File.filePath.regExp(/path)") + << QString() + << QGalleryQueryRequest::AllDescendants + << "File" + << QGalleryFilter(QDocumentGallery::filePath.regExp(QLatin1String("/path"))) + << QStringList() + << QStringList() + << QDocumentGallery::FilterError; + + QTest::newRow("File.filePath.regExp(/path) (within union)") + << QString() + << QGalleryQueryRequest::AllDescendants + << "File" + << QGalleryFilter(QGalleryUnionFilter( + QDocumentGallery::filePath.regExp(QLatin1String("/path")))) + << QStringList() + << QStringList() + << QDocumentGallery::FilterError; + + QTest::newRow("File.filePath.regExp(/path) (within intersection)") + << QString() + << QGalleryQueryRequest::AllDescendants + << "File" + << QGalleryFilter(QGalleryIntersectionFilter( + QDocumentGallery::filePath.regExp(QLatin1String("/path")))) + << QStringList() + << QStringList() + << QDocumentGallery::FilterError; + + QTest::newRow("File.filePath ? /path") + << QString() + << QGalleryQueryRequest::AllDescendants + << "File" + << QGalleryFilter(QGalleryMetaDataFilter( + QLatin1String("filePath"), + QLatin1String("file.ext"), + QGalleryFilter::Comparator(1200))) + << QStringList() + << QStringList() + << QDocumentGallery::FilterError; + + QTest::newRow("File.filePath == QPoint(12, 44)") + << QString() + << QGalleryQueryRequest::AllDescendants + << "File" + << QGalleryFilter(QDocumentGallery::filePath == QPoint(12, 44)) + << QStringList() + << QStringList() + << QDocumentGallery::FilterError; + + QTest::newRow("File.fileName ? file.ext") + << QString() + << QGalleryQueryRequest::AllDescendants + << "File" + << QGalleryFilter(QGalleryMetaDataFilter( + QLatin1String("fileName"), + QLatin1String("file.ext"), + QGalleryFilter::Comparator(1200))) + << QStringList() + << QStringList() + << QDocumentGallery::FilterError; + + QTest::newRow("File.fileName == QPoint(12, 44)") + << QString() + << QGalleryQueryRequest::AllDescendants + << "File" + << QGalleryFilter(QDocumentGallery::fileName == QPoint(12, 44)) + << QStringList() + << QStringList() + << QDocumentGallery::FilterError; + + QTest::newRow("File.fileExtension > ext") + << QString() + << QGalleryQueryRequest::AllDescendants + << "File" + << QGalleryFilter(QDocumentGallery::fileExtension > QLatin1String("ext")) + << QStringList() + << QStringList() + << QDocumentGallery::FilterError; + + QTest::newRow("File.fileExtension == 13") + << QString() + << QGalleryQueryRequest::AllDescendants + << "File" + << QGalleryFilter(QDocumentGallery::fileExtension == 13) + << QStringList() + << QStringList() + << QDocumentGallery::FilterError; + + QTest::newRow("File, File Descendants") + << "file::uuid:ff172362-d959-99e0-a792-0ddafdd2c559" + << QGalleryQueryRequest::AllDescendants + << "File" + << QGalleryFilter() + << QStringList() + << QStringList() + << QDocumentGallery::ItemIdError; + + + QTest::newRow("Folder, All Descendants") + << "folder::uuid:ff172362-d959-99e0-a792-0ddafdd2c559" + << QGalleryQueryRequest::AllDescendants + << "Album" + << QGalleryFilter() + << QStringList() + << QStringList() + << QDocumentGallery::ItemIdError; + + QTest::newRow("Album, Image Descendants") + << "album::musicAlbum:Greatest%20Hits" + << QGalleryQueryRequest::AllDescendants + << "Image" + << QGalleryFilter() + << QStringList() + << QStringList() + << QDocumentGallery::ItemIdError; + + QTest::newRow("Album Artist, Image Descendants") + << "albumArtist::artist:Self%20Titled" + << QGalleryQueryRequest::AllDescendants + << "Image" + << QGalleryFilter() + << QStringList() + << QStringList() + << QDocumentGallery::ItemIdError; + + QTest::newRow("Album Artist, Image Descendants") + << "artist::artist:Self%20Titled" + << QGalleryQueryRequest::AllDescendants + << "Image" + << QGalleryFilter() + << QStringList() + << QStringList() + << QDocumentGallery::ItemIdError; + + QTest::newRow("Album Artist, Image Descendants") + << "audioGenre::Rock" + << QGalleryQueryRequest::AllDescendants + << "Image" + << QGalleryFilter() + << QStringList() + << QStringList() + << QDocumentGallery::ItemIdError; + + QTest::newRow("PhotoAlbum, Audio Descendants") + << "photoAlbum::photoAlbum:Camping" + << QGalleryQueryRequest::AllDescendants + << "Audio" + << QGalleryFilter() + << QStringList() + << QStringList() + << QDocumentGallery::ItemIdError; +} + +void tst_QGalleryTrackerSchema::prepareInvalidQueryResponse() +{ + QFETCH(QString, rootItem); + QFETCH(QGalleryQueryRequest::Scope, scope); + QFETCH(QString, rootType); + QFETCH(QGalleryFilter, filter); + QFETCH(QStringList, propertyNames); + QFETCH(QStringList, sortPropertyNames); + QFETCH(QDocumentGallery::Error, error); + + QGalleryTrackerResultSetArguments arguments; + + QGalleryTrackerSchema schema(rootType); + + QCOMPARE( + schema.prepareQueryResponse( + &arguments, this, scope, rootItem, filter, propertyNames, sortPropertyNames, 0, 0), + error); +} + +void tst_QGalleryTrackerSchema::serviceForType_data() +{ + QTest::addColumn<QString>("itemType"); + QTest::addColumn<QString>("expectedService"); + + QTest::newRow("File") + << QString::fromLatin1("File") + << QString::fromLatin1("nfo:FileDataObject"); + QTest::newRow("Folder") + << QString::fromLatin1("Folder") + << QString::fromLatin1("nfo:Folder"); + QTest::newRow("Document") + << QString::fromLatin1("Document") + << QString::fromLatin1("nfo:Document"); + QTest::newRow("Audio") + << QString::fromLatin1("Audio") + << QString::fromLatin1("nfo:Audio"); + QTest::newRow("Image") + << QString::fromLatin1("Image") + << QString::fromLatin1("nmm:Photo"); + QTest::newRow("Video") + << QString::fromLatin1("Video") + << QString::fromLatin1("nfo:Video"); + QTest::newRow("Playlist") + << QString::fromLatin1("Playlist") + << QString::fromLatin1("nmm:Playlist"); + QTest::newRow("Text") + << QString::fromLatin1("Text") + << QString::fromLatin1("nfo:PlainTextDocument"); + QTest::newRow("Artist") + << QString::fromLatin1("Artist") + << QString::fromLatin1("nmm:Artist"); + QTest::newRow("Album") + << QString::fromLatin1("Album") + << QString::fromLatin1("nmm:MusicAlbum"); + QTest::newRow("PhotoAlbum") + << QString::fromLatin1("PhotoAlbum") + << QString::fromLatin1("nmm:ImageList"); +} + +void tst_QGalleryTrackerSchema::serviceForType() +{ + QFETCH(QString, itemType); + QFETCH(QString, expectedService); + + QCOMPARE( + QGalleryTrackerSchema::serviceForType( itemType), + expectedService); +} + +QTEST_MAIN(tst_QGalleryTrackerSchema) + +#include "tst_qgallerytrackerschema.moc" + |