--- /dev/null
+/*
+* Copyright © 2021 Samsung Electronics co., Ltd. All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice (including the next
+* paragraph) shall be included in all copies or substantial portions of the
+* Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+* DEALINGS IN THE SOFTWARE.
+*/
+
+#include "mmi-client.h"
+#include "mmi-manager-tests.h"
+#include "interface/mmifw_stub.h"
+
+#include <Ecore.h>
+
+class MMIClientTest : public ::testing::Test
+{
+public:
+ void SetUp(void) override
+ {
+ }
+
+ void TearDown(void) override
+ {
+ }
+};
+
+
+TEST_F(MMIClientTest, MMIClientInitShutdown)
+{
+ int res = 0;
+
+ client_manager_init();
+ res = 1;
+
+ EXPECT_EQ(res, 1);
+
+ client_manager_shutdown();
+}
+
+TEST_F(MMIClientTest, MMIClientAddGetClient)
+{
+ const char *app_id = "org.tizen.mmi-system-ux-test";
+ mmi_client *mc = nullptr, *mc_tmp = nullptr;
+
+ client_manager_init();
+
+ mc = client_manager_add_client(app_id);
+ EXPECT_NE(mc, nullptr);
+ mc_tmp = client_manager_get_client(app_id);
+
+ EXPECT_EQ(mc_tmp, mc);
+
+ client_manager_shutdown();
+}
+
+TEST_F(MMIClientTest, MMIClientAddRemoveClient)
+{
+ const char *app_id = "org.tizen.mmi-system-ux-test";
+ mmi_client *mc = nullptr;
+ int res = 0;
+
+ client_manager_init();
+
+ mc = client_manager_add_client(app_id);
+ EXPECT_NE(mc, nullptr);
+ res = client_manager_remove_client(app_id);
+
+ EXPECT_EQ(res, 0);
+
+ client_manager_shutdown();
+}
+
+TEST_F(MMIClientTest, MMIClientSetGetClientUID)
+{
+ const char *app_id = "org.tizen.mmi-system-ux-test";
+ mmi_client *mc = nullptr;
+ int res = -1;
+ uid_t uid = 1;
+
+ client_manager_init();
+ mc = client_manager_add_client(app_id);
+
+ res = client_manager_set_client_uid(mc, uid);
+ EXPECT_NE(res, -1);
+ res = client_manager_get_client_uid(mc);
+ EXPECT_NE(res, -1);
+
+ res = client_manager_remove_client(app_id);
+
+ client_manager_shutdown();
+}
+
+TEST_F(MMIClientTest, MMIClientSetGetClientPID)
+{
+ const char *app_id = "org.tizen.mmi-system-ux-test";
+ mmi_client *mc = nullptr;
+ int res = -1;
+ uid_t pid = 1;
+
+ client_manager_init();
+ mc = client_manager_add_client(app_id);
+
+ res = client_manager_set_client_pid(mc, pid);
+ EXPECT_NE(res, -1);
+ res = client_manager_get_client_pid(mc);
+ EXPECT_NE(res, -1);
+
+ res = client_manager_remove_client(app_id);
+
+ client_manager_shutdown();
+}
+
+TEST_F(MMIClientTest, MMIClientSetGetClientState)
+{
+ const char *app_id = "org.tizen.mmi-system-ux-test";
+ mmi_client *mc = nullptr;
+ mmi_state state = MMI_STATE_NONE;
+ int res = 0;
+
+ client_manager_init();
+ mc = client_manager_add_client(app_id);
+
+ state = client_manager_get_client_state(mc);
+ EXPECT_EQ(state, MMI_STATE_NONE);
+ state = client_manager_set_client_state(mc, MMI_STATE_INITIATION);
+ EXPECT_EQ(state, MMI_STATE_INITIATION);
+ state = client_manager_get_client_state(mc);
+ EXPECT_EQ(state, MMI_STATE_INITIATION);
+
+ res = client_manager_remove_client(app_id);
+
+ client_manager_shutdown();
+}
+
+TEST_F(MMIClientTest, MMIClientSetGetClientHasFocus)
+{
+ const char *app_id = "org.tizen.mmi-system-ux-test";
+ mmi_client *mc = nullptr;
+ bool has_focus = false;
+ int res = 0;
+
+ client_manager_init();
+ mc = client_manager_add_client(app_id);
+
+ has_focus = client_manager_get_client_has_focus(mc);
+ EXPECT_EQ(has_focus, false);
+ has_focus = client_manager_set_client_has_focus(mc, true);
+ EXPECT_EQ(has_focus, true);
+ has_focus = client_manager_get_client_has_focus(mc);
+ EXPECT_EQ(has_focus, true);
+
+ res = client_manager_remove_client(app_id);
+
+ client_manager_shutdown();
+}
+
+TEST_F(MMIClientTest, MMIClientGetClientSender)
+{
+ const char *app_id = "org.tizen.mmi-system-ux-test";
+ const char *sender = nullptr;
+ mmi_client *mc = nullptr;
+ int res = 0;
+
+ client_manager_init();
+ mc = client_manager_add_client(app_id);
+
+ sender = client_manager_get_client_sender(mc);
+ EXPECT_NE(sender, nullptr);
+
+ res = client_manager_remove_client(app_id);
+
+ client_manager_shutdown();
+}
+
+TEST_F(MMIClientTest, MMIClientSetGetClientEventCB)
+{
+ const char *app_id = "org.tizen.mmi-system-ux-test";
+ void *handle = nullptr, *temp_h = nullptr;
+ mmi_client *mc = nullptr;
+ int res = 0;
+
+ client_manager_init();
+ mc = client_manager_add_client(app_id);
+
+ /* TODO: create and register event cb handles such as. rpc_port_mmifw_focus_event_cb_h
+ Do we need to change static funcions to APIs? like rpc_port_mmifw_key_event_cb_create()
+ */
+ //handle = client_manager_set_client_key_cb_handle(mc, (void *)temp_h);
+ //EXPECT_NE(handle, nullptr);
+
+ //handle = client_manager_get_client_key_cb_handle(mc);
+ //EXPECT_NE(handle, nullptr);
+
+ handle = client_manager_set_client_key_cb_handle(mc, nullptr);
+ EXPECT_EQ(handle, nullptr);
+
+ handle = client_manager_get_client_key_cb_handle(mc);
+ EXPECT_EQ(handle, nullptr);
+
+ res = client_manager_remove_client(app_id);
+
+ client_manager_shutdown();
+}
+
+TEST_F(MMIClientTest, MMIClientSendClientEvent)
+{
+ const char *app_id = "org.tizen.mmi-system-ux-test";
+ void *handle = nullptr;
+ mmi_client *mc = nullptr;
+ int res = 0;
+ focus_event_arg arg;
+
+ client_manager_init();
+ mc = client_manager_add_client(app_id);
+
+ /* TODO: set focus_cb handle using client_manager_set_client_key_cb_handle()
+ error says 'Given client doesn't have focus_cb handle !'
+
+ arg.type = MMI_EVENT_FOCUS_TYPE_OUT;
+ arg.timestamp = ecore_time_get();
+ arg.focus_in = false;
+
+ res = client_manager_send_focus_event(mc, &arg);
+ client_manager_set_client_has_focus(mc, false);
+ EXPECT_EQ(res, 0);
+
+ arg.type = MMI_EVENT_FOCUS_TYPE_OUT;
+ arg.timestamp = ecore_time_get();
+ arg.focus_in = true;
+
+ res = client_manager_send_focus_event(mc, &arg);
+ client_manager_set_client_has_focus(mc, true);
+ EXPECT_EQ(res, 0);
+ */
+ res = client_manager_remove_client(app_id);
+
+ client_manager_shutdown();
+}