2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
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>
25 #include <dali-test-suite-utils.h>
29 void utc_dali_key_event_startup(void)
31 test_return_value = TET_UNDEF;
34 void utc_dali_key_event_cleanup(void)
36 test_return_value = TET_PASS;
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;
50 const static char* TEST_STRING_1 = "alpha";
53 // Stores data that is populated in the callback and will be read by the TET cases
57 : functorCalled(false)
62 functorCalled = false;
64 receivedKeyEvent.keyModifier = 0;
65 receivedKeyEvent.keyPressedName.clear();
66 receivedKeyEvent.keyPressed.clear();
72 KeyEvent receivedKeyEvent;
76 // Functor that sets the data when called
77 struct KeyEventReceivedFunctor
79 KeyEventReceivedFunctor( SignalData& data ) : signalData( data ) { }
81 bool operator()( Actor actor, const KeyEvent& keyEvent )
83 signalData.functorCalled = true;
84 signalData.receivedKeyEvent = keyEvent;
85 signalData.keyedActor = actor;
90 SignalData& signalData;
95 int UtcDaliKeyEventConstructor(void)
97 TestApplication application; // Reset all test adapter return codes
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
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
109 int UtcDaliKeyEventAssignment(void)
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
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
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
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
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
139 int UtcDaliKeyEventCopy(void)
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
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
150 KeyEvent event2( event );
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
161 // Positive test case for a method
162 int UtcDaliKeyEventIsShiftModifier(void)
164 TestApplication application; // Reset all test adapter return codes
167 DALI_TEST_EQUALS(0, event.keyModifier, TEST_LOCATION);
169 event.keyModifier = SHIFT_MODIFIER; // Set to Shift Modifier
171 DALI_TEST_EQUALS(SHIFT_MODIFIER, event.keyModifier, TEST_LOCATION); // check able to set
173 DALI_TEST_EQUALS(true, event.IsShiftModifier(), TEST_LOCATION); // check IsShiftModifier
178 // Positive test case for a method
179 int UtcDaliKeyEventIsCtrlModifier(void)
181 TestApplication application; // Reset all test adapter return codes
184 DALI_TEST_EQUALS(0, event.keyModifier, TEST_LOCATION);
186 event.keyModifier = CTRL_MODIFIER; // Set to Ctrl Modifier
188 DALI_TEST_EQUALS(CTRL_MODIFIER, event.keyModifier, TEST_LOCATION); // check able to set
190 DALI_TEST_EQUALS(true, event.IsCtrlModifier(), TEST_LOCATION); // check IsCtrlModifier
194 // Positive test case for a method
195 int UtcDaliKeyEventIsAltModifier(void)
197 TestApplication application; // Reset all test adapter return codes
200 DALI_TEST_EQUALS(0, event.keyModifier, TEST_LOCATION);
202 event.keyModifier = ALT_MODIFIER; // Set to Alt Modifier
204 DALI_TEST_EQUALS(ALT_MODIFIER, event.keyModifier, TEST_LOCATION); // check able to set
206 DALI_TEST_EQUALS(true, event.IsAltModifier(), TEST_LOCATION); // IsAltModifier
210 // Positive fail test case for a method
211 int UtcDaliKeyEventIsNotShiftModifier(void)
213 TestApplication application; // Reset all test adapter return codes
215 KeyEvent event("i","i", 0, CTRL_MODIFIER, 0, KeyEvent::Down);
217 DALI_TEST_EQUALS(CTRL_MODIFIER, event.keyModifier, TEST_LOCATION); // check different modifier used
219 DALI_TEST_EQUALS(false, event.IsShiftModifier(), TEST_LOCATION);
223 // Positive fail test case for a method
224 int UtcDaliKeyEventIsNotCtrlModifier(void)
226 TestApplication application; // Reset all test adapter return codes
228 KeyEvent event("i","i", 0, ALT_MODIFIER, 0, KeyEvent::Up);
230 DALI_TEST_EQUALS(ALT_MODIFIER, event.keyModifier, TEST_LOCATION); // check different modifier used
232 DALI_TEST_EQUALS(false, event.IsCtrlModifier(), TEST_LOCATION);
236 // Positive fail test case for a method
237 int UtcDaliKeyEventIsNotAltModifier(void)
239 TestApplication application; // Reset all test adapter return codes
241 KeyEvent event("i","i", 0, SHIFT_MODIFIER, 0, KeyEvent::Up);
243 DALI_TEST_EQUALS(SHIFT_MODIFIER, event.keyModifier, TEST_LOCATION); // check different modifier used
245 DALI_TEST_EQUALS(false, event.IsAltModifier(), TEST_LOCATION);
249 // Positive test case for a method
250 int UtcDaliKeyEventANDModifer(void)
252 TestApplication application; // Reset all test adapter return codes
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);
257 event.keyModifier = SHIFT_MODIFIER;
259 DALI_TEST_EQUALS(false, (bool)(event.IsCtrlModifier() & event.IsShiftModifier()), TEST_LOCATION);
263 // Positive test case for a method
264 int UtcDaliKeyEventORModifer(void)
266 TestApplication application; // Reset all test adapter return codes
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);
271 event.keyModifier = SHIFT_MODIFIER;
273 DALI_TEST_EQUALS(false, (bool)(event.IsCtrlModifier() & event.IsAltModifier()), TEST_LOCATION);
277 // Positive test case for a method
278 int UtcDaliKeyEventState(void)
280 TestApplication application; // Reset all test adapter return codes
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);
285 event.keyModifier = SHIFT_MODIFIER;
287 DALI_TEST_EQUALS(false, (bool)(event.IsCtrlModifier() & event.IsAltModifier()), TEST_LOCATION);
291 int UtcDaliIntegrationKeyEvent(void)
293 TestApplication application;
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.logicalKey == std::string() );
300 DALI_TEST_CHECK( keyEvent.keyString == std::string() );
301 DALI_TEST_EQUALS( keyEvent.keyCode, -1, TEST_LOCATION );
302 DALI_TEST_EQUALS( keyEvent.keyModifier, 0, TEST_LOCATION );
303 DALI_TEST_EQUALS( keyEvent.time, 0lu, TEST_LOCATION );
304 DALI_TEST_EQUALS( keyEvent.state, Integration::KeyEvent::Down, TEST_LOCATION);
308 const std::string keyName("keyName");
309 const std::string logicalKey("logicalKey");
310 const std::string keyString("keyString");
311 const int keyCode(333);
312 const int keyModifier(312);
313 const unsigned long timeStamp(132);
314 const Integration::KeyEvent::State keyState(Integration::KeyEvent::Up);
315 const std::string compose("compose");
316 const std::string deviceName("hwKeyboard");
317 const Device::Class::Type deviceClass = Device::Class::KEYBOARD;
318 const Device::Subclass::Type deviceSubclass = Device::Subclass::NONE;
320 Integration::KeyEvent keyEvent(keyName, logicalKey, keyString, keyCode, keyModifier, timeStamp, keyState, compose, deviceName, deviceClass, deviceSubclass );
321 DALI_TEST_EQUALS( keyEvent.type, Integration::Event::Key, TEST_LOCATION );
322 DALI_TEST_CHECK( keyEvent.keyName == keyName );
323 DALI_TEST_CHECK( keyEvent.logicalKey == logicalKey );
324 DALI_TEST_CHECK( keyEvent.keyString == keyString );
325 DALI_TEST_EQUALS( keyEvent.keyCode, keyCode, TEST_LOCATION );
326 DALI_TEST_EQUALS( keyEvent.keyModifier, keyModifier, TEST_LOCATION );
327 DALI_TEST_EQUALS( keyEvent.time, timeStamp, TEST_LOCATION );
328 DALI_TEST_EQUALS( keyEvent.state, keyState, TEST_LOCATION);
329 DALI_TEST_EQUALS( keyEvent.compose, compose, TEST_LOCATION);
330 DALI_TEST_EQUALS( keyEvent.deviceName, deviceName, TEST_LOCATION);
331 DALI_TEST_EQUALS( keyEvent.deviceClass, deviceClass, TEST_LOCATION);
332 DALI_TEST_EQUALS( keyEvent.deviceSubclass, deviceSubclass, TEST_LOCATION);
337 int UtcDaliIntegrationKeyEventConvertor(void)
339 TestApplication application;
341 KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0lu, KeyEvent::Down); // set name to test, key string to i and modifier to shift
343 Integration::KeyEvent keyEvent( event );
345 DALI_TEST_EQUALS( keyEvent.type, Integration::Event::Key, TEST_LOCATION );
346 DALI_TEST_CHECK( keyEvent.keyName == TEST_STRING_1 );
347 DALI_TEST_CHECK( keyEvent.logicalKey == "" );
348 DALI_TEST_CHECK( keyEvent.keyString == "i" );
349 DALI_TEST_EQUALS( keyEvent.keyCode, 99, TEST_LOCATION );
350 DALI_TEST_EQUALS( keyEvent.keyModifier, SHIFT_MODIFIER, TEST_LOCATION );
351 DALI_TEST_EQUALS( keyEvent.time, 0lu, TEST_LOCATION );
352 DALI_TEST_EQUALS( keyEvent.state, Integration::KeyEvent::Down, TEST_LOCATION);
353 DALI_TEST_EQUALS( keyEvent.compose, "", TEST_LOCATION);
354 DALI_TEST_EQUALS( keyEvent.deviceName, "", TEST_LOCATION);
355 DALI_TEST_EQUALS( keyEvent.deviceClass, Device::Class::NONE, TEST_LOCATION);
356 DALI_TEST_EQUALS( keyEvent.deviceSubclass, Device::Subclass::NONE, TEST_LOCATION);
361 int UtcDaliKeyEventSetCompose(void)
363 TestApplication application;
365 KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0lu, KeyEvent::Down);
367 DALI_TEST_EQUALS( event.GetCompose(), "", TEST_LOCATION);
372 int UtcDaliKeyEventSetDeviceName(void)
374 TestApplication application;
376 KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0lu, KeyEvent::Down);
378 DALI_TEST_EQUALS( event.GetDeviceName(), "", TEST_LOCATION);
383 int UtcDaliKeyEventSetDeviceClass(void)
385 TestApplication application;
387 KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0lu, KeyEvent::Down);
389 DALI_TEST_EQUALS( event.GetDeviceClass(), Device::Class::NONE, TEST_LOCATION);
394 int UtcDaliKeyEventSetDeviceSubclass(void)
396 TestApplication application;
398 KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0lu, KeyEvent::Down);
400 DALI_TEST_EQUALS( event.GetDeviceSubclass(), Device::Subclass::NONE, TEST_LOCATION);
405 int UtcDaliKeyEventSetLogicalKey(void)
407 TestApplication application;
409 KeyEvent event(TEST_STRING_1,"i", 99, SHIFT_MODIFIER, 0lu, KeyEvent::Down);
411 DALI_TEST_EQUALS( DevelKeyEvent::GetLogicalKey( event ), "", TEST_LOCATION );