+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <shortcut_internal.h>
+#include <shortcut_private.h>
+#include <gtest/gtest.h>
+
+#include "system_info_mock.h"
+#include "gio_mock.h"
+#include "test_fixture.h"
+
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::Return;
+using ::testing::SetArgPointee;
+using ::testing::SaveArg;
+
+class Mocks : public ::testing::NiceMock<SystemInfoMock>,
+ public ::testing::NiceMock<GioMock> {};
+
+class ShortcutInternalTest : public TestFixture {
+ public:
+ ShortcutInternalTest() : TestFixture(std::make_unique<Mocks>()) {}
+ virtual ~ShortcutInternalTest() {}
+ virtual void SetUp() {}
+ virtual void TearDown() {}
+};
+
+TEST_F(ShortcutInternalTest, shortcut_add_to_home_sync) {
+ int ret;
+ bool is_supported = true;
+ GDBusConnection* _conn = (GDBusConnection*)g_object_new(G_TYPE_OBJECT, nullptr);
+ GDBusMessage* _msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, nullptr);
+ GDBusMessage* _msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, nullptr);
+ GDBusMessage* _msg3 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, nullptr);
+ GDBusMessage* _msg4 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, nullptr);
+ GVariant* reply_body;
+
+ EXPECT_CALL(GetMock<SystemInfoMock>(),
+ system_info_get_platform_bool(_, _)).
+ WillOnce(DoAll(SetArgPointee<1>(is_supported),
+ Return(0)));
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_bus_get_sync(_, _, _)).
+ WillOnce(Return(_conn));
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_message_new_method_call(_, _, _, _)).
+ WillOnce(Return(_msg)).
+ WillOnce(Return(_msg2));
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_connection_send_message_with_reply_sync(
+ _, _, _, _, _, _, _)).
+ WillOnce(Return(_msg3)).
+ WillOnce(Return(_msg4));
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_message_to_gerror(_, _)).
+ WillOnce(Return(FALSE)).
+ WillOnce(Return(FALSE));
+
+ reply_body = g_variant_new("(i)", 0);
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_message_get_body(_)).
+ WillOnce(Return(g_variant_ref(reply_body)));
+
+ ret = shortcut_add_to_home_sync("test_name", LAUNCH_BY_URI, "test_uri", "test_icon", 0);
+
+ EXPECT_EQ(ret, SHORTCUT_ERROR_NONE);
+ g_variant_unref(reply_body);
+}
+
+TEST_F(ShortcutInternalTest, shortcut_add_to_home_widget_sync) {
+ int ret;
+ bool is_supported = true;
+ GDBusMessage* _msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, nullptr);
+ GDBusMessage* _msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, nullptr);
+ GDBusMessage* _msg3 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, nullptr);
+ GDBusMessage* _msg4 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, nullptr);
+ GVariant* reply_body;
+
+ EXPECT_CALL(GetMock<SystemInfoMock>(),
+ system_info_get_platform_bool(_, _)).
+ WillOnce(DoAll(SetArgPointee<1>(is_supported),
+ Return(0)));
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_message_new_method_call(_, _, _, _)).
+ WillOnce(Return(_msg)).
+ WillOnce(Return(_msg2));
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_connection_send_message_with_reply_sync(
+ _, _, _, _, _, _, _)).
+ WillOnce(Return(_msg3)).
+ WillOnce(Return(_msg4));
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_message_to_gerror(_, _)).
+ WillOnce(Return(FALSE)).
+ WillOnce(Return(FALSE));
+
+ reply_body = g_variant_new("(i)", 0);
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_message_get_body(_)).
+ WillOnce(Return(g_variant_ref(reply_body)));
+
+ ret = shortcut_add_to_home_widget_sync("test_name", WIDGET_SIZE_DEFAULT, "test_id", "test_icon",
+ 0, 0);
+
+ EXPECT_EQ(ret, SHORTCUT_ERROR_NONE);
+ g_variant_unref(reply_body);
+}
+
+TEST_F(ShortcutInternalTest, shortcut_remove_from_home_sync) {
+ int ret;
+ bool is_supported = true;
+ GDBusMessage* _msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, nullptr);
+ GDBusMessage* _msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, nullptr);
+ GDBusMessage* _msg3 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, nullptr);
+ GDBusMessage* _msg4 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, nullptr);
+ GVariant* reply_body;
+
+ EXPECT_CALL(GetMock<SystemInfoMock>(),
+ system_info_get_platform_bool(_, _)).
+ WillOnce(DoAll(SetArgPointee<1>(is_supported),
+ Return(0)));
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_message_new_method_call(_, _, _, _)).
+ WillOnce(Return(_msg)).
+ WillOnce(Return(_msg2));
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_connection_send_message_with_reply_sync(
+ _, _, _, _, _, _, _)).
+ WillOnce(Return(_msg3)).
+ WillOnce(Return(_msg4));
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_message_to_gerror(_, _)).
+ WillOnce(Return(FALSE)).
+ WillOnce(Return(FALSE));
+
+ reply_body = g_variant_new("(i)", 0);
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_message_get_body(_)).
+ WillOnce(Return(g_variant_ref(reply_body)));
+
+ ret = shortcut_remove_from_home_sync("test_name");
+
+ EXPECT_EQ(ret, SHORTCUT_ERROR_NONE);
+ g_variant_unref(reply_body);
+}
+
+TEST_F(ShortcutInternalTest, Callback) {
+ GDBusSignalCallback callback;
+ gpointer callback_data;
+
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_connection_signal_subscribe(_, _, _, _, _, _, _, _, _, _)).
+ WillOnce(DoAll(SaveArg<7>(&callback), SaveArg<8>(&callback_data), Return(0)));
+
+ _dbus_signal_init();
+ EXPECT_CALL(GetMock<GioMock>(),
+ g_dbus_message_new_method_call(_, _, _, "send_return_value")).
+ Times(3);
+
+ GVariant* add_var = g_variant_new("(sississi)", "request_id", 0, "appid", "name",
+ 0, "uri", "icon", 0);
+ callback(nullptr, nullptr, nullptr, nullptr, "add_shortcut_notify", add_var, callback_data);
+
+ GVariant* add_widget_var = g_variant_new("(sississdi)", "request_id", 0, "widget_id",
+ "name", 0, "content", "icon", 0, 0);
+ callback(nullptr, nullptr, nullptr, nullptr, "add_shortcut_widget_notify", add_widget_var, callback_data);
+
+ GVariant* remove_var = g_variant_new("(siss)", "request_id", 0, "appid", "name");
+ callback(nullptr, nullptr, nullptr, nullptr, "remove_shortcut_notify", remove_var, callback_data);
+
+}