2 * Copyright (c) 2014 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.
23 #include <dali/dali.h>
24 #include <dali-toolkit/dali-toolkit.h>
26 #include <dali/integration-api/events/key-event-integ.h>
28 #include <dali-toolkit-test-suite-utils.h>
31 using namespace Toolkit;
37 * Callback class for KeyInputFocusChanged signal.
39 class KeyInputFocusChangedCallback : public Dali::ConnectionTracker
44 * @param[in] gainActor Ref to the actor that should be set as the one that gains key input focus.
45 * @param[in] lostActor Ref to the actor that should be set as the one that loses key input focus.
47 KeyInputFocusChangedCallback( Control& gainActor, Control& lostActor )
48 : mActorGain( gainActor ),
49 mActorLost( lostActor )
53 void Callback( Control gainingActor, Control lostActor )
55 mActorGain = gainingActor;
56 mActorLost = lostActor;
63 // Stores data that is populated in the callback and will be read by the TET cases
67 : functorCalled(false)
72 functorCalled = false;
74 receivedKeyEvent.keyModifier = 0;
75 receivedKeyEvent.keyPressedName.clear();
76 receivedKeyEvent.keyPressed.clear();
81 KeyEvent receivedKeyEvent;
85 * Callback class to test SignalUnhandledKeyEvent signal
87 class SignalUnhandledKeyEventCallback : public Dali::ConnectionTracker
90 SignalUnhandledKeyEventCallback( SignalData& data ) : mSignalData( data ) { }
92 void Callback(const KeyEvent& event)
94 mSignalData.functorCalled = true;
95 mSignalData.receivedKeyEvent = event;
98 SignalData& mSignalData;
103 static void Startup();
104 static void Cleanup();
107 void (*tet_startup)() = Startup;
108 void (*tet_cleanup)() = Cleanup;
112 POSITIVE_TC_IDX = 0x01,
116 #define MAX_NUMBER_OF_TESTS 10000
118 struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
121 // Add test functionality for all APIs in the class (Positive and Negative)
122 TEST_FUNCTION( UtcDaliKeyInputFocusManagerGet, POSITIVE_TC_IDX );
123 TEST_FUNCTION( UtcDaliKeyInputFocusManagerSetFocus, POSITIVE_TC_IDX );
124 TEST_FUNCTION( UtcDaliKeyInputFocusManagerGetCurrentFocusControl, POSITIVE_TC_IDX );
125 TEST_FUNCTION( UtcDaliKeyInputFocusManagerRemoveFocus, POSITIVE_TC_IDX );
126 TEST_FUNCTION( UtcDaliKeyInputFocusManagerIsKeyboardListener, POSITIVE_TC_IDX );
127 TEST_FUNCTION( UtcDaliKeyInputFocusManagerSignalKeyInputFocusChanged, POSITIVE_TC_IDX );
128 TEST_FUNCTION( UtcDaliKeyInputFocusManagerSignalUnhandledKeyEvent, POSITIVE_TC_IDX );
130 // Called only once before first test is run.
131 static void Startup()
135 // Called only once after last test is run
136 static void Cleanup()
140 static void UtcDaliKeyInputFocusManagerGet()
142 ToolkitTestApplication application;
144 tet_infoline(" UtcDaliKeyInputFocusManagerGet");
146 KeyInputFocusManager manager;
148 manager = KeyInputFocusManager::Get();
149 DALI_TEST_CHECK(manager);
152 KeyInputFocusManager newManager = KeyInputFocusManager::Get();
153 DALI_TEST_CHECK(newManager);
155 // Check that focus manager is a singleton
156 DALI_TEST_CHECK(manager == newManager);
159 static void UtcDaliKeyInputFocusManagerSetFocus()
161 ToolkitTestApplication application;
162 Stage stage = Stage::GetCurrent();
164 tet_infoline(" UtcDaliKeyInputFocusManagerSetFocus");
166 KeyInputFocusManager manager = KeyInputFocusManager::Get();
167 DALI_TEST_CHECK(manager);
169 PushButton pushButton1 = PushButton::New();
170 stage.Add( pushButton1 );
172 manager.SetFocus(pushButton1);
173 DALI_TEST_CHECK(pushButton1.HasKeyInputFocus());
176 static void UtcDaliKeyInputFocusManagerGetCurrentFocusControl()
178 ToolkitTestApplication application;
179 Stage stage = Stage::GetCurrent();
181 tet_infoline(" UtcDaliKeyInputFocusManagerGetCurrentFocusControl");
183 KeyInputFocusManager manager = KeyInputFocusManager::Get();
184 DALI_TEST_CHECK(manager);
186 PushButton pushButton1 = PushButton::New();
187 PushButton pushButton2 = PushButton::New();
188 stage.Add( pushButton1 );
189 stage.Add( pushButton2 );
191 manager.SetFocus(pushButton1);
192 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
194 manager.SetFocus(pushButton2);
195 DALI_TEST_CHECK(pushButton2 == manager.GetCurrentFocusControl());
197 manager.SetFocus(pushButton1);
198 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
201 static void UtcDaliKeyInputFocusManagerRemoveFocus()
203 ToolkitTestApplication application;
204 Stage stage = Stage::GetCurrent();
206 tet_infoline(" UtcDaliKeyInputFocusManagerRemoveFocus");
208 KeyInputFocusManager manager = KeyInputFocusManager::Get();
209 DALI_TEST_CHECK(manager);
211 PushButton pushButton1 = PushButton::New();
212 PushButton pushButton2 = PushButton::New();
213 stage.Add( pushButton1 );
214 stage.Add( pushButton2 );
216 manager.SetFocus(pushButton1);
217 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
219 manager.SetFocus(pushButton2);
220 DALI_TEST_CHECK(pushButton2 == manager.GetCurrentFocusControl());
222 manager.RemoveFocus(pushButton2);
223 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
225 manager.RemoveFocus(pushButton1);
226 DALI_TEST_CHECK(Control() == manager.GetCurrentFocusControl());
229 static void UtcDaliKeyInputFocusManagerIsKeyboardListener()
231 ToolkitTestApplication application;
232 Stage stage = Stage::GetCurrent();
234 tet_infoline(" UtcDaliKeyInputFocusManagerIsKeyboardListener");
236 KeyInputFocusManager manager = KeyInputFocusManager::Get();
237 DALI_TEST_CHECK(manager);
239 PushButton pushButton1 = PushButton::New();
240 PushButton pushButton2 = PushButton::New();
241 stage.Add( pushButton1 );
242 stage.Add( pushButton2 );
244 manager.SetFocus(pushButton1);
245 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
247 manager.SetFocus(pushButton2);
248 DALI_TEST_CHECK(pushButton2 == manager.GetCurrentFocusControl());
250 DALI_TEST_CHECK(manager.IsKeyboardListener(pushButton1));
251 DALI_TEST_CHECK(manager.IsKeyboardListener(pushButton2));
253 manager.RemoveFocus(pushButton2);
254 DALI_TEST_CHECK(!manager.IsKeyboardListener(pushButton2));
256 manager.RemoveFocus(pushButton1);
257 DALI_TEST_CHECK(!manager.IsKeyboardListener(pushButton1));
259 manager.SetFocus(pushButton2);
260 DALI_TEST_CHECK(manager.IsKeyboardListener(pushButton2));
261 pushButton2.ClearKeyInputFocus();
262 DALI_TEST_CHECK(!manager.IsKeyboardListener(pushButton2));
265 static void UtcDaliKeyInputFocusManagerSignalKeyInputFocusChanged()
267 ToolkitTestApplication application;
268 KeyInputFocusManager manager = KeyInputFocusManager::Get();
269 Stage stage = Stage::GetCurrent();
271 tet_infoline(" UtcDaliKeyInputFocusManagerSignalKeyInputFocusChanged");
273 PushButton pushButton1 = PushButton::New();
274 PushButton pushButton2 = PushButton::New();
276 stage.Add( pushButton1 );
277 stage.Add( pushButton2 );
279 PushButton gainActor, lostActor;
280 KeyInputFocusChangedCallback callback( gainActor, lostActor );
281 manager.KeyInputFocusChangedSignal().Connect( &callback, &KeyInputFocusChangedCallback::Callback );
283 manager.SetFocus(pushButton1);
285 DALI_TEST_CHECK( gainActor == pushButton1 );
286 DALI_TEST_CHECK( lostActor == Control() );
288 gainActor = lostActor = NULL;
290 manager.SetFocus(pushButton2);
292 DALI_TEST_CHECK( gainActor == pushButton2 );
293 DALI_TEST_CHECK( lostActor == pushButton1 );
295 gainActor = lostActor = NULL;
297 // Removing the focus actor from the stage would also result in signal emission.
298 stage.Remove( pushButton1 );
299 stage.Remove( pushButton2 );
301 DALI_TEST_CHECK( gainActor == Control() );
302 DALI_TEST_CHECK( lostActor == Control() );
305 static void UtcDaliKeyInputFocusManagerSignalUnhandledKeyEvent()
307 ToolkitTestApplication application;
309 tet_infoline("UtcDaliKeyInputFocusManagerSignalUnhandledKeyEvent");
312 SignalUnhandledKeyEventCallback callback( data );
314 KeyInputFocusManager manager = KeyInputFocusManager::Get();
315 manager.UnhandledKeyEventSignal().Connect( &callback, &SignalUnhandledKeyEventCallback::Callback );
318 Integration::KeyEvent event("a", "a", 0, 0, 0, Integration::KeyEvent::Up);
319 application.ProcessEvent(event);
321 DALI_TEST_CHECK(data.functorCalled);
322 DALI_TEST_CHECK(event.keyName == data.receivedKeyEvent.keyPressedName );
323 DALI_TEST_CHECK(event.keyCode == data.receivedKeyEvent.keyCode);
324 DALI_TEST_CHECK(event.keyString == data.receivedKeyEvent.keyPressed );
325 DALI_TEST_CHECK(event.state == data.receivedKeyEvent.state );
329 Integration::KeyEvent event2("v", "v", 0, 0, 0, Integration::KeyEvent::Up);
330 application.ProcessEvent(event2);
332 DALI_TEST_CHECK(data.functorCalled);
333 DALI_TEST_CHECK(event2.keyName == data.receivedKeyEvent.keyPressedName );
334 DALI_TEST_CHECK(event2.keyCode == data.receivedKeyEvent.keyCode);
335 DALI_TEST_CHECK(event2.keyString == data.receivedKeyEvent.keyPressed );