@@ -19,6 +19,7 @@
20#include <QTest>
20#include <QTest>
21#include <dee.h>
21#include <dee.h>
23#include "resultstest.h"
24#include "resultstest.h"
24#include "categoryresults.h"
25#include "categoryresults.h"
@@ -106,4 +107,75 @@ void ResultsTest::testIconColumn()
106 QCOMPARE(transformedIcon, result);
107 QCOMPARE(transformedIcon, result);
110+class GVariantWrapper
113+ GVariantWrapper() : variant(NULL) {}
114+ GVariantWrapper(GVariant* v) {
115+ variant = v ? g_variant_ref_sink(v) : NULL;
117+ GVariantWrapper(const GVariantWrapper& other) {
118+ variant = other.variant ? g_variant_ref(other.variant) : NULL;
120+ ~GVariantWrapper() {
121+ if (variant) g_variant_unref(variant);
127+Q_DECLARE_METATYPE(GVariantWrapper)
129+void ResultsTest::testSpecialIcons_data()
131+ QTest::addColumn<QString>("uri");
132+ QTest::addColumn<GVariantWrapper>("metadata");
133+ QTest::addColumn<QString>("result");
135+ GVariantBuilder builder, inner_builder;
137+ g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
138+ g_variant_builder_add(&inner_builder, "{sv}", "artist", g_variant_new_string("U2"));
139+ g_variant_builder_add(&inner_builder, "{sv}", "album", g_variant_new_string("War"));
141+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
142+ g_variant_builder_add(&builder, "{sv}", "content", g_variant_builder_end(&inner_builder));
144+ QTest::newRow("simple") << "file:///foo.mp3" << GVariantWrapper(g_variant_builder_end(&builder)) << "image://albumart/U2/War";
146+ g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
147+ g_variant_builder_add(&inner_builder, "{sv}", "artist", g_variant_new_string("U2"));
148+ g_variant_builder_add(&inner_builder, "{sv}", "album", g_variant_new_string("War/Joshua tree"));
150+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
151+ g_variant_builder_add(&builder, "{sv}", "content", g_variant_builder_end(&inner_builder));
153+ QTest::newRow("with-slash") << "file:///foo.mp3" << GVariantWrapper(g_variant_builder_end(&builder)) << "image://albumart/U2/War%2FJoshua%20tree";
156+void ResultsTest::testSpecialIcons()
158+ QFETCH(QString, uri);
159+ QFETCH(GVariantWrapper, metadata);
160+ QFETCH(QString, result);
161+ auto deeModel = createBackendModel();
162+ dee_model_append (deeModel,
163+ uri.toLocal8Bit().constData(),
170+ uri.toLocal8Bit().constData(),
173+ CategoryResults* results = new CategoryResults(this);
174+ results->setModel(deeModel);
176+ auto index = results->index(0, 0); // there's just one result
177+ auto transformedIcon = index.data(CategoryResults::Roles::RoleIconHint).toString();
178+ QCOMPARE(transformedIcon, result);
109QTEST_MAIN(ResultsTest)
181QTEST_MAIN(ResultsTest)