Support compose variable for key event
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-KeyEvent.cpp
1 /*
2  * Copyright (c) 2017 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include <iostream>
19
20 #include <stdlib.h>
21 #include <dali/public-api/dali-core.h>
22 #include <dali/integration-api/events/key-event-integ.h>
23
24 #include <dali-test-suite-utils.h>
25
26 using namespace Dali;
27
28 void utc_dali_key_event_startup(void)
29 {
30   test_return_value = TET_UNDEF;
31 }
32
33 void utc_dali_key_event_cleanup(void)
34 {
35   test_return_value = TET_PASS;
36 }
37
38 namespace
39 {
40
41 // Key Event Test references
42 const static int SHIFT_MODIFIER  = 0x1;
43 const static int CTRL_MODIFIER  = 0x2;
44 const static int ALT_MODIFIER  = 0x4;
45 const static int SHIFT_AND_CTRL_MODIFIER  = SHIFT_MODIFIER | CTRL_MODIFIER;
46 const static int SHIFT_AND_ALT_MODIFIER  = SHIFT_MODIFIER | ALT_MODIFIER;
47 const static int CTRL_AND_ALT_MODIFIER  = CTRL_MODIFIER | ALT_MODIFIER;
48
49 const static char* TEST_STRING_1 = "alpha";
50
51
52 // Stores data that is populated in the callback and will be read by the TET cases
53 struct SignalData
54 {
55   SignalData()
56   : functorCalled(false)
57   {}
58
59   void Reset()
60   {
61     functorCalled = false;
62
63     receivedKeyEvent.keyModifier = 0;
64     receivedKeyEvent.keyPressedName.clear();
65     receivedKeyEvent.keyPressed.clear();
66
67     keyedActor.Reset();
68   }
69
70   bool functorCalled;
71   KeyEvent receivedKeyEvent;
72   Actor keyedActor;
73 };
74
75 // Functor that sets the data when called
76 struct KeyEventReceivedFunctor
77 {
78   KeyEventReceivedFunctor( SignalData& data ) : signalData( data ) { }
79
80   bool operator()( Actor actor, const KeyEvent& keyEvent )
81   {
82     signalData.functorCalled = true;
83     signalData.receivedKeyEvent = keyEvent;
84     signalData.keyedActor = actor;
85
86     return true;
87   }
88
89   SignalData& signalData;
90 };
91
92 } // anon namespace
93
94 int UtcDaliKeyEventConstructor(void)
95 {
96   TestApplication application; // Reset all test adapter return codes
97
98   KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0, KeyEvent::Down);  // set name to test, key string to i and modifier to shift
99
100   DALI_TEST_EQUALS(TEST_STRING_1, event.keyPressedName, TEST_LOCATION); // check key name
101   DALI_TEST_EQUALS("i", event.keyPressed, TEST_LOCATION); // check key string
102   DALI_TEST_EQUALS(99, event.keyCode, TEST_LOCATION); // check keyCode
103   DALI_TEST_EQUALS(SHIFT_MODIFIER, event.keyModifier, TEST_LOCATION); // check modifier
104   DALI_TEST_EQUALS(KeyEvent::Down, event.state, TEST_LOCATION); // check state
105   END_TEST;
106 }
107
108 int UtcDaliKeyEventAssignment(void)
109 {
110   // Test Assignment operator
111   KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0, KeyEvent::Down);  // set name to test, key string to i and modifier to shift
112
113   DALI_TEST_EQUALS(TEST_STRING_1, event.keyPressedName, TEST_LOCATION); // check key name
114   DALI_TEST_EQUALS("i", event.keyPressed, TEST_LOCATION); // check key string
115   DALI_TEST_EQUALS(99, event.keyCode, TEST_LOCATION); // check keyCode
116   DALI_TEST_EQUALS(SHIFT_MODIFIER, event.keyModifier, TEST_LOCATION); // check modifier
117   DALI_TEST_EQUALS(KeyEvent::Down, event.state, TEST_LOCATION); // check state
118
119   KeyEvent event2(TEST_STRING_1,"j", 88, CTRL_MODIFIER, 0, KeyEvent::Up);  // set name to test, key string to i and modifier to shift
120
121   DALI_TEST_EQUALS(TEST_STRING_1, event2.keyPressedName, TEST_LOCATION); // check key name
122   DALI_TEST_EQUALS("j", event2.keyPressed, TEST_LOCATION); // check key string
123   DALI_TEST_EQUALS(88, event2.keyCode, TEST_LOCATION); // check keyCode
124   DALI_TEST_EQUALS(CTRL_MODIFIER, event2.keyModifier, TEST_LOCATION); // check modifier
125   DALI_TEST_EQUALS(KeyEvent::Up, event2.state, TEST_LOCATION); // check state
126
127   event = event2;
128
129   DALI_TEST_EQUALS(TEST_STRING_1, event.keyPressedName, TEST_LOCATION); // check key name
130   DALI_TEST_EQUALS("j", event.keyPressed, TEST_LOCATION); // check key string
131   DALI_TEST_EQUALS(88, event.keyCode, TEST_LOCATION); // check keyCode
132   DALI_TEST_EQUALS(CTRL_MODIFIER, event.keyModifier, TEST_LOCATION); // check modifier
133   DALI_TEST_EQUALS(KeyEvent::Up, event.state, TEST_LOCATION); // check state
134
135   END_TEST;
136 }
137
138 int UtcDaliKeyEventCopy(void)
139 {
140   // Test Assignment operator
141   KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0, KeyEvent::Down);  // set name to test, key string to i and modifier to shift
142
143   DALI_TEST_EQUALS(TEST_STRING_1, event.keyPressedName, TEST_LOCATION); // check key name
144   DALI_TEST_EQUALS("i", event.keyPressed, TEST_LOCATION); // check key string
145   DALI_TEST_EQUALS(99, event.keyCode, TEST_LOCATION); // check keyCode
146   DALI_TEST_EQUALS(SHIFT_MODIFIER, event.keyModifier, TEST_LOCATION); // check modifier
147   DALI_TEST_EQUALS(KeyEvent::Down, event.state, TEST_LOCATION); // check state
148
149   KeyEvent event2( event );
150
151   DALI_TEST_EQUALS(TEST_STRING_1, event2.keyPressedName, TEST_LOCATION); // check key name
152   DALI_TEST_EQUALS("i", event2.keyPressed, TEST_LOCATION); // check key string
153   DALI_TEST_EQUALS(99, event2.keyCode, TEST_LOCATION); // check keyCode
154   DALI_TEST_EQUALS(SHIFT_MODIFIER, event2.keyModifier, TEST_LOCATION); // check modifier
155   DALI_TEST_EQUALS(KeyEvent::Down, event2.state, TEST_LOCATION); // check state
156
157   END_TEST;
158 }
159
160 // Positive test case for a method
161 int UtcDaliKeyEventIsShiftModifier(void)
162 {
163   TestApplication application; // Reset all test adapter return codes
164
165   KeyEvent event;
166   DALI_TEST_EQUALS(0, event.keyModifier, TEST_LOCATION);
167
168   event.keyModifier = SHIFT_MODIFIER; // Set to Shift Modifier
169
170   DALI_TEST_EQUALS(SHIFT_MODIFIER, event.keyModifier, TEST_LOCATION); // check able to set
171
172   DALI_TEST_EQUALS(true, event.IsShiftModifier(), TEST_LOCATION); // check IsShiftModifier
173
174   END_TEST;
175 }
176
177 // Positive test case for a method
178 int UtcDaliKeyEventIsCtrlModifier(void)
179 {
180   TestApplication application; // Reset all test adapter return codes
181
182   KeyEvent event;
183   DALI_TEST_EQUALS(0, event.keyModifier, TEST_LOCATION);
184
185   event.keyModifier = CTRL_MODIFIER; // Set to Ctrl Modifier
186
187   DALI_TEST_EQUALS(CTRL_MODIFIER, event.keyModifier, TEST_LOCATION); // check able to set
188
189   DALI_TEST_EQUALS(true, event.IsCtrlModifier(), TEST_LOCATION); // check IsCtrlModifier
190   END_TEST;
191 }
192
193 // Positive test case for a method
194 int UtcDaliKeyEventIsAltModifier(void)
195 {
196   TestApplication application; // Reset all test adapter return codes
197
198   KeyEvent event;
199   DALI_TEST_EQUALS(0, event.keyModifier, TEST_LOCATION);
200
201   event.keyModifier = ALT_MODIFIER; // Set to Alt Modifier
202
203   DALI_TEST_EQUALS(ALT_MODIFIER, event.keyModifier, TEST_LOCATION); // check able to set
204
205   DALI_TEST_EQUALS(true, event.IsAltModifier(), TEST_LOCATION);  // IsAltModifier
206   END_TEST;
207 }
208
209 // Positive fail test case for a method
210 int UtcDaliKeyEventIsNotShiftModifier(void)
211 {
212   TestApplication application; // Reset all test adapter return codes
213
214   KeyEvent event("i","i", 0, CTRL_MODIFIER, 0, KeyEvent::Down);
215
216   DALI_TEST_EQUALS(CTRL_MODIFIER, event.keyModifier, TEST_LOCATION);  // check different modifier used
217
218   DALI_TEST_EQUALS(false, event.IsShiftModifier(), TEST_LOCATION);
219   END_TEST;
220 }
221
222 // Positive fail test case for a method
223 int UtcDaliKeyEventIsNotCtrlModifier(void)
224 {
225   TestApplication application; // Reset all test adapter return codes
226
227   KeyEvent event("i","i", 0, ALT_MODIFIER, 0, KeyEvent::Up);
228
229   DALI_TEST_EQUALS(ALT_MODIFIER, event.keyModifier, TEST_LOCATION);  // check different modifier used
230
231   DALI_TEST_EQUALS(false, event.IsCtrlModifier(), TEST_LOCATION);
232   END_TEST;
233 }
234
235 // Positive fail test case for a method
236 int UtcDaliKeyEventIsNotAltModifier(void)
237 {
238   TestApplication application; // Reset all test adapter return codes
239
240   KeyEvent event("i","i", 0, SHIFT_MODIFIER, 0, KeyEvent::Up);
241
242   DALI_TEST_EQUALS(SHIFT_MODIFIER, event.keyModifier, TEST_LOCATION);  // check different modifier used
243
244   DALI_TEST_EQUALS(false, event.IsAltModifier(), TEST_LOCATION);
245   END_TEST;
246 }
247
248 // Positive test case for a method
249 int UtcDaliKeyEventANDModifer(void)
250 {
251   TestApplication application; // Reset all test adapter return codes
252
253   KeyEvent event("i","i", 0, SHIFT_AND_CTRL_MODIFIER, 0, KeyEvent::Down);
254   DALI_TEST_EQUALS(true, (bool)(event.IsCtrlModifier() & event.IsShiftModifier()), TEST_LOCATION);
255
256   event.keyModifier = SHIFT_MODIFIER;
257
258   DALI_TEST_EQUALS(false, (bool)(event.IsCtrlModifier() & event.IsShiftModifier()), TEST_LOCATION);
259   END_TEST;
260 }
261
262 // Positive test case for a method
263 int UtcDaliKeyEventORModifer(void)
264 {
265   TestApplication application; // Reset all test adapter return codes
266
267   KeyEvent event("i","i", 0, SHIFT_AND_CTRL_MODIFIER, 0, KeyEvent::Down);
268   DALI_TEST_EQUALS(true, (bool)(event.IsCtrlModifier() | event.IsAltModifier()), TEST_LOCATION);
269
270   event.keyModifier = SHIFT_MODIFIER;
271
272   DALI_TEST_EQUALS(false, (bool)(event.IsCtrlModifier() & event.IsAltModifier()), TEST_LOCATION);
273   END_TEST;
274 }
275
276 // Positive test case for a method
277 int UtcDaliKeyEventState(void)
278 {
279   TestApplication application; // Reset all test adapter return codes
280
281   KeyEvent event("i","i", 0, SHIFT_AND_CTRL_MODIFIER, 0, KeyEvent::Down);
282   DALI_TEST_EQUALS(true, (bool)(event.IsCtrlModifier() | event.IsAltModifier()), TEST_LOCATION);
283
284   event.keyModifier = SHIFT_MODIFIER;
285
286   DALI_TEST_EQUALS(false, (bool)(event.IsCtrlModifier() & event.IsAltModifier()), TEST_LOCATION);
287   END_TEST;
288 }
289
290 int UtcDaliIntegrationKeyEvent(void)
291 {
292   TestApplication application;
293
294   {
295     Integration::KeyEvent keyEvent;
296     DALI_TEST_EQUALS( keyEvent.type, Integration::Event::Key, TEST_LOCATION );
297     DALI_TEST_CHECK( keyEvent.keyName == std::string() );
298     DALI_TEST_CHECK( keyEvent.keyString == std::string() );
299     DALI_TEST_EQUALS( keyEvent.keyCode, -1, TEST_LOCATION );
300     DALI_TEST_EQUALS( keyEvent.keyModifier, 0, TEST_LOCATION );
301     DALI_TEST_EQUALS( keyEvent.time, 0lu, TEST_LOCATION );
302     DALI_TEST_EQUALS( keyEvent.state, Integration::KeyEvent::Down, TEST_LOCATION);
303   }
304
305   {
306     const std::string keyName("keyName");
307     const std::string keyString("keyString");
308     const int keyCode(333);
309     const int keyModifier(312);
310     const unsigned long timeStamp(132);
311     const Integration::KeyEvent::State keyState(Integration::KeyEvent::Up);
312     const std::string compose("compose");
313     const std::string deviceName("hwKeyboard");
314     const Device::Class::Type deviceClass = Device::Class::KEYBOARD;
315     const Device::Subclass::Type deviceSubclass = Device::Subclass::NONE;
316
317     Integration::KeyEvent keyEvent(keyName, keyString, keyCode, keyModifier, timeStamp, keyState, compose, deviceName, deviceClass, deviceSubclass );
318     DALI_TEST_EQUALS( keyEvent.type, Integration::Event::Key, TEST_LOCATION );
319     DALI_TEST_CHECK( keyEvent.keyName == keyName );
320     DALI_TEST_CHECK( keyEvent.keyString == keyString );
321     DALI_TEST_EQUALS( keyEvent.keyCode, keyCode, TEST_LOCATION );
322     DALI_TEST_EQUALS( keyEvent.keyModifier, keyModifier, TEST_LOCATION );
323     DALI_TEST_EQUALS( keyEvent.time, timeStamp, TEST_LOCATION );
324     DALI_TEST_EQUALS( keyEvent.state, keyState, TEST_LOCATION);
325     DALI_TEST_EQUALS( keyEvent.compose, compose, TEST_LOCATION);
326     DALI_TEST_EQUALS( keyEvent.deviceName, deviceName, TEST_LOCATION);
327     DALI_TEST_EQUALS( keyEvent.deviceClass, deviceClass, TEST_LOCATION);
328     DALI_TEST_EQUALS( keyEvent.deviceSubclass, deviceSubclass, TEST_LOCATION);
329   }
330   END_TEST;
331 }
332
333 int UtcDaliIntegrationKeyEventConvertor(void)
334 {
335   TestApplication application;
336
337   KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0lu, KeyEvent::Down);  // set name to test, key string to i and modifier to shift
338
339   Integration::KeyEvent keyEvent( event );
340
341   DALI_TEST_EQUALS( keyEvent.type, Integration::Event::Key, TEST_LOCATION );
342   DALI_TEST_CHECK( keyEvent.keyName == TEST_STRING_1 );
343   DALI_TEST_CHECK( keyEvent.keyString == "i" );
344   DALI_TEST_EQUALS( keyEvent.keyCode, 99, TEST_LOCATION );
345   DALI_TEST_EQUALS( keyEvent.keyModifier, SHIFT_MODIFIER, TEST_LOCATION );
346   DALI_TEST_EQUALS( keyEvent.time, 0lu, TEST_LOCATION );
347   DALI_TEST_EQUALS( keyEvent.state, Integration::KeyEvent::Down, TEST_LOCATION);
348   DALI_TEST_EQUALS( keyEvent.compose, "", TEST_LOCATION);
349   DALI_TEST_EQUALS( keyEvent.deviceName, "", TEST_LOCATION);
350   DALI_TEST_EQUALS( keyEvent.deviceClass, Device::Class::NONE, TEST_LOCATION);
351   DALI_TEST_EQUALS( keyEvent.deviceSubclass, Device::Subclass::NONE, TEST_LOCATION);
352
353   END_TEST;
354 }
355
356 int UtcDaliKeyEventSetCompose(void)
357 {
358   TestApplication application;
359
360   KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0lu, KeyEvent::Down);
361
362   DALI_TEST_EQUALS( event.GetCompose(), "", TEST_LOCATION);
363
364   END_TEST;
365 }
366
367 int UtcDaliKeyEventSetDeviceName(void)
368 {
369   TestApplication application;
370
371   KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0lu, KeyEvent::Down);
372
373   DALI_TEST_EQUALS( event.GetDeviceName(), "", TEST_LOCATION);
374
375   END_TEST;
376 }
377
378 int UtcDaliKeyEventSetDeviceClass(void)
379 {
380   TestApplication application;
381
382   KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0lu, KeyEvent::Down);
383
384   DALI_TEST_EQUALS( event.GetDeviceClass(), Device::Class::NONE, TEST_LOCATION);
385
386   END_TEST;
387 }
388
389 int UtcDaliKeyEventSetDeviceSubclass(void)
390 {
391   TestApplication application;
392
393   KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0lu, KeyEvent::Down);
394
395   DALI_TEST_EQUALS( event.GetDeviceSubclass(), Device::Subclass::NONE, TEST_LOCATION);
396
397   END_TEST;
398 }