@@ -19,6 +19,7 @@
1919
2020#include <QTest>
2121#include <dee.h>
22+#include <glib.h>
2223
2324#include "resultstest.h"
2425#include "categoryresults.h"
@@ -106,4 +107,75 @@ void ResultsTest::testIconColumn()
106107 QCOMPARE(transformedIcon, result);
107108}
108109
110+class GVariantWrapper
111+{
112+public:
113+ GVariantWrapper() : variant(NULL) {}
114+ GVariantWrapper(GVariant* v) {
115+ variant = v ? g_variant_ref_sink(v) : NULL;
116+ }
117+ GVariantWrapper(const GVariantWrapper& other) {
118+ variant = other.variant ? g_variant_ref(other.variant) : NULL;
119+ }
120+ ~GVariantWrapper() {
121+ if (variant) g_variant_unref(variant);
122+ }
123+
124+ GVariant* variant;
125+};
126+
127+Q_DECLARE_METATYPE(GVariantWrapper)
128+
129+void ResultsTest::testSpecialIcons_data()
130+{
131+ QTest::addColumn<QString>("uri");
132+ QTest::addColumn<GVariantWrapper>("metadata");
133+ QTest::addColumn<QString>("result");
134+
135+ GVariantBuilder builder, inner_builder;
136+
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"));
140+
141+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
142+ g_variant_builder_add(&builder, "{sv}", "content", g_variant_builder_end(&inner_builder));
143+
144+ QTest::newRow("simple") << "file:///foo.mp3" << GVariantWrapper(g_variant_builder_end(&builder)) << "image://albumart/U2/War";
145+
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"));
149+
150+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
151+ g_variant_builder_add(&builder, "{sv}", "content", g_variant_builder_end(&inner_builder));
152+
153+ QTest::newRow("with-slash") << "file:///foo.mp3" << GVariantWrapper(g_variant_builder_end(&builder)) << "image://albumart/U2/War%2FJoshua%20tree";
154+}
155+
156+void ResultsTest::testSpecialIcons()
157+{
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(),
164+ "",
165+ 0,
166+ 0,
167+ "audio/mp3",
168+ "Test",
169+ "",
170+ uri.toLocal8Bit().constData(),
171+ metadata.variant);
172+
173+ CategoryResults* results = new CategoryResults(this);
174+ results->setModel(deeModel);
175+
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);
179+}
180+
109181QTEST_MAIN(ResultsTest)