mmi-provider-tests : create mmi-provider-tests.cpp and add this in meson.build of...
[platform/core/uifw/mmi-manager.git] / tests / mmi-provider-tests.cpp
1 /*
2 * Copyright © 2021 Samsung Electronics co., Ltd. All Rights Reserved.
3 *
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:
10 *
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
13 * Software.
14 *
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.
22 */
23 #include "mmi-manager-tests.h"
24 extern "C" {
25 #include "mmi-manager-dbg.h"
26 #include "mmi-provider.h"
27 #include "mmi-provider-iface.h"
28 }
29
30 #include <Ecore.h>
31 #include <dirent.h>
32 #include <dlfcn.h>
33
34 class MMIProviderTest : public ::testing::Test
35 {
36 public:
37         void SetUp(void) override
38         {
39                 ecore_init();
40         }
41
42         void TearDown(void) override
43         {
44                 ecore_shutdown();
45         }
46 };
47
48 TEST_F(MMIProviderTest, MMIProviderInitShutdown)
49 {
50         modality_providers_init();
51         EXPECT_NE(MMI_PROVIDER_EVENT_KEY, -1);
52
53         modality_providers_shutdown();
54         EXPECT_EQ(MMI_PROVIDER_EVENT_KEY, -1);
55 }
56
57 unsigned long long state_caps[MMI_STATE_TERMINATION+1] =
58 {
59         //MMI_STATE_NONE
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,
69         //MMI_STATE_EXECUTION
70         MODALITY_PROVIDER_CAP_KEY_EVENT |
71         MODALITY_PROVIDER_CAP_VOICE_EVENT |
72         MODALITY_PROVIDER_CAP_GESTURE_EVENT,
73         //MMI_STATE_FEEDBACK
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
86 };
87
88 TEST_F(MMIProviderTest, MMIProviderSetOpModeOnCaps)
89 {
90         modality_providers_init();
91         EXPECT_NE(MMI_PROVIDER_EVENT_KEY, -1);
92
93         int r = -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);
96         EXPECT_EQ(r, 0);
97
98         r = mmi_provider_set_op_mode_on_caps(caps, MODALITY_PROVIDER_MODE_NONE);
99         EXPECT_EQ(r, 0);
100
101         modality_providers_shutdown();
102         EXPECT_EQ(MMI_PROVIDER_EVENT_KEY, -1);
103 }
104
105 TEST_F(MMIProviderTest, MMIProviderSetOpModeOnCapsFail)
106 {
107         modality_providers_init();
108         EXPECT_NE(MMI_PROVIDER_EVENT_KEY, -1);
109
110         int r = -1;
111         r = mmi_provider_set_op_mode_on_caps(MODALITY_PROVIDER_CAP_NONE, MODALITY_PROVIDER_MODE_PROPAGATE_EVENT);
112         EXPECT_EQ(r, -1);
113
114         modality_providers_shutdown();
115         EXPECT_EQ(MMI_PROVIDER_EVENT_KEY, -1);
116 }
117
118 class MMIProviderIfaceTest : public ::testing::Test
119 {
120 public:
121         void SetUp(void) override
122         {
123                 ecore_init();
124         }
125
126         void TearDown(void) override
127         {
128                 ecore_shutdown();
129         }
130 };
131
132 mmi_provider_handle *
133 _provider_load_module(const char *provider_name)
134 {
135         mmi_provider_handle *provider = (mmi_provider_handle *)calloc(1, sizeof(mmi_provider_handle));
136
137         if (!provider)
138         {
139                 LOGE("Failed to alloc provider handle");
140                 return NULL;
141         }
142
143         void *provider_info = NULL;
144         mmi_provider_module *mmi_provider_module_info = NULL;
145         mmi_provider_module_data *provider_module_data = NULL;
146
147         provider_info = dlopen(provider_name, RTLD_LAZY);
148
149         if(!provider_info)
150         {
151                 LOGE("Failed to dlopen(error :%s, path :%s)!\n", dlerror(), provider_name);
152                 goto err;
153         }
154
155         mmi_provider_module_info = (mmi_provider_module *)dlsym(provider_info, "mmi_provider_module_info");
156
157         if(!mmi_provider_module_info)
158         {
159                 LOGE("Module(%s) dosen't have mmi_provider_module_info \n", provider_name);
160                 goto err;
161         }
162
163         if(!mmi_provider_module_info->provider_init || !mmi_provider_module_info->provider_deinit)
164         {
165                 LOGE("Module(%s) doesn't have init/deinit function\n", provider_name);
166                 goto err;
167         }
168
169         provider_module_data = mmi_provider_module_info->provider_init();
170
171         if(!provider_module_data)
172         {
173                 LOGE("Failed to init module (%s) !\n", provider_name);
174                 goto err;
175         }
176
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();
183
184         return provider;
185
186 err:
187         if(mmi_provider_module_info && mmi_provider_module_info->provider_deinit)
188                 mmi_provider_module_info->provider_deinit(provider_module_data);
189
190         if(provider_info)
191                 dlclose(provider_info);
192
193         if(provider)
194                 free(provider);
195         return NULL;
196 }
197
198 TEST_F(MMIProviderIfaceTest, MMIProviderRegisterCaps)
199 {
200         int r = -1;
201
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);
205
206         r = mmi_provider_register_caps(provider, MODALITY_PROVIDER_CAP_VOICE_EVENT);
207         EXPECT_EQ(r, 0);
208         EXPECT_EQ(provider->capabilities, (MODALITY_PROVIDER_CAP_KEY_EVENT | MODALITY_PROVIDER_CAP_VOICE_EVENT));
209 }
210
211 TEST_F(MMIProviderIfaceTest, MMIProviderRegisterCapsFail)
212 {
213         int r = -1;
214
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);
218
219         r = mmi_provider_register_caps(NULL, MODALITY_PROVIDER_CAP_VOICE_EVENT);
220         EXPECT_EQ(r, -1);
221         r = mmi_provider_register_caps(provider, MODALITY_PROVIDER_CAP_NONE);
222         EXPECT_EQ(r, -1);
223         EXPECT_EQ(provider->capabilities, MODALITY_PROVIDER_CAP_KEY_EVENT);
224 }