1
// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
3
* Copyright (C) 2011 Canonical Ltd
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License version 3 as
7
* published by the Free Software Foundation.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
* Authored by: Marco Trevisan (Treviño) <3v1n0@ubuntu.com>
22
#include <gmock/gmock.h>
24
#include <UnityCore/Variant.h>
25
#include <UnityCore/Preview.h>
26
#include <UnityCore/ApplicationPreview.h>
27
#include <UnityCore/MoviePreview.h>
28
#include <UnityCore/MusicPreview.h>
29
#include <UnityCore/SeriesPreview.h>
30
#include <unity-protocol.h>
33
using namespace testing;
34
using namespace unity;
35
using namespace unity::glib;
36
using namespace unity::dash;
41
bool IsVariant(Variant const& variant)
43
return g_variant_get_type_string(variant) != NULL;
46
TEST(TestPreviews, DeserializeGeneric)
48
Object<GIcon> icon(g_icon_new_for_string("accessories", NULL));
49
Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_generic_preview_new()));
50
unity_protocol_preview_set_title(proto_obj, "Title");
51
unity_protocol_preview_set_subtitle(proto_obj, "Subtitle");
52
unity_protocol_preview_set_description(proto_obj, "Description");
53
unity_protocol_preview_set_image(proto_obj, icon);
54
unity_protocol_preview_set_image_source_uri(proto_obj, "Source");
56
Variant v(dee_serializable_serialize(DEE_SERIALIZABLE(proto_obj.RawPtr())),
58
EXPECT_TRUE(IsVariant(v));
60
Preview::Ptr preview = Preview::PreviewForVariant(v);
61
EXPECT_TRUE(preview != nullptr);
63
EXPECT_EQ(preview->renderer_name, "preview-generic");
64
EXPECT_EQ(preview->title, "Title");
65
EXPECT_EQ(preview->subtitle, "Subtitle");
66
EXPECT_EQ(preview->description, "Description");
67
EXPECT_EQ(preview->image_source_uri, "Source");
68
EXPECT_TRUE(g_icon_equal(preview->image(), icon) != FALSE);
71
TEST(TestPreviews, DeserializeGenericWithMeta)
73
Object<GIcon> icon(g_icon_new_for_string("accessories", NULL));
74
Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_generic_preview_new()));
75
unity_protocol_preview_set_title(proto_obj, "Title");
76
unity_protocol_preview_set_subtitle(proto_obj, "Subtitle");
77
unity_protocol_preview_set_description(proto_obj, "Description");
78
unity_protocol_preview_set_image(proto_obj, icon);
79
unity_protocol_preview_set_image_source_uri(proto_obj, "Source");
81
GHashTable* hints = g_hash_table_new(g_str_hash, g_str_equal);
82
g_hash_table_insert(hints, g_strdup("extra-text"), g_variant_new_string("Foo"));
83
unity_protocol_preview_add_action(proto_obj, "action1", "Action #1", NULL, 0);
84
unity_protocol_preview_add_action_with_hints(proto_obj, "action2", "Action #2", NULL, 0, hints);
85
unity_protocol_preview_add_info_hint(proto_obj, "hint1", "Hint 1", NULL, g_variant_new("i", 34));
86
unity_protocol_preview_add_info_hint(proto_obj, "hint2", "Hint 2", NULL, g_variant_new("s", "string hint"));
88
Variant v(dee_serializable_serialize(DEE_SERIALIZABLE(proto_obj.RawPtr())),
90
EXPECT_TRUE(IsVariant(v));
92
Preview::Ptr preview = Preview::PreviewForVariant(v);
93
EXPECT_TRUE(preview != nullptr);
95
EXPECT_EQ(preview->renderer_name, "preview-generic");
96
EXPECT_EQ(preview->title, "Title");
97
EXPECT_EQ(preview->subtitle, "Subtitle");
98
EXPECT_EQ(preview->description, "Description");
99
EXPECT_TRUE(g_icon_equal(preview->image(), icon) != FALSE);
100
EXPECT_EQ(preview->image_source_uri, "Source");
102
auto actions = preview->GetActions();
103
auto info_hints = preview->GetInfoHints();
105
EXPECT_EQ(actions.size(), 2);
107
auto action1 = actions[0];
108
EXPECT_EQ(action1->id, "action1");
109
EXPECT_EQ(action1->display_name, "Action #1");
110
EXPECT_EQ(action1->icon_hint, "");
111
EXPECT_EQ(action1->layout_hint, 0);
112
EXPECT_EQ(action1->extra_text, "");
114
auto action2 = actions[1];
115
EXPECT_EQ(action2->id, "action2");
116
EXPECT_EQ(action2->display_name, "Action #2");
117
EXPECT_EQ(action2->icon_hint, "");
118
EXPECT_EQ(action2->extra_text, "Foo");
120
EXPECT_EQ(info_hints.size(), 2);
121
auto hint1 = info_hints[0];
122
EXPECT_EQ(hint1->id, "hint1");
123
EXPECT_EQ(hint1->display_name, "Hint 1");
124
EXPECT_EQ(hint1->icon_hint, "");
125
EXPECT_EQ(hint1->value.GetInt(), 34);
126
auto hint2 = info_hints[1];
127
EXPECT_EQ(hint2->id, "hint2");
128
EXPECT_EQ(hint2->display_name, "Hint 2");
129
EXPECT_EQ(hint2->icon_hint, "");
130
EXPECT_EQ(hint2->value.GetString(), "string hint");
133
TEST(TestPreviews, DeserializeApplication)
135
Object<GIcon> icon(g_icon_new_for_string("application", NULL));
136
Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_application_preview_new()));
137
unity_protocol_preview_set_title(proto_obj, "Title");
138
unity_protocol_preview_set_subtitle(proto_obj, "Subtitle");
139
unity_protocol_preview_set_description(proto_obj, "Description");
140
unity_protocol_preview_set_image(proto_obj, icon);
141
auto app_proto_obj = glib::object_cast<UnityProtocolApplicationPreview>(proto_obj);
142
unity_protocol_application_preview_set_last_update(app_proto_obj, "2012/06/13");
143
unity_protocol_application_preview_set_copyright(app_proto_obj, "(c) Canonical");
144
unity_protocol_application_preview_set_license(app_proto_obj, "GPLv3");
145
unity_protocol_application_preview_set_app_icon(app_proto_obj, icon);
146
unity_protocol_application_preview_set_rating(app_proto_obj, 4.0);
147
unity_protocol_application_preview_set_num_ratings(app_proto_obj, 12);
149
Variant v(dee_serializable_serialize(DEE_SERIALIZABLE(proto_obj.RawPtr())),
151
EXPECT_TRUE(IsVariant(v));
153
Preview::Ptr base_preview = Preview::PreviewForVariant(v);
154
ApplicationPreview::Ptr preview = std::dynamic_pointer_cast<ApplicationPreview>(base_preview);
155
EXPECT_TRUE(preview != nullptr);
157
EXPECT_EQ(preview->renderer_name, "preview-application");
158
EXPECT_EQ(preview->title, "Title");
159
EXPECT_EQ(preview->subtitle, "Subtitle");
160
EXPECT_EQ(preview->description, "Description");
161
EXPECT_TRUE(g_icon_equal(preview->image(), icon) != FALSE);
162
EXPECT_EQ(preview->last_update, "2012/06/13");
163
EXPECT_EQ(preview->copyright, "(c) Canonical");
164
EXPECT_EQ(preview->license, "GPLv3");
165
EXPECT_TRUE(g_icon_equal(preview->app_icon(), icon) != FALSE);
166
EXPECT_EQ(preview->rating, 4.0);
167
EXPECT_EQ(preview->num_ratings, static_cast<unsigned>(12));
170
TEST(TestPreviews, DeserializeMovie)
172
Object<GIcon> icon(g_icon_new_for_string("movie", NULL));
173
Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_movie_preview_new()));
174
unity_protocol_preview_set_title(proto_obj, "Title");
175
unity_protocol_preview_set_subtitle(proto_obj, "Subtitle");
176
unity_protocol_preview_set_description(proto_obj, "Description");
177
unity_protocol_preview_set_image(proto_obj, icon);
178
auto movie_proto_obj = glib::object_cast<UnityProtocolMoviePreview>(proto_obj);
179
unity_protocol_movie_preview_set_year(movie_proto_obj, "2012");
180
unity_protocol_movie_preview_set_rating(movie_proto_obj, 4.0);
181
unity_protocol_movie_preview_set_num_ratings(movie_proto_obj, 12);
183
Variant v(dee_serializable_serialize(DEE_SERIALIZABLE(proto_obj.RawPtr())),
185
EXPECT_TRUE(IsVariant(v));
187
Preview::Ptr base_preview = Preview::PreviewForVariant(v);
188
MoviePreview::Ptr preview = std::dynamic_pointer_cast<MoviePreview>(base_preview);
189
EXPECT_TRUE(preview != nullptr);
191
EXPECT_EQ(preview->renderer_name, "preview-movie");
192
EXPECT_EQ(preview->title, "Title");
193
EXPECT_EQ(preview->subtitle, "Subtitle");
194
EXPECT_EQ(preview->description, "Description");
195
EXPECT_TRUE(g_icon_equal(preview->image(), icon) != FALSE);
196
EXPECT_EQ(preview->year, "2012");
197
EXPECT_EQ(preview->rating, 4.0);
198
EXPECT_EQ(preview->num_ratings, static_cast<unsigned int>(12));
201
TEST(TestPreviews, DeserializeMusic)
203
Object<GIcon> icon(g_icon_new_for_string("music", NULL));
204
Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_music_preview_new()));
205
unity_protocol_preview_set_title(proto_obj, "Title");
206
unity_protocol_preview_set_subtitle(proto_obj, "Subtitle");
207
unity_protocol_preview_set_description(proto_obj, "Description");
208
unity_protocol_preview_set_image(proto_obj, icon);
209
auto music_proto_obj = glib::object_cast<UnityProtocolMusicPreview>(proto_obj);
211
Variant v(dee_serializable_serialize(DEE_SERIALIZABLE(proto_obj.RawPtr())),
213
EXPECT_TRUE(IsVariant(v));
215
Preview::Ptr base_preview = Preview::PreviewForVariant(v);
216
MusicPreview::Ptr preview = std::dynamic_pointer_cast<MusicPreview>(base_preview);
217
EXPECT_TRUE(preview != nullptr);
219
EXPECT_EQ(preview->renderer_name, "preview-music");
220
EXPECT_EQ(preview->title, "Title");
221
EXPECT_EQ(preview->subtitle, "Subtitle");
222
EXPECT_EQ(preview->description, "Description");
223
EXPECT_TRUE(g_icon_equal(preview->image(), icon) != FALSE);
226
TEST(TestPreviews, DeserializeSeries)
228
Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_series_preview_new()));
229
auto series_proto_obj = glib::object_cast<UnityProtocolSeriesPreview>(proto_obj);
230
unity_protocol_series_preview_add_series_item(
231
series_proto_obj, "#1", "scheme://path/0", NULL);
232
unity_protocol_series_preview_add_series_item(
233
series_proto_obj, "#2", "scheme://path/1", NULL);
234
unity_protocol_series_preview_set_selected_item(series_proto_obj, 1);
236
Object<GIcon> icon(g_icon_new_for_string("accessories", NULL));
237
Object<UnityProtocolPreview> child_proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_generic_preview_new()));
238
unity_protocol_preview_set_title(child_proto_obj, "Title");
239
unity_protocol_preview_set_subtitle(child_proto_obj, "Subtitle");
240
unity_protocol_preview_set_description(child_proto_obj, "Description");
241
unity_protocol_preview_set_image(child_proto_obj, icon);
243
unity_protocol_series_preview_set_child_preview(series_proto_obj,
246
Variant v(dee_serializable_serialize(DEE_SERIALIZABLE(proto_obj.RawPtr())),
248
EXPECT_TRUE(IsVariant(v));
250
Preview::Ptr base_preview = Preview::PreviewForVariant(v);
251
SeriesPreview::Ptr preview = std::dynamic_pointer_cast<SeriesPreview>(base_preview);
252
EXPECT_TRUE(preview != nullptr);
254
EXPECT_EQ(preview->renderer_name, "preview-series");
256
auto items = preview->GetItems();
257
EXPECT_EQ(items.size(), 2);
259
auto item1 = preview->GetItems()[1];
260
EXPECT_EQ(item1->uri, "scheme://path/1");
261
EXPECT_EQ(item1->title, "#2");
263
auto child_preview = preview->GetChildPreview();
264
EXPECT_EQ(child_preview->renderer_name, "preview-generic");
265
EXPECT_EQ(child_preview->title, "Title");
266
EXPECT_EQ(child_preview->subtitle, "Subtitle");
267
EXPECT_EQ(child_preview->description, "Description");
268
EXPECT_TRUE(g_icon_equal(child_preview->image(), icon) != FALSE);