2 * Copyright © 2021 Samsung Electronics co., Ltd. All Rights Reserved.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
23 #include "mmi-manager-tests.h"
25 #include "mmi-manager-dbg.h"
26 #include "mmi-provider.h"
27 #include "mmi-provider-iface.h"
34 class MMIProviderTest : public ::testing::Test
37 void SetUp(void) override
42 void TearDown(void) override
48 TEST_F(MMIProviderTest, MMIProviderInitShutdown)
50 modality_providers_init();
51 EXPECT_NE(MMI_PROVIDER_EVENT_KEY, -1);
53 modality_providers_shutdown();
54 EXPECT_EQ(MMI_PROVIDER_EVENT_KEY, -1);
57 unsigned long long state_caps[MMI_STATE_TERMINATION+1] =
60 MODALITY_PROVIDER_CAP_NONE,
61 //MMI_STATE_INITIATION
62 MODALITY_PROVIDER_CAP_KEY_EVENT |
63 MODALITY_PROVIDER_CAP_VOICE_EVENT |
64 MODALITY_PROVIDER_CAP_GESTURE_EVENT,
65 //MMI_STATE_EXPLORATION
66 MODALITY_PROVIDER_CAP_KEY_EVENT |
67 MODALITY_PROVIDER_CAP_VOICE_EVENT |
68 MODALITY_PROVIDER_CAP_GESTURE_EVENT,
70 MODALITY_PROVIDER_CAP_KEY_EVENT |
71 MODALITY_PROVIDER_CAP_VOICE_EVENT |
72 MODALITY_PROVIDER_CAP_GESTURE_EVENT,
74 MODALITY_PROVIDER_CAP_KEY_EVENT |
75 MODALITY_PROVIDER_CAP_VOICE_EVENT |
76 MODALITY_PROVIDER_CAP_GESTURE_EVENT,
77 //MMI_STATE_OBSERVATION
78 MODALITY_PROVIDER_CAP_VOICE_EVENT |
79 MODALITY_PROVIDER_CAP_GESTURE_EVENT |
80 MODALITY_PROVIDER_CAP_VISION_EVENT,
81 //MMI_STATE_TERMINATION
82 MODALITY_PROVIDER_CAP_KEY_EVENT |
83 MODALITY_PROVIDER_CAP_VOICE_EVENT |
84 MODALITY_PROVIDER_CAP_GESTURE_EVENT |
85 MODALITY_PROVIDER_CAP_VISION_EVENT
88 TEST_F(MMIProviderTest, MMIProviderSetOpModeOnCaps)
90 modality_providers_init();
91 EXPECT_NE(MMI_PROVIDER_EVENT_KEY, -1);
94 unsigned long long caps = state_caps[MMI_STATE_INITIATION];
95 r = mmi_provider_set_op_mode_on_caps(caps, MODALITY_PROVIDER_MODE_PROPAGATE_EVENT);
98 r = mmi_provider_set_op_mode_on_caps(caps, MODALITY_PROVIDER_MODE_NONE);
101 modality_providers_shutdown();
102 EXPECT_EQ(MMI_PROVIDER_EVENT_KEY, -1);
105 TEST_F(MMIProviderTest, MMIProviderSetOpModeOnCapsFail)
107 modality_providers_init();
108 EXPECT_NE(MMI_PROVIDER_EVENT_KEY, -1);
111 r = mmi_provider_set_op_mode_on_caps(MODALITY_PROVIDER_CAP_NONE, MODALITY_PROVIDER_MODE_PROPAGATE_EVENT);
114 modality_providers_shutdown();
115 EXPECT_EQ(MMI_PROVIDER_EVENT_KEY, -1);
118 class MMIProviderIfaceTest : public ::testing::Test
121 void SetUp(void) override
126 void TearDown(void) override
132 mmi_provider_handle *
133 _provider_load_module(const char *provider_name)
135 mmi_provider_handle *provider = (mmi_provider_handle *)calloc(1, sizeof(mmi_provider_handle));
139 LOGE("Failed to alloc provider handle");
143 void *provider_info = NULL;
144 mmi_provider_module *mmi_provider_module_info = NULL;
145 mmi_provider_module_data *provider_module_data = NULL;
147 provider_info = dlopen(provider_name, RTLD_LAZY);
151 LOGE("Failed to dlopen(error :%s, path :%s)!\n", dlerror(), provider_name);
155 mmi_provider_module_info = (mmi_provider_module *)dlsym(provider_info, "mmi_provider_module_info");
157 if(!mmi_provider_module_info)
159 LOGE("Module(%s) dosen't have mmi_provider_module_info \n", provider_name);
163 if(!mmi_provider_module_info->provider_init || !mmi_provider_module_info->provider_deinit)
165 LOGE("Module(%s) doesn't have init/deinit function\n", provider_name);
169 provider_module_data = mmi_provider_module_info->provider_init();
171 if(!provider_module_data)
173 LOGE("Failed to init module (%s) !\n", provider_name);
177 LOGI("moudle info name = %s\n", mmi_provider_module_info->name);
178 provider->provider_info = provider_info;
179 provider->module_info = mmi_provider_module_info;
180 provider->module_data = provider_module_data;
181 provider->capabilities = mmi_provider_module_info->capabilities;
182 provider->op_mode = provider_module_data->get_mode();
187 if(mmi_provider_module_info && mmi_provider_module_info->provider_deinit)
188 mmi_provider_module_info->provider_deinit(provider_module_data);
191 dlclose(provider_info);
198 TEST_F(MMIProviderIfaceTest, MMIProviderRegisterCaps)
202 mmi_provider_handle *provider = _provider_load_module("/lib/provider/libmmi_modality_keyboard.so");
203 EXPECT_EQ(provider->capabilities, MODALITY_PROVIDER_CAP_KEY_EVENT);
204 EXPECT_NE(provider, nullptr);
206 r = mmi_provider_register_caps(provider, MODALITY_PROVIDER_CAP_VOICE_EVENT);
208 EXPECT_EQ(provider->capabilities, (MODALITY_PROVIDER_CAP_KEY_EVENT | MODALITY_PROVIDER_CAP_VOICE_EVENT));
211 TEST_F(MMIProviderIfaceTest, MMIProviderRegisterCapsFail)
215 mmi_provider_handle *provider = _provider_load_module("/lib/provider/libmmi_modality_keyboard.so");
216 EXPECT_EQ(provider->capabilities, MODALITY_PROVIDER_CAP_KEY_EVENT);
217 EXPECT_NE(provider, nullptr);
219 r = mmi_provider_register_caps(NULL, MODALITY_PROVIDER_CAP_VOICE_EVENT);
221 r = mmi_provider_register_caps(provider, MODALITY_PROVIDER_CAP_NONE);
223 EXPECT_EQ(provider->capabilities, MODALITY_PROVIDER_CAP_KEY_EVENT);