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