on 71269bb help sign in
unity8/tests/plugins/Unity/resultstest.cpp
196 lines 8.4 kB history raw
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authors:
17 * Michal Hruby <michal.hruby@canonical.com>
18 */
20#include <QTest>
21#include <dee.h>
22#include <glib.h>
24#include "resultstest.h"
25#include "categoryresults.h"
27static DeeModel* createBackendModel()
29 auto model = dee_sequence_model_new();
30 dee_model_set_schema(model, "s", "s", "u", "u", "s", "s", "s", "s", "a{sv}", NULL);
32 return model;
35void ResultsTest::testAllColumns()
37 auto deeModel = createBackendModel();
38 GVariantBuilder builder;
39 g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
40 g_variant_builder_add(&builder, "{sv}", "metadata-field", g_variant_new_string("foo"));
41 dee_model_append (deeModel,
42 "test:uri",
43 "themed-icon",
44 4,
45 0,
46 "application/octet-stream",
47 "Test",
48 "Comment",
49 "test:dnd-uri",
50 g_variant_builder_end(&builder));
52 CategoryResults* results = new CategoryResults(this);
53 results->setModel(deeModel);
55 auto index = results->index(0, 0); // there's just one result
56 QCOMPARE(index.data(CategoryResults::Roles::RoleUri).toString(), QString("test:uri"));
57 QCOMPARE(index.data(CategoryResults::Roles::RoleIconHint).toString(), QString("image://theme/themed-icon"));
58 QCOMPARE(index.data(CategoryResults::Roles::RoleCategory).toInt(), 4);
59 QCOMPARE(index.data(CategoryResults::Roles::RoleMimetype).toString(), QString("application/octet-stream"));
60 QCOMPARE(index.data(CategoryResults::Roles::RoleTitle).toString(), QString("Test"));
61 QCOMPARE(index.data(CategoryResults::Roles::RoleComment).toString(), QString("Comment"));
62 QCOMPARE(index.data(CategoryResults::Roles::RoleDndUri).toString(), QString("test:dnd-uri"));
63 auto metadata = index.data(CategoryResults::Roles::RoleMetadata).toHash();
64 QCOMPARE(metadata["metadata-field"].toString(), QString("foo"));
67void ResultsTest::testIconColumn_data()
69 QTest::addColumn<QString>("uri");
70 QTest::addColumn<QString>("giconString");
71 QTest::addColumn<QString>("result");
73 QTest::newRow("unspecified") << "test:uri" << "" << "";
74 QTest::newRow("absolute path") << "test:uri" << "/usr/share/icons/example.png" << "/usr/share/icons/example.png";
75 QTest::newRow("file uri") << "test:uri" << "file:///usr/share/icons/example.png" << "file:///usr/share/icons/example.png";
76 QTest::newRow("http uri") << "test:uri" << "http://images.ubuntu.com/example.jpg" << "http://images.ubuntu.com/example.jpg";
77 QTest::newRow("image uri") << "test:uri" << "image://thumbnail/with/arguments?passed_to=ImageProvider" << "image://thumbnail/with/arguments?passed_to=ImageProvider";
78 QTest::newRow("themed icon") << "test:uri" << "accessories-other" << "image://theme/accessories-other";
79 QTest::newRow("fileicon") << "test:uri" << ". GFileIcon http://example.org/resource.gif" << "http://example.org/resource.gif";
80 QTest::newRow("themedicon") << "test:uri" << ". GThemedIcon accessories-other accessories generic" << "image://theme/accessories-other,accessories,generic";
81 QTest::newRow("annotatedicon") << "test:uri" << ". UnityProtocolAnnotatedIcon %7B'base-icon':%20%3C'.%20GThemedIcon%20accessories-other%20accessories%20generic'%3E%7D" << "image://theme/accessories-other,accessories,generic";
82 QTest::newRow("thumbnailer icon") << "file:///usr/share/samples/video/foo.avi" << "" << "image://thumbnailer//usr/share/samples/video/foo.avi";
85void ResultsTest::testIconColumn()
87 QFETCH(QString, uri);
88 QFETCH(QString, giconString);
89 QFETCH(QString, result);
90 auto deeModel = createBackendModel();
91 dee_model_append (deeModel,
92 uri.toLocal8Bit().constData(),
93 giconString.toLocal8Bit().constData(),
94 0,
95 0,
96 "application/octet-stream",
97 "Test",
98 "",
99 "test:dnd-uri",
100 g_variant_new_array(g_variant_type_element(G_VARIANT_TYPE_VARDICT), NULL, 0));
102 CategoryResults* results = new CategoryResults(this);
103 results->setModel(deeModel);
105 auto index = results->index(0, 0); // there's just one result
106 auto transformedIcon = index.data(CategoryResults::Roles::RoleIconHint).toString();
107 QCOMPARE(transformedIcon, result);
110class GVariantWrapper
112public:
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 }
124 GVariant* variant;
125};
127Q_DECLARE_METATYPE(GVariantWrapper)
129void ResultsTest::testSpecialIcons_data()
131 QTest::addColumn<QString>("uri");
132 QTest::addColumn<GVariantWrapper>("metadata");
133 QTest::addColumn<QString>("result");
135 GVariant *inner;
136 GVariantBuilder builder, inner_builder;
138 g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
139 g_variant_builder_add(&inner_builder, "{sv}", "artist", g_variant_new_string("U2"));
140 g_variant_builder_add(&inner_builder, "{sv}", "album", g_variant_new_string("War"));
142 g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
143 g_variant_builder_add(&builder, "{sv}", "content", g_variant_builder_end(&inner_builder));
145 QTest::newRow("simple") << "file:///foo.mp3" << GVariantWrapper(g_variant_builder_end(&builder)) << "image://albumart/U2/War";
147 g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
148 g_variant_builder_add(&inner_builder, "{sv}", "artist", g_variant_new_string("U2"));
149 g_variant_builder_add(&inner_builder, "{sv}", "album", g_variant_new_string("War/Joshua tree"));
150 inner = g_variant_builder_end(&inner_builder);
152 g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
153 g_variant_builder_add(&builder, "{sv}", "content", inner);
155 QTest::newRow("with-slash") << "file:///foo.mp3" << GVariantWrapper(g_variant_builder_end(&builder)) << "image://albumart/U2/War%2FJoshua%20tree";
157 g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
158 g_variant_builder_add(&inner_builder, "{sv}", "artist", g_variant_new_string("U2"));
159 g_variant_builder_add(&inner_builder, "{sv}", "album", g_variant_new_string("War"));
160 inner = g_variant_builder_end(&inner_builder);
162 g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
163 g_variant_builder_add(&inner_builder, "{sv}", "content", inner);
165 g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
166 g_variant_builder_add(&builder, "{sv}", "content", g_variant_builder_end(&inner_builder));
168 QTest::newRow("nested") << "file:///foo.mp3" << GVariantWrapper(g_variant_builder_end(&builder)) << "image://albumart/U2/War";
171void ResultsTest::testSpecialIcons()
173 QFETCH(QString, uri);
174 QFETCH(GVariantWrapper, metadata);
175 QFETCH(QString, result);
176 auto deeModel = createBackendModel();
177 dee_model_append (deeModel,
178 uri.toLocal8Bit().constData(),
179 "",
180 0,
181 0,
182 "audio/mp3",
183 "Test",
184 "",
185 uri.toLocal8Bit().constData(),
186 metadata.variant);
188 CategoryResults* results = new CategoryResults(this);
189 results->setModel(deeModel);
191 auto index = results->index(0, 0); // there's just one result
192 auto transformedIcon = index.data(CategoryResults::Roles::RoleIconHint).toString();
193 QCOMPARE(transformedIcon, result);
196QTEST_MAIN(ResultsTest)