2 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <gtest/gtest.h>
19 #include <shortcut_manager.h>
24 #include "system_info_mock.h"
26 #include "test_fixture.h"
29 using ::testing::DoAll;
30 using ::testing::Return;
31 using ::testing::SetArgPointee;
33 class Mocks : public ::testing::NiceMock<SystemInfoMock>,
34 public ::testing::NiceMock<GioMock> {};
36 class ShortcutTest : public TestFixture {
38 ShortcutTest() : TestFixture(std::make_unique<Mocks>()) {}
39 virtual ~ShortcutTest() {}
41 virtual void SetUp() {
44 virtual void TearDown() {
48 TEST_F(ShortcutTest, shortcut_add_to_home) {
50 bool is_supported = true;
51 GDBusConnection* _conn = (GDBusConnection*)g_object_new(G_TYPE_OBJECT, NULL);
52 GDBusMessage* _msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
53 GDBusMessage* _msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
54 GDBusMessage* _msg3 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
56 EXPECT_CALL(GetMock<SystemInfoMock>(),
57 system_info_get_platform_bool(_, _)).
58 WillOnce(DoAll(SetArgPointee<1>(is_supported),
61 EXPECT_CALL(GetMock<GioMock>(),
62 g_bus_get_sync(_, _, _)).
63 WillOnce(Return(_conn));
65 EXPECT_CALL(GetMock<GioMock>(),
66 g_dbus_message_new_method_call(_, _, _, _)).
67 WillOnce(Return(_msg)).
68 WillOnce(Return(_msg2));
70 EXPECT_CALL(GetMock<GioMock>(),
71 g_dbus_connection_send_message_with_reply_sync(
72 _, _, _, _, _, _, _)).
73 WillOnce(Return(_msg3));
75 EXPECT_CALL(GetMock<GioMock>(),
76 g_dbus_connection_send_message_with_reply(
77 _, _, _, _, _, _, _, _)).
80 EXPECT_CALL(GetMock<GioMock>(),
81 g_dbus_message_to_gerror(_, _)).
82 WillOnce(Return(FALSE));
84 ret = shortcut_add_to_home("test_name", LAUNCH_BY_URI, "test_uri", "test_icon",
87 EXPECT_EQ(ret, SHORTCUT_ERROR_NONE);
90 TEST_F(ShortcutTest, shortcut_remove_from_home) {
92 bool is_supported = true;
93 GDBusMessage* _msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
94 GDBusMessage* _msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
95 GDBusMessage* _msg3 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
97 EXPECT_CALL(GetMock<SystemInfoMock>(),
98 system_info_get_platform_bool(_, _)).
99 WillOnce(DoAll(SetArgPointee<1>(is_supported),
102 EXPECT_CALL(GetMock<GioMock>(),
103 g_dbus_message_new_method_call(_, _, _, _)).
104 WillOnce(Return(_msg)).
105 WillOnce(Return(_msg2));
107 EXPECT_CALL(GetMock<GioMock>(),
108 g_dbus_connection_send_message_with_reply_sync(
109 _, _, _, _, _, _, _)).
110 WillOnce(Return(_msg3));
112 EXPECT_CALL(GetMock<GioMock>(),
113 g_dbus_connection_send_message_with_reply(
114 _, _, _, _, _, _, _, _)).
117 EXPECT_CALL(GetMock<GioMock>(),
118 g_dbus_message_to_gerror(_, _)).
119 WillOnce(Return(FALSE));
121 ret = shortcut_remove_from_home("test_name",
122 [](int ret, void* user_data) -> int {
126 EXPECT_EQ(ret, SHORTCUT_ERROR_NONE);
129 TEST_F(ShortcutTest, shortcut_get_list) {
131 bool is_supported = true;
132 GVariantBuilder *builder;
134 GVariant* reply_body;
135 GDBusMessage* _msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
136 GDBusMessage* _msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
138 body = g_variant_new("(sssss)",
139 "test_pkg", "test_icon", "test_name", "test_extra", "");
141 builder = g_variant_builder_new(G_VARIANT_TYPE("a(v)"));
142 g_variant_builder_add(builder, "(v)", body);
144 reply_body = g_variant_new("(ia(v))", 1, builder);
146 EXPECT_CALL(GetMock<SystemInfoMock>(),
147 system_info_get_platform_bool(_, _)).
148 WillOnce(DoAll(SetArgPointee<1>(is_supported),
151 EXPECT_CALL(GetMock<GioMock>(),
152 g_dbus_message_new_method_call(_, _, _, _)).
153 WillOnce(Return(_msg));
155 EXPECT_CALL(GetMock<GioMock>(),
156 g_dbus_connection_send_message_with_reply_sync(
157 _, _, _, _, _, _, _)).
158 WillOnce(Return(_msg2));
160 EXPECT_CALL(GetMock<GioMock>(),
161 g_dbus_message_get_body(_)).
162 WillOnce(Return(reply_body));
164 EXPECT_CALL(GetMock<GioMock>(),
165 g_dbus_message_to_gerror(_, _)).
166 WillOnce(Return(FALSE));
168 ret = shortcut_get_list("test_pkgid",
169 [](const char* package_name, const char* icon,
170 const char* name, const char* extra_key,
171 const char* extra_data, void* user_data) -> int {
175 g_variant_builder_unref(builder);
176 g_variant_unref(body);
181 TEST_F(ShortcutTest, shortcut_set_request_cb) {
183 bool is_supported = true;
184 GDBusMessage* _msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
185 GDBusMessage* _msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
187 EXPECT_CALL(GetMock<SystemInfoMock>(),
188 system_info_get_platform_bool(_, _)).
189 WillOnce(DoAll(SetArgPointee<1>(is_supported),
192 EXPECT_CALL(GetMock<GioMock>(),
193 g_dbus_connection_signal_subscribe(
194 _, _, _, _, _, _, _, _, _, _)).
195 WillOnce(Return(99));
197 EXPECT_CALL(GetMock<GioMock>(),
198 g_dbus_message_new_method_call(_, _, _, _)).
199 WillOnce(Return(_msg));
201 EXPECT_CALL(GetMock<GioMock>(),
202 g_dbus_connection_send_message_with_reply_sync(
203 _, _, _, _, _, _, _)).
204 WillOnce(Return(_msg2));
206 EXPECT_CALL(GetMock<GioMock>(),
207 g_bus_watch_name_on_connection(
208 _, _, _, _, _, _, _)).
209 WillOnce(Return(88));
211 EXPECT_CALL(GetMock<GioMock>(),
212 g_dbus_message_to_gerror(_, _)).
213 WillOnce(Return(FALSE));
215 ret = shortcut_set_request_cb(
216 [](const char* package_name, const char* name,
217 int type, const char* content_info, const char* icon,
218 int pid, double period, int allow_duplicate,
219 void* user_data) -> int {
223 EXPECT_EQ(ret, SHORTCUT_ERROR_NONE);
226 TEST_F(ShortcutTest, shortcut_unset_request_cb) {
227 bool is_supported = true;
228 GDBusMessage* _msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
229 GDBusMessage* _msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
231 EXPECT_CALL(GetMock<SystemInfoMock>(),
232 system_info_get_platform_bool(_, _)).
233 WillOnce(DoAll(SetArgPointee<1>(is_supported),
236 EXPECT_CALL(GetMock<GioMock>(),
237 g_dbus_message_new_method_call(_, _, _, _)).
238 WillOnce(Return(_msg));
240 EXPECT_CALL(GetMock<GioMock>(),
241 g_dbus_connection_send_message_with_reply_sync(
242 _, _, _, _, _, _, _)).
243 WillOnce(Return(_msg2));
245 EXPECT_CALL(GetMock<GioMock>(),
246 g_dbus_message_to_gerror(_, _)).
247 WillOnce(Return(FALSE));
249 shortcut_unset_request_cb();
251 EXPECT_EQ(get_last_result(), SHORTCUT_ERROR_NONE);
254 TEST_F(ShortcutTest, shortcut_set_remove_cb) {
256 bool is_supported = true;
257 GDBusConnection* _conn = (GDBusConnection*)g_object_new(G_TYPE_OBJECT, NULL);
258 GDBusMessage* _msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
259 GDBusMessage* _msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
261 EXPECT_CALL(GetMock<SystemInfoMock>(),
262 system_info_get_platform_bool(_, _)).
263 WillOnce(DoAll(SetArgPointee<1>(is_supported),
266 EXPECT_CALL(GetMock<GioMock>(),
267 g_bus_get_sync(_, _, _)).
268 WillOnce(Return(_conn));
270 EXPECT_CALL(GetMock<GioMock>(),
271 g_dbus_connection_signal_subscribe(
272 _, _, _, _, _, _, _, _, _, _)).
273 WillOnce(Return(99));
275 EXPECT_CALL(GetMock<GioMock>(),
276 g_dbus_message_new_method_call(_, _, _, _)).
277 WillOnce(Return(_msg));
279 EXPECT_CALL(GetMock<GioMock>(),
280 g_dbus_connection_send_message_with_reply_sync(
281 _, _, _, _, _, _, _)).
282 WillOnce(Return(_msg2));
284 EXPECT_CALL(GetMock<GioMock>(),
285 g_bus_watch_name_on_connection(
286 _, _, _, _, _, _, _)).
287 WillOnce(Return(88));
289 EXPECT_CALL(GetMock<GioMock>(),
290 g_dbus_message_to_gerror(_, _)).
291 WillOnce(Return(FALSE));
293 ret = shortcut_set_remove_cb(
294 [](const char* package_name, const char* name,
295 int sender_pid, void* user_data) -> int {
299 EXPECT_EQ(ret, SHORTCUT_ERROR_NONE);
302 TEST_F(ShortcutTest, shortcut_unset_remove_cb) {
303 bool is_supported = true;
304 GDBusMessage* _msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
305 GDBusMessage* _msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
307 EXPECT_CALL(GetMock<SystemInfoMock>(),
308 system_info_get_platform_bool(_, _)).
309 WillOnce(DoAll(SetArgPointee<1>(is_supported),
312 EXPECT_CALL(GetMock<GioMock>(),
313 g_dbus_message_new_method_call(_, _, _, _)).
314 WillOnce(Return(_msg));
316 EXPECT_CALL(GetMock<GioMock>(),
317 g_dbus_connection_send_message_with_reply_sync(
318 _, _, _, _, _, _, _)).
319 WillOnce(Return(_msg2));
321 EXPECT_CALL(GetMock<GioMock>(),
322 g_dbus_message_to_gerror(_, _)).
323 WillOnce(Return(FALSE));
325 shortcut_unset_remove_cb();
327 EXPECT_EQ(get_last_result(), SHORTCUT_ERROR_NONE);