mmi-provider-tests : create mmi-provider-tests.cpp and add this in meson.build of... 21/264221/1
authordyamy-lee <dyamy.lee@samsung.com>
Tue, 14 Sep 2021 09:51:35 +0000 (18:51 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Tue, 14 Sep 2021 12:14:56 +0000 (21:14 +0900)
mmi-provider-tests has tc about mmi-provider and mmi-provider-iface api

Change-Id: I7c983831acdfe7dfb49a74aa1cef7a2adf4a308b

tests/meson.build
tests/mmi-provider-tests.cpp [new file with mode: 0644]

index 75ae57f..d907bc3 100644 (file)
@@ -1,5 +1,6 @@
 mmi_manager_tests_srcs = [
-       'mmi-manager-tests.cpp'
+       'mmi-manager-tests.cpp',
+       'mmi-provider-tests.cpp',
        ]
 
 gmock_dep = dependency('gmock', method : 'pkg-config')
diff --git a/tests/mmi-provider-tests.cpp b/tests/mmi-provider-tests.cpp
new file mode 100644 (file)
index 0000000..4f3f44d
--- /dev/null
@@ -0,0 +1,224 @@
+/*
+* 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-manager-tests.h"
+extern "C" {
+#include "mmi-manager-dbg.h"
+#include "mmi-provider.h"
+#include "mmi-provider-iface.h"
+}
+
+#include <Ecore.h>
+#include <dirent.h>
+#include <dlfcn.h>
+
+class MMIProviderTest : public ::testing::Test
+{
+public:
+       void SetUp(void) override
+       {
+               ecore_init();
+       }
+
+       void TearDown(void) override
+       {
+               ecore_shutdown();
+       }
+};
+
+TEST_F(MMIProviderTest, MMIProviderInitShutdown)
+{
+       modality_providers_init();
+       EXPECT_NE(MMI_PROVIDER_EVENT_KEY, -1);
+
+       modality_providers_shutdown();
+       EXPECT_EQ(MMI_PROVIDER_EVENT_KEY, -1);
+}
+
+unsigned long long state_caps[MMI_STATE_TERMINATION+1] =
+{
+       //MMI_STATE_NONE
+       MODALITY_PROVIDER_CAP_NONE,
+       //MMI_STATE_INITIATION
+       MODALITY_PROVIDER_CAP_KEY_EVENT |
+       MODALITY_PROVIDER_CAP_VOICE_EVENT |
+       MODALITY_PROVIDER_CAP_GESTURE_EVENT,
+       //MMI_STATE_EXPLORATION
+       MODALITY_PROVIDER_CAP_KEY_EVENT |
+       MODALITY_PROVIDER_CAP_VOICE_EVENT |
+       MODALITY_PROVIDER_CAP_GESTURE_EVENT,
+       //MMI_STATE_EXECUTION
+       MODALITY_PROVIDER_CAP_KEY_EVENT |
+       MODALITY_PROVIDER_CAP_VOICE_EVENT |
+       MODALITY_PROVIDER_CAP_GESTURE_EVENT,
+       //MMI_STATE_FEEDBACK
+       MODALITY_PROVIDER_CAP_KEY_EVENT |
+       MODALITY_PROVIDER_CAP_VOICE_EVENT |
+       MODALITY_PROVIDER_CAP_GESTURE_EVENT,
+       //MMI_STATE_OBSERVATION
+       MODALITY_PROVIDER_CAP_VOICE_EVENT |
+       MODALITY_PROVIDER_CAP_GESTURE_EVENT |
+       MODALITY_PROVIDER_CAP_VISION_EVENT,
+       //MMI_STATE_TERMINATION
+       MODALITY_PROVIDER_CAP_KEY_EVENT |
+       MODALITY_PROVIDER_CAP_VOICE_EVENT |
+       MODALITY_PROVIDER_CAP_GESTURE_EVENT |
+       MODALITY_PROVIDER_CAP_VISION_EVENT
+};
+
+TEST_F(MMIProviderTest, MMIProviderSetOpModeOnCaps)
+{
+       modality_providers_init();
+       EXPECT_NE(MMI_PROVIDER_EVENT_KEY, -1);
+
+       int r = -1;
+       unsigned long long caps = state_caps[MMI_STATE_INITIATION];
+       r = mmi_provider_set_op_mode_on_caps(caps, MODALITY_PROVIDER_MODE_PROPAGATE_EVENT);
+       EXPECT_EQ(r, 0);
+
+       r = mmi_provider_set_op_mode_on_caps(caps, MODALITY_PROVIDER_MODE_NONE);
+       EXPECT_EQ(r, 0);
+
+       modality_providers_shutdown();
+       EXPECT_EQ(MMI_PROVIDER_EVENT_KEY, -1);
+}
+
+TEST_F(MMIProviderTest, MMIProviderSetOpModeOnCapsFail)
+{
+       modality_providers_init();
+       EXPECT_NE(MMI_PROVIDER_EVENT_KEY, -1);
+
+       int r = -1;
+       r = mmi_provider_set_op_mode_on_caps(MODALITY_PROVIDER_CAP_NONE, MODALITY_PROVIDER_MODE_PROPAGATE_EVENT);
+       EXPECT_EQ(r, -1);
+
+       modality_providers_shutdown();
+       EXPECT_EQ(MMI_PROVIDER_EVENT_KEY, -1);
+}
+
+class MMIProviderIfaceTest : public ::testing::Test
+{
+public:
+       void SetUp(void) override
+       {
+               ecore_init();
+       }
+
+       void TearDown(void) override
+       {
+               ecore_shutdown();
+       }
+};
+
+mmi_provider_handle *
+_provider_load_module(const char *provider_name)
+{
+       mmi_provider_handle *provider = (mmi_provider_handle *)calloc(1, sizeof(mmi_provider_handle));
+
+       if (!provider)
+       {
+               LOGE("Failed to alloc provider handle");
+               return NULL;
+       }
+
+       void *provider_info = NULL;
+       mmi_provider_module *mmi_provider_module_info = NULL;
+       mmi_provider_module_data *provider_module_data = NULL;
+
+       provider_info = dlopen(provider_name, RTLD_LAZY);
+
+       if(!provider_info)
+       {
+               LOGE("Failed to dlopen(error :%s, path :%s)!\n", dlerror(), provider_name);
+               goto err;
+       }
+
+       mmi_provider_module_info = (mmi_provider_module *)dlsym(provider_info, "mmi_provider_module_info");
+
+       if(!mmi_provider_module_info)
+       {
+               LOGE("Module(%s) dosen't have mmi_provider_module_info \n", provider_name);
+               goto err;
+       }
+
+       if(!mmi_provider_module_info->provider_init || !mmi_provider_module_info->provider_deinit)
+       {
+               LOGE("Module(%s) doesn't have init/deinit function\n", provider_name);
+               goto err;
+       }
+
+       provider_module_data = mmi_provider_module_info->provider_init();
+
+       if(!provider_module_data)
+       {
+               LOGE("Failed to init module (%s) !\n", provider_name);
+               goto err;
+       }
+
+       LOGI("moudle info name = %s\n", mmi_provider_module_info->name);
+       provider->provider_info = provider_info;
+       provider->module_info = mmi_provider_module_info;
+       provider->module_data = provider_module_data;
+       provider->capabilities = mmi_provider_module_info->capabilities;
+       provider->op_mode = provider_module_data->get_mode();
+
+       return provider;
+
+err:
+       if(mmi_provider_module_info && mmi_provider_module_info->provider_deinit)
+               mmi_provider_module_info->provider_deinit(provider_module_data);
+
+       if(provider_info)
+               dlclose(provider_info);
+
+       if(provider)
+               free(provider);
+       return NULL;
+}
+
+TEST_F(MMIProviderIfaceTest, MMIProviderRegisterCaps)
+{
+       int r = -1;
+
+       mmi_provider_handle *provider = _provider_load_module("/lib/provider/libmmi_modality_keyboard.so");
+       EXPECT_EQ(provider->capabilities, MODALITY_PROVIDER_CAP_KEY_EVENT);
+       EXPECT_NE(provider, nullptr);
+
+       r = mmi_provider_register_caps(provider, MODALITY_PROVIDER_CAP_VOICE_EVENT);
+       EXPECT_EQ(r, 0);
+       EXPECT_EQ(provider->capabilities, (MODALITY_PROVIDER_CAP_KEY_EVENT | MODALITY_PROVIDER_CAP_VOICE_EVENT));
+}
+
+TEST_F(MMIProviderIfaceTest, MMIProviderRegisterCapsFail)
+{
+       int r = -1;
+
+       mmi_provider_handle *provider = _provider_load_module("/lib/provider/libmmi_modality_keyboard.so");
+       EXPECT_EQ(provider->capabilities, MODALITY_PROVIDER_CAP_KEY_EVENT);
+       EXPECT_NE(provider, nullptr);
+
+       r = mmi_provider_register_caps(NULL, MODALITY_PROVIDER_CAP_VOICE_EVENT);
+       EXPECT_EQ(r, -1);
+       r = mmi_provider_register_caps(provider, MODALITY_PROVIDER_CAP_NONE);
+       EXPECT_EQ(r, -1);
+       EXPECT_EQ(provider->capabilities, MODALITY_PROVIDER_CAP_KEY_EVENT);
+}