1
// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
3
* Copyright (C) 2012 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>
20
#include <gmock/gmock.h>
22
#include "LauncherEntryRemote.h"
25
using namespace unity;
26
using namespace testing;
31
GVariant* BuildVariantParameters(std::string const& app_uri = "app_uri",
32
std::string const& emblem = "emblem",
33
bool emblem_visible = false,
35
bool count_visible = false,
36
double progress = 0.0f,
37
bool progress_visible = false,
39
std::string const& quicklist_path = "/my/quicklist/path")
43
g_variant_builder_init(&b, G_VARIANT_TYPE ("a{sv}"));
44
g_variant_builder_add(&b, "{sv}", "emblem", g_variant_new_string(emblem.c_str()));
45
g_variant_builder_add(&b, "{sv}", "emblem-visible", g_variant_new_boolean(emblem_visible));
46
g_variant_builder_add(&b, "{sv}", "count", g_variant_new_int64(count));
47
g_variant_builder_add(&b, "{sv}", "count-visible", g_variant_new_boolean(count_visible));
48
g_variant_builder_add(&b, "{sv}", "progress", g_variant_new_double(progress));
49
g_variant_builder_add(&b, "{sv}", "progress-visible", g_variant_new_boolean(progress_visible));
50
g_variant_builder_add(&b, "{sv}", "urgent", g_variant_new_boolean(urgent));
51
g_variant_builder_add(&b, "{sv}", "quicklist", g_variant_new_string(quicklist_path.c_str()));
53
return g_variant_new("(sa{sv})", app_uri.c_str(), &b);
56
TEST(TestLauncherEntryRemote, DummyConstruction)
58
LauncherEntryRemote entry("TestName", nullptr);
60
EXPECT_EQ(entry.DBusName(), "TestName");
61
EXPECT_TRUE(entry.AppUri().empty());
62
EXPECT_TRUE(entry.Emblem().empty());
63
EXPECT_EQ(entry.Count(), 0);
64
EXPECT_EQ(entry.Progress(), 0.0f);
65
EXPECT_THAT(entry.Quicklist().RawPtr(), IsNull());
66
EXPECT_FALSE(entry.EmblemVisible());
67
EXPECT_FALSE(entry.CountVisible());
68
EXPECT_FALSE(entry.ProgressVisible());
69
EXPECT_FALSE(entry.Urgent());
72
TEST(TestLauncherEntryRemote, Construction)
74
LauncherEntryRemote entry("TestName", BuildVariantParameters());
76
EXPECT_EQ(entry.DBusName(), "TestName");
77
EXPECT_EQ(entry.AppUri(), "app_uri");
78
EXPECT_EQ(entry.Emblem(), "emblem");
79
EXPECT_EQ(entry.Count(), 0);
80
EXPECT_EQ(entry.Progress(), 0.0f);
81
EXPECT_THAT(entry.Quicklist().RawPtr(), NotNull());
82
EXPECT_FALSE(entry.EmblemVisible());
83
EXPECT_FALSE(entry.CountVisible());
84
EXPECT_FALSE(entry.ProgressVisible());
85
EXPECT_FALSE(entry.Urgent());
88
TEST(TestLauncherEntryRemote, CustomConstruction)
91
parameters = BuildVariantParameters("Uri", "TestEmblem", true, 55, true, 31.12f,
92
true, true, "/My/DBus/Menu/For/QL");
93
LauncherEntryRemote entry("CustomName", parameters);
95
EXPECT_EQ(entry.DBusName(), "CustomName");
96
EXPECT_EQ(entry.AppUri(), "Uri");
97
EXPECT_EQ(entry.Emblem(), "TestEmblem");
98
EXPECT_EQ(entry.Count(), 55);
99
EXPECT_EQ(entry.Progress(), 31.12f);
100
EXPECT_THAT(entry.Quicklist().RawPtr(), NotNull());
101
EXPECT_TRUE(entry.EmblemVisible());
102
EXPECT_TRUE(entry.CountVisible());
103
EXPECT_TRUE(entry.ProgressVisible());
104
EXPECT_TRUE(entry.Urgent());
107
TEST(TestLauncherEntryRemote, UpdateFromOther)
109
LauncherEntryRemote entry1("Entry1", BuildVariantParameters("AppURI1"));
111
ASSERT_EQ(entry1.DBusName(), "Entry1");
112
ASSERT_EQ(entry1.AppUri(), "AppURI1");
113
auto old_ql1 = entry1.Quicklist();
114
ASSERT_THAT(old_ql1.RawPtr(), NotNull());
116
GVariant* parameters;
117
parameters = BuildVariantParameters("Uri2", "TestEmblem", false, 5, true, 0.12f,
118
true, false, "/My/DBus/Menu/For/QL");
120
LauncherEntryRemote::Ptr entry2(new LauncherEntryRemote("Entry2", parameters));
121
ASSERT_EQ(entry2->AppUri(), "Uri2");
123
entry1.Update(entry2);
125
EXPECT_EQ(entry1.DBusName(), "Entry2");
126
EXPECT_EQ(entry1.AppUri(), "AppURI1");
127
EXPECT_EQ(entry1.Emblem(), "TestEmblem");
128
EXPECT_EQ(entry1.Count(), 5);
129
EXPECT_EQ(entry1.Progress(), 0.12f);
130
EXPECT_THAT(entry1.Quicklist().RawPtr(), NotNull());
131
EXPECT_NE(old_ql1, entry1.Quicklist());
132
EXPECT_FALSE(entry1.EmblemVisible());
133
EXPECT_TRUE(entry1.CountVisible());
134
EXPECT_TRUE(entry1.ProgressVisible());
135
EXPECT_FALSE(entry1.Urgent());
138
TEST(TestLauncherEntryRemote, UpdateFromVariantIter)
140
LauncherEntryRemote entry1("Entry1", BuildVariantParameters("AppURI1"));
142
ASSERT_EQ(entry1.DBusName(), "Entry1");
143
ASSERT_EQ(entry1.AppUri(), "AppURI1");
144
auto old_ql1 = entry1.Quicklist();
145
ASSERT_THAT(old_ql1.RawPtr(), NotNull());
147
GVariant* parameters;
148
parameters = BuildVariantParameters("Uri2", "TestEmblem", false, 5, true, 0.12f,
149
true, false, "/My/DBus/Menu/For/QL");
152
GVariantIter* prop_iter;
153
g_variant_get(parameters, "(&sa{sv})", &app_uri, &prop_iter);
154
entry1.Update(prop_iter);
155
g_variant_iter_free(prop_iter);
157
EXPECT_EQ(entry1.DBusName(), "Entry1");
158
EXPECT_EQ(entry1.AppUri(), "AppURI1");
159
EXPECT_EQ(entry1.Emblem(), "TestEmblem");
160
EXPECT_EQ(entry1.Count(), 5);
161
EXPECT_EQ(entry1.Progress(), 0.12f);
162
EXPECT_THAT(entry1.Quicklist().RawPtr(), NotNull());
163
EXPECT_NE(old_ql1, entry1.Quicklist());
164
EXPECT_FALSE(entry1.EmblemVisible());
165
EXPECT_TRUE(entry1.CountVisible());
166
EXPECT_TRUE(entry1.ProgressVisible());
167
EXPECT_FALSE(entry1.Urgent());
170
TEST(TestLauncherEntryRemote, ChangeDBusName)
172
LauncherEntryRemote entry("Entry", BuildVariantParameters("AppURI"));
174
bool name_changed = false;
175
std::string old_name;
176
entry.dbus_name_changed.connect([&] (LauncherEntryRemote*, std::string s) {
181
auto old_ql = entry.Quicklist();
182
ASSERT_THAT(old_ql.RawPtr(), NotNull());
183
ASSERT_EQ(entry.DBusName(), "Entry");
185
entry.SetDBusName("NewEntryName");
186
ASSERT_EQ(entry.DBusName(), "NewEntryName");
188
EXPECT_THAT(entry.Quicklist().RawPtr(), IsNull());
189
EXPECT_NE(old_ql, entry.Quicklist());
191
EXPECT_TRUE(name_changed);
192
EXPECT_EQ(old_name, "Entry");
195
TEST(TestLauncherEntryRemote, EmblemChangedSignal)
197
GVariant* parameters;
198
parameters = BuildVariantParameters("Uri", "TestEmblem1", true, 55, true, 31.12f,
199
true, true, "/My/DBus/Menu/For/QL");
201
LauncherEntryRemote entry1("Entry1", parameters);
203
bool value_changed = false;
204
entry1.emblem_changed.connect([&] (LauncherEntryRemote*) { value_changed = true; });
206
parameters = BuildVariantParameters("Uri", "TestEmblem2", true, 55, true, 31.12f,
207
true, true, "/My/DBus/Menu/For/QL");
209
LauncherEntryRemote::Ptr entry2(new LauncherEntryRemote("Entry2", parameters));
211
ASSERT_EQ(entry1.Emblem(), "TestEmblem1");
213
entry1.Update(entry2);
215
EXPECT_TRUE(value_changed);
216
EXPECT_EQ(entry1.Emblem(), "TestEmblem2");
219
TEST(TestLauncherEntryRemote, CountChangedSignal)
221
GVariant* parameters;
222
parameters = BuildVariantParameters("Uri", "TestEmblem", true, 55, true, 31.12f,
223
true, true, "/My/DBus/Menu/For/QL");
225
LauncherEntryRemote entry1("Entry1", parameters);
227
bool value_changed = false;
228
entry1.count_changed.connect([&] (LauncherEntryRemote*) { value_changed = true; });
230
parameters = BuildVariantParameters("Uri", "TestEmblem", true, 155, true, 31.12f,
231
true, true, "/My/DBus/Menu/For/QL");
233
LauncherEntryRemote::Ptr entry2(new LauncherEntryRemote("Entry2", parameters));
235
ASSERT_EQ(entry1.Count(), 55);
237
entry1.Update(entry2);
239
EXPECT_TRUE(value_changed);
240
EXPECT_EQ(entry1.Count(), 155);
243
TEST(TestLauncherEntryRemote, ProgressChangedSignal)
245
GVariant* parameters;
246
parameters = BuildVariantParameters("Uri", "TestEmblem", true, 55, true, 0.12f,
247
true, true, "/My/DBus/Menu/For/QL");
249
LauncherEntryRemote entry1("Entry1", parameters);
251
bool value_changed = false;
252
entry1.progress_changed.connect([&] (LauncherEntryRemote*) { value_changed = true; });
254
parameters = BuildVariantParameters("Uri", "TestEmblem", true, 55, true, 31.12f,
255
true, true, "/My/DBus/Menu/For/QL");
257
LauncherEntryRemote::Ptr entry2(new LauncherEntryRemote("Entry2", parameters));
259
ASSERT_EQ(entry1.Progress(), 0.12f);
261
entry1.Update(entry2);
263
EXPECT_TRUE(value_changed);
264
EXPECT_EQ(entry1.Progress(), 31.12f);
267
TEST(TestLauncherEntryRemote, QuicklistChangedSignal)
269
GVariant* parameters;
270
parameters = BuildVariantParameters("Uri", "TestEmblem", true, 55, true, 31.12f,
271
true, true, "/My/DBus/Menu/For/QL1");
273
LauncherEntryRemote entry1("Entry1", parameters);
275
bool value_changed = false;
276
entry1.quicklist_changed.connect([&] (LauncherEntryRemote*) { value_changed = true; });
278
parameters = BuildVariantParameters("Uri", "TestEmblem", true, 55, true, 31.12f,
279
true, true, "/My/DBus/Menu/For/QL2");
281
LauncherEntryRemote::Ptr entry2(new LauncherEntryRemote("Entry2", parameters));
283
auto old_ql1 = entry1.Quicklist();
284
ASSERT_THAT(old_ql1.RawPtr(), NotNull());
286
entry1.Update(entry2);
288
EXPECT_TRUE(value_changed);
289
EXPECT_NE(entry1.Quicklist(), old_ql1);
290
EXPECT_EQ(entry1.Quicklist(), entry2->Quicklist());
293
TEST(TestLauncherEntryRemote, EmblemVisibilityChanged)
295
GVariant* parameters;
296
parameters = BuildVariantParameters("Uri", "TestEmblem", false, 55, true, 31.12f,
297
true, true, "/My/DBus/Menu/For/QL");
299
LauncherEntryRemote entry1("Entry1", parameters);
301
bool value_changed = false;
302
entry1.emblem_visible_changed.connect([&] (LauncherEntryRemote*) { value_changed = true; });
304
parameters = BuildVariantParameters("Uri", "TestEmblem", true, 55, true, 31.12f,
305
true, true, "/My/DBus/Menu/For/QL");
307
LauncherEntryRemote::Ptr entry2(new LauncherEntryRemote("Entry2", parameters));
309
ASSERT_FALSE(entry1.EmblemVisible());
311
entry1.Update(entry2);
313
EXPECT_TRUE(value_changed);
314
EXPECT_TRUE(entry1.EmblemVisible());
317
TEST(TestLauncherEntryRemote, CountVisibilityChanged)
319
GVariant* parameters;
320
parameters = BuildVariantParameters("Uri", "TestEmblem", false, 55, false, 31.12f,
321
true, true, "/My/DBus/Menu/For/QL");
323
LauncherEntryRemote entry1("Entry1", parameters);
325
bool value_changed = false;
326
entry1.count_visible_changed.connect([&] (LauncherEntryRemote*) { value_changed = true; });
328
parameters = BuildVariantParameters("Uri", "TestEmblem", false, 55, true, 31.12f,
329
true, true, "/My/DBus/Menu/For/QL");
331
LauncherEntryRemote::Ptr entry2(new LauncherEntryRemote("Entry2", parameters));
333
ASSERT_FALSE(entry1.CountVisible());
335
entry1.Update(entry2);
337
EXPECT_TRUE(value_changed);
338
EXPECT_TRUE(entry1.CountVisible());
341
TEST(TestLauncherEntryRemote, ProgressVisibilityChanged)
343
GVariant* parameters;
344
parameters = BuildVariantParameters("Uri", "TestEmblem", false, 55, false, 31.12f,
345
false, true, "/My/DBus/Menu/For/QL");
347
LauncherEntryRemote entry1("Entry1", parameters);
349
bool value_changed = false;
350
entry1.progress_visible_changed.connect([&] (LauncherEntryRemote*) { value_changed = true; });
352
parameters = BuildVariantParameters("Uri", "TestEmblem", false, 55, false, 31.12f,
353
true, true, "/My/DBus/Menu/For/QL");
355
LauncherEntryRemote::Ptr entry2(new LauncherEntryRemote("Entry2", parameters));
357
ASSERT_FALSE(entry1.ProgressVisible());
359
entry1.Update(entry2);
361
EXPECT_TRUE(value_changed);
362
EXPECT_TRUE(entry1.ProgressVisible());
365
TEST(TestLauncherEntryRemote, UrgentChanged)
367
GVariant* parameters;
368
parameters = BuildVariantParameters("Uri", "TestEmblem", false, 55, false, 31.12f,
369
false, false, "/My/DBus/Menu/For/QL");
371
LauncherEntryRemote entry1("Entry1", parameters);
373
bool value_changed = false;
374
entry1.urgent_changed.connect([&] (LauncherEntryRemote*) { value_changed = true; });
376
parameters = BuildVariantParameters("Uri", "TestEmblem", false, 55, false, 31.12f,
377
false, true, "/My/DBus/Menu/For/QL");
379
LauncherEntryRemote::Ptr entry2(new LauncherEntryRemote("Entry2", parameters));
381
ASSERT_FALSE(entry1.Urgent());
383
entry1.Update(entry2);
385
EXPECT_TRUE(value_changed);
386
EXPECT_TRUE(entry1.Urgent());