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.
20 #include <dali-toolkit-test-suite-utils.h>
21 #include <dali-toolkit/dali-toolkit.h>
22 #include <dali/integration-api/events/key-event-integ.h>
26 using namespace Toolkit;
32 * Callback class for KeyInputFocusChanged signal.
34 class KeyInputFocusChangedCallback : public Dali::ConnectionTracker
39 * @param[in] gainActor Ref to the actor that should be set as the one that gains key input focus.
40 * @param[in] lostActor Ref to the actor that should be set as the one that loses key input focus.
42 KeyInputFocusChangedCallback( Control& gainActor, Control& lostActor )
43 : mActorGain( gainActor ),
44 mActorLost( lostActor )
48 void Callback( Control gainingActor, Control lostActor )
50 mActorGain = gainingActor;
51 mActorLost = lostActor;
58 // Stores data that is populated in the callback and will be read by the TET cases
62 : functorCalled(false)
67 functorCalled = false;
69 receivedKeyEvent.keyModifier = 0;
70 receivedKeyEvent.keyPressedName.clear();
71 receivedKeyEvent.keyPressed.clear();
76 KeyEvent receivedKeyEvent;
80 * Callback class to test SignalUnhandledKeyEvent signal
82 class SignalUnhandledKeyEventCallback : public Dali::ConnectionTracker
85 SignalUnhandledKeyEventCallback( SignalData& data ) : mSignalData( data ) { }
87 void Callback(const KeyEvent& event)
89 mSignalData.functorCalled = true;
90 mSignalData.receivedKeyEvent = event;
93 SignalData& mSignalData;
98 void key_input_focus_manager_startup(void)
100 test_return_value = TET_UNDEF;
103 void key_input_focus_manager_cleanup(void)
105 test_return_value = TET_PASS;
108 int UtcDaliKeyInputFocusManagerGet(void)
110 ToolkitTestApplication application;
112 tet_infoline(" UtcDaliKeyInputFocusManagerGet");
114 KeyInputFocusManager manager;
116 manager = KeyInputFocusManager::Get();
117 DALI_TEST_CHECK(manager);
120 KeyInputFocusManager newManager = KeyInputFocusManager::Get();
121 DALI_TEST_CHECK(newManager);
123 // Check that focus manager is a singleton
124 DALI_TEST_CHECK(manager == newManager);
128 int UtcDaliKeyInputFocusManagerSetFocus(void)
130 ToolkitTestApplication application;
131 Stage stage = Stage::GetCurrent();
133 tet_infoline(" UtcDaliKeyInputFocusManagerSetFocus");
135 KeyInputFocusManager manager = KeyInputFocusManager::Get();
136 DALI_TEST_CHECK(manager);
138 PushButton pushButton1 = PushButton::New();
139 stage.Add( pushButton1 );
141 manager.SetFocus(pushButton1);
142 DALI_TEST_CHECK(pushButton1.HasKeyInputFocus());
146 int UtcDaliKeyInputFocusManagerGetCurrentFocusControl(void)
148 ToolkitTestApplication application;
149 Stage stage = Stage::GetCurrent();
151 tet_infoline(" UtcDaliKeyInputFocusManagerGetCurrentFocusControl");
153 KeyInputFocusManager manager = KeyInputFocusManager::Get();
154 DALI_TEST_CHECK(manager);
156 PushButton pushButton1 = PushButton::New();
157 PushButton pushButton2 = PushButton::New();
158 stage.Add( pushButton1 );
159 stage.Add( pushButton2 );
161 manager.SetFocus(pushButton1);
162 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
164 manager.SetFocus(pushButton2);
165 DALI_TEST_CHECK(pushButton2 == manager.GetCurrentFocusControl());
167 manager.SetFocus(pushButton1);
168 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
172 int UtcDaliKeyInputFocusManagerRemoveFocus(void)
174 ToolkitTestApplication application;
175 Stage stage = Stage::GetCurrent();
177 tet_infoline(" UtcDaliKeyInputFocusManagerRemoveFocus");
179 KeyInputFocusManager manager = KeyInputFocusManager::Get();
180 DALI_TEST_CHECK(manager);
182 PushButton pushButton1 = PushButton::New();
183 PushButton pushButton2 = PushButton::New();
184 stage.Add( pushButton1 );
185 stage.Add( pushButton2 );
187 manager.SetFocus(pushButton1);
188 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
190 manager.SetFocus(pushButton2);
191 DALI_TEST_CHECK(pushButton2 == manager.GetCurrentFocusControl());
193 manager.RemoveFocus(pushButton2);
194 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
196 manager.RemoveFocus(pushButton1);
197 DALI_TEST_CHECK(Control() == manager.GetCurrentFocusControl());
201 int UtcDaliKeyInputFocusManagerIsKeyboardListener(void)
203 ToolkitTestApplication application;
204 Stage stage = Stage::GetCurrent();
206 tet_infoline(" UtcDaliKeyInputFocusManagerIsKeyboardListener");
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 DALI_TEST_CHECK(manager.IsKeyboardListener(pushButton1));
223 DALI_TEST_CHECK(manager.IsKeyboardListener(pushButton2));
225 manager.RemoveFocus(pushButton2);
226 DALI_TEST_CHECK(!manager.IsKeyboardListener(pushButton2));
228 manager.RemoveFocus(pushButton1);
229 DALI_TEST_CHECK(!manager.IsKeyboardListener(pushButton1));
231 manager.SetFocus(pushButton2);
232 DALI_TEST_CHECK(manager.IsKeyboardListener(pushButton2));
233 pushButton2.ClearKeyInputFocus();
234 DALI_TEST_CHECK(!manager.IsKeyboardListener(pushButton2));
238 int UtcDaliKeyInputFocusManagerSignalKeyInputFocusChanged(void)
240 ToolkitTestApplication application;
241 KeyInputFocusManager manager = KeyInputFocusManager::Get();
242 Stage stage = Stage::GetCurrent();
244 tet_infoline(" UtcDaliKeyInputFocusManagerSignalKeyInputFocusChanged");
246 PushButton pushButton1 = PushButton::New();
247 PushButton pushButton2 = PushButton::New();
249 stage.Add( pushButton1 );
250 stage.Add( pushButton2 );
252 PushButton gainActor, lostActor;
253 KeyInputFocusChangedCallback callback( gainActor, lostActor );
254 manager.KeyInputFocusChangedSignal().Connect( &callback, &KeyInputFocusChangedCallback::Callback );
256 manager.SetFocus(pushButton1);
258 DALI_TEST_CHECK( gainActor == pushButton1 );
259 DALI_TEST_CHECK( lostActor == Control() );
261 gainActor = lostActor = NULL;
263 manager.SetFocus(pushButton2);
265 DALI_TEST_CHECK( gainActor == pushButton2 );
266 DALI_TEST_CHECK( lostActor == pushButton1 );
268 gainActor = lostActor = NULL;
270 // Removing the focus actor from the stage would also result in signal emission.
271 stage.Remove( pushButton1 );
272 stage.Remove( pushButton2 );
274 DALI_TEST_CHECK( gainActor == Control() );
275 DALI_TEST_CHECK( lostActor == Control() );
279 int UtcDaliKeyInputFocusManagerSignalUnhandledKeyEvent(void)
281 ToolkitTestApplication application;
283 tet_infoline("UtcDaliKeyInputFocusManagerSignalUnhandledKeyEvent");
286 SignalUnhandledKeyEventCallback callback( data );
288 KeyInputFocusManager manager = KeyInputFocusManager::Get();
289 manager.UnhandledKeyEventSignal().Connect( &callback, &SignalUnhandledKeyEventCallback::Callback );
292 Integration::KeyEvent event("a", "a", 0, 0, 0, Integration::KeyEvent::Up);
293 application.ProcessEvent(event);
295 DALI_TEST_CHECK(data.functorCalled);
296 DALI_TEST_CHECK(event.keyName == data.receivedKeyEvent.keyPressedName );
297 DALI_TEST_CHECK(event.keyCode == data.receivedKeyEvent.keyCode);
298 DALI_TEST_CHECK(event.keyString == data.receivedKeyEvent.keyPressed );
299 DALI_TEST_CHECK(event.state == data.receivedKeyEvent.state );
303 Integration::KeyEvent event2("v", "v", 0, 0, 0, Integration::KeyEvent::Up);
304 application.ProcessEvent(event2);
306 DALI_TEST_CHECK(data.functorCalled);
307 DALI_TEST_CHECK(event2.keyName == data.receivedKeyEvent.keyPressedName );
308 DALI_TEST_CHECK(event2.keyCode == data.receivedKeyEvent.keyCode);
309 DALI_TEST_CHECK(event2.keyString == data.receivedKeyEvent.keyPressed );