2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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.
22 #include <dali/dali.h>
23 #include <dali-toolkit/dali-toolkit.h>
25 #include <dali/integration-api/events/key-event-integ.h>
27 #include <dali-toolkit-test-suite-utils.h>
30 using namespace Toolkit;
36 * Callback class for KeyInputFocusChanged signal.
38 class KeyInputFocusChangedCallback : public Dali::ConnectionTracker
43 * @param[in] gainActor Ref to the actor that should be set as the one that gains key input focus.
44 * @param[in] lostActor Ref to the actor that should be set as the one that loses key input focus.
46 KeyInputFocusChangedCallback( Control& gainActor, Control& lostActor )
47 : mActorGain( gainActor ),
48 mActorLost( lostActor )
52 void Callback( Control gainingActor, Control lostActor )
54 mActorGain = gainingActor;
55 mActorLost = lostActor;
62 // Stores data that is populated in the callback and will be read by the TET cases
66 : functorCalled(false)
71 functorCalled = false;
73 receivedKeyEvent.keyModifier = 0;
74 receivedKeyEvent.keyPressedName.clear();
75 receivedKeyEvent.keyPressed.clear();
80 KeyEvent receivedKeyEvent;
84 * Callback class to test SignalUnhandledKeyEvent signal
86 class SignalUnhandledKeyEventCallback : public Dali::ConnectionTracker
89 SignalUnhandledKeyEventCallback( SignalData& data ) : mSignalData( data ) { }
91 void Callback(const KeyEvent& event)
93 mSignalData.functorCalled = true;
94 mSignalData.receivedKeyEvent = event;
97 SignalData& mSignalData;
102 static void Startup();
103 static void Cleanup();
106 void (*tet_startup)() = Startup;
107 void (*tet_cleanup)() = Cleanup;
111 POSITIVE_TC_IDX = 0x01,
115 #define MAX_NUMBER_OF_TESTS 10000
117 struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
120 // Add test functionality for all APIs in the class (Positive and Negative)
121 TEST_FUNCTION( UtcDaliKeyInputFocusManagerGet, POSITIVE_TC_IDX );
122 TEST_FUNCTION( UtcDaliKeyInputFocusManagerSetFocus, POSITIVE_TC_IDX );
123 TEST_FUNCTION( UtcDaliKeyInputFocusManagerGetCurrentFocusControl, POSITIVE_TC_IDX );
124 TEST_FUNCTION( UtcDaliKeyInputFocusManagerRemoveFocus, POSITIVE_TC_IDX );
125 TEST_FUNCTION( UtcDaliKeyInputFocusManagerIsKeyboardListener, POSITIVE_TC_IDX );
126 TEST_FUNCTION( UtcDaliKeyInputFocusManagerSignalKeyInputFocusChanged, POSITIVE_TC_IDX );
127 TEST_FUNCTION( UtcDaliKeyInputFocusManagerSignalUnhandledKeyEvent, POSITIVE_TC_IDX );
129 // Called only once before first test is run.
130 static void Startup()
134 // Called only once after last test is run
135 static void Cleanup()
139 static void UtcDaliKeyInputFocusManagerGet()
141 ToolkitTestApplication application;
143 tet_infoline(" UtcDaliKeyInputFocusManagerGet");
145 KeyInputFocusManager manager;
147 manager = KeyInputFocusManager::Get();
148 DALI_TEST_CHECK(manager);
151 KeyInputFocusManager newManager = KeyInputFocusManager::Get();
152 DALI_TEST_CHECK(newManager);
154 // Check that focus manager is a singleton
155 DALI_TEST_CHECK(manager == newManager);
158 static void UtcDaliKeyInputFocusManagerSetFocus()
160 ToolkitTestApplication application;
161 Stage stage = Stage::GetCurrent();
163 tet_infoline(" UtcDaliKeyInputFocusManagerSetFocus");
165 KeyInputFocusManager manager = KeyInputFocusManager::Get();
166 DALI_TEST_CHECK(manager);
168 PushButton pushButton1 = PushButton::New();
169 stage.Add( pushButton1 );
171 manager.SetFocus(pushButton1);
172 DALI_TEST_CHECK(pushButton1.HasKeyInputFocus());
175 static void UtcDaliKeyInputFocusManagerGetCurrentFocusControl()
177 ToolkitTestApplication application;
178 Stage stage = Stage::GetCurrent();
180 tet_infoline(" UtcDaliKeyInputFocusManagerGetCurrentFocusControl");
182 KeyInputFocusManager manager = KeyInputFocusManager::Get();
183 DALI_TEST_CHECK(manager);
185 PushButton pushButton1 = PushButton::New();
186 PushButton pushButton2 = PushButton::New();
187 stage.Add( pushButton1 );
188 stage.Add( pushButton2 );
190 manager.SetFocus(pushButton1);
191 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
193 manager.SetFocus(pushButton2);
194 DALI_TEST_CHECK(pushButton2 == manager.GetCurrentFocusControl());
196 manager.SetFocus(pushButton1);
197 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
200 static void UtcDaliKeyInputFocusManagerRemoveFocus()
202 ToolkitTestApplication application;
203 Stage stage = Stage::GetCurrent();
205 tet_infoline(" UtcDaliKeyInputFocusManagerRemoveFocus");
207 KeyInputFocusManager manager = KeyInputFocusManager::Get();
208 DALI_TEST_CHECK(manager);
210 PushButton pushButton1 = PushButton::New();
211 PushButton pushButton2 = PushButton::New();
212 stage.Add( pushButton1 );
213 stage.Add( pushButton2 );
215 manager.SetFocus(pushButton1);
216 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
218 manager.SetFocus(pushButton2);
219 DALI_TEST_CHECK(pushButton2 == manager.GetCurrentFocusControl());
221 manager.RemoveFocus(pushButton2);
222 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
224 manager.RemoveFocus(pushButton1);
225 DALI_TEST_CHECK(Control() == manager.GetCurrentFocusControl());
228 static void UtcDaliKeyInputFocusManagerIsKeyboardListener()
230 ToolkitTestApplication application;
231 Stage stage = Stage::GetCurrent();
233 tet_infoline(" UtcDaliKeyInputFocusManagerIsKeyboardListener");
235 KeyInputFocusManager manager = KeyInputFocusManager::Get();
236 DALI_TEST_CHECK(manager);
238 PushButton pushButton1 = PushButton::New();
239 PushButton pushButton2 = PushButton::New();
240 stage.Add( pushButton1 );
241 stage.Add( pushButton2 );
243 manager.SetFocus(pushButton1);
244 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
246 manager.SetFocus(pushButton2);
247 DALI_TEST_CHECK(pushButton2 == manager.GetCurrentFocusControl());
249 DALI_TEST_CHECK(manager.IsKeyboardListener(pushButton1));
250 DALI_TEST_CHECK(manager.IsKeyboardListener(pushButton2));
252 manager.RemoveFocus(pushButton2);
253 DALI_TEST_CHECK(!manager.IsKeyboardListener(pushButton2));
255 manager.RemoveFocus(pushButton1);
256 DALI_TEST_CHECK(!manager.IsKeyboardListener(pushButton1));
258 manager.SetFocus(pushButton2);
259 DALI_TEST_CHECK(manager.IsKeyboardListener(pushButton2));
260 pushButton2.ClearKeyInputFocus();
261 DALI_TEST_CHECK(!manager.IsKeyboardListener(pushButton2));
264 static void UtcDaliKeyInputFocusManagerSignalKeyInputFocusChanged()
266 ToolkitTestApplication application;
267 KeyInputFocusManager manager = KeyInputFocusManager::Get();
268 Stage stage = Stage::GetCurrent();
270 tet_infoline(" UtcDaliKeyInputFocusManagerSignalKeyInputFocusChanged");
272 PushButton pushButton1 = PushButton::New();
273 PushButton pushButton2 = PushButton::New();
275 stage.Add( pushButton1 );
276 stage.Add( pushButton2 );
278 PushButton gainActor, lostActor;
279 KeyInputFocusChangedCallback callback( gainActor, lostActor );
280 manager.KeyInputFocusChangedSignal().Connect( &callback, &KeyInputFocusChangedCallback::Callback );
282 manager.SetFocus(pushButton1);
284 DALI_TEST_CHECK( gainActor == pushButton1 );
285 DALI_TEST_CHECK( lostActor == Control() );
287 gainActor = lostActor = NULL;
289 manager.SetFocus(pushButton2);
291 DALI_TEST_CHECK( gainActor == pushButton2 );
292 DALI_TEST_CHECK( lostActor == pushButton1 );
294 gainActor = lostActor = NULL;
296 // Removing the focus actor from the stage would also result in signal emission.
297 stage.Remove( pushButton1 );
298 stage.Remove( pushButton2 );
300 DALI_TEST_CHECK( gainActor == Control() );
301 DALI_TEST_CHECK( lostActor == Control() );
304 static void UtcDaliKeyInputFocusManagerSignalUnhandledKeyEvent()
306 ToolkitTestApplication application;
308 tet_infoline("UtcDaliKeyInputFocusManagerSignalUnhandledKeyEvent");
311 SignalUnhandledKeyEventCallback callback( data );
313 KeyInputFocusManager manager = KeyInputFocusManager::Get();
314 manager.UnhandledKeyEventSignal().Connect( &callback, &SignalUnhandledKeyEventCallback::Callback );
317 Integration::KeyEvent event("a", "a", 0, 0, 0, Integration::KeyEvent::Up);
318 application.ProcessEvent(event);
320 DALI_TEST_CHECK(data.functorCalled);
321 DALI_TEST_CHECK(event.keyName == data.receivedKeyEvent.keyPressedName );
322 DALI_TEST_CHECK(event.keyCode == data.receivedKeyEvent.keyCode);
323 DALI_TEST_CHECK(event.keyString == data.receivedKeyEvent.keyPressed );
324 DALI_TEST_CHECK(event.state == data.receivedKeyEvent.state );
328 Integration::KeyEvent event2("v", "v", 0, 0, 0, Integration::KeyEvent::Up);
329 application.ProcessEvent(event2);
331 DALI_TEST_CHECK(data.functorCalled);
332 DALI_TEST_CHECK(event2.keyName == data.receivedKeyEvent.keyPressedName );
333 DALI_TEST_CHECK(event2.keyCode == data.receivedKeyEvent.keyCode);
334 DALI_TEST_CHECK(event2.keyString == data.receivedKeyEvent.keyPressed );