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.
19 #include <dali-toolkit-test-suite-utils.h>
20 #include <dali-toolkit/dali-toolkit.h>
21 #include <dali/integration-api/events/key-event-integ.h>
25 using namespace Toolkit;
31 * Callback class for KeyInputFocusChanged signal.
33 class KeyInputFocusChangedCallback : public Dali::ConnectionTracker
38 * @param[in] gainActor Ref to the actor that should be set as the one that gains key input focus.
39 * @param[in] lostActor Ref to the actor that should be set as the one that loses key input focus.
41 KeyInputFocusChangedCallback( Control& gainActor, Control& lostActor )
42 : mActorGain( gainActor ),
43 mActorLost( lostActor )
47 void Callback( Control gainingActor, Control lostActor )
49 mActorGain = gainingActor;
50 mActorLost = lostActor;
57 // Stores data that is populated in the callback and will be read by the TET cases
61 : functorCalled(false)
66 functorCalled = false;
68 receivedKeyEvent.keyModifier = 0;
69 receivedKeyEvent.keyPressedName.clear();
70 receivedKeyEvent.keyPressed.clear();
75 KeyEvent receivedKeyEvent;
79 * Callback class to test SignalUnhandledKeyEvent signal
81 class SignalUnhandledKeyEventCallback : public Dali::ConnectionTracker
84 SignalUnhandledKeyEventCallback( SignalData& data ) : mSignalData( data ) { }
86 void Callback(const KeyEvent& event)
88 mSignalData.functorCalled = true;
89 mSignalData.receivedKeyEvent = event;
92 SignalData& mSignalData;
97 void key_input_focus_manager_startup(void)
99 test_return_value = TET_UNDEF;
102 void key_input_focus_manager_cleanup(void)
104 test_return_value = TET_PASS;
107 int UtcDaliKeyInputFocusManagerGet(void)
109 ToolkitTestApplication application;
111 tet_infoline(" UtcDaliKeyInputFocusManagerGet");
113 KeyInputFocusManager manager;
115 manager = KeyInputFocusManager::Get();
116 DALI_TEST_CHECK(manager);
119 KeyInputFocusManager newManager = KeyInputFocusManager::Get();
120 DALI_TEST_CHECK(newManager);
122 // Check that focus manager is a singleton
123 DALI_TEST_CHECK(manager == newManager);
127 int UtcDaliKeyInputFocusManagerSetFocus(void)
129 ToolkitTestApplication application;
130 Stage stage = Stage::GetCurrent();
132 tet_infoline(" UtcDaliKeyInputFocusManagerSetFocus");
134 KeyInputFocusManager manager = KeyInputFocusManager::Get();
135 DALI_TEST_CHECK(manager);
137 PushButton pushButton1 = PushButton::New();
138 stage.Add( pushButton1 );
140 manager.SetFocus(pushButton1);
141 DALI_TEST_CHECK(pushButton1.HasKeyInputFocus());
145 int UtcDaliKeyInputFocusManagerGetCurrentFocusControl(void)
147 ToolkitTestApplication application;
148 Stage stage = Stage::GetCurrent();
150 tet_infoline(" UtcDaliKeyInputFocusManagerGetCurrentFocusControl");
152 KeyInputFocusManager manager = KeyInputFocusManager::Get();
153 DALI_TEST_CHECK(manager);
155 PushButton pushButton1 = PushButton::New();
156 PushButton pushButton2 = PushButton::New();
157 stage.Add( pushButton1 );
158 stage.Add( pushButton2 );
160 manager.SetFocus(pushButton1);
161 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
163 manager.SetFocus(pushButton2);
164 DALI_TEST_CHECK(pushButton2 == manager.GetCurrentFocusControl());
166 manager.SetFocus(pushButton1);
167 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
171 int UtcDaliKeyInputFocusManagerRemoveFocus(void)
173 ToolkitTestApplication application;
174 Stage stage = Stage::GetCurrent();
176 tet_infoline(" UtcDaliKeyInputFocusManagerRemoveFocus");
178 KeyInputFocusManager manager = KeyInputFocusManager::Get();
179 DALI_TEST_CHECK(manager);
181 PushButton pushButton1 = PushButton::New();
182 PushButton pushButton2 = PushButton::New();
183 stage.Add( pushButton1 );
184 stage.Add( pushButton2 );
186 manager.SetFocus(pushButton1);
187 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
189 manager.SetFocus(pushButton2);
190 DALI_TEST_CHECK(pushButton2 == manager.GetCurrentFocusControl());
192 manager.RemoveFocus(pushButton2);
193 DALI_TEST_CHECK(pushButton1 == manager.GetCurrentFocusControl());
195 manager.RemoveFocus(pushButton1);
196 DALI_TEST_CHECK(Control() == manager.GetCurrentFocusControl());
200 int UtcDaliKeyInputFocusManagerIsKeyboardListener(void)
202 ToolkitTestApplication application;
203 Stage stage = Stage::GetCurrent();
205 tet_infoline(" UtcDaliKeyInputFocusManagerIsKeyboardListener");
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 DALI_TEST_CHECK(manager.IsKeyboardListener(pushButton1));
222 DALI_TEST_CHECK(manager.IsKeyboardListener(pushButton2));
224 manager.RemoveFocus(pushButton2);
225 DALI_TEST_CHECK(!manager.IsKeyboardListener(pushButton2));
227 manager.RemoveFocus(pushButton1);
228 DALI_TEST_CHECK(!manager.IsKeyboardListener(pushButton1));
230 manager.SetFocus(pushButton2);
231 DALI_TEST_CHECK(manager.IsKeyboardListener(pushButton2));
232 pushButton2.ClearKeyInputFocus();
233 DALI_TEST_CHECK(!manager.IsKeyboardListener(pushButton2));
237 int UtcDaliKeyInputFocusManagerSignalKeyInputFocusChanged(void)
239 ToolkitTestApplication application;
240 KeyInputFocusManager manager = KeyInputFocusManager::Get();
241 Stage stage = Stage::GetCurrent();
243 tet_infoline(" UtcDaliKeyInputFocusManagerSignalKeyInputFocusChanged");
245 PushButton pushButton1 = PushButton::New();
246 PushButton pushButton2 = PushButton::New();
248 stage.Add( pushButton1 );
249 stage.Add( pushButton2 );
251 PushButton gainActor, lostActor;
252 KeyInputFocusChangedCallback callback( gainActor, lostActor );
253 manager.KeyInputFocusChangedSignal().Connect( &callback, &KeyInputFocusChangedCallback::Callback );
255 manager.SetFocus(pushButton1);
257 DALI_TEST_CHECK( gainActor == pushButton1 );
258 DALI_TEST_CHECK( lostActor == Control() );
260 gainActor = lostActor = NULL;
262 manager.SetFocus(pushButton2);
264 DALI_TEST_CHECK( gainActor == pushButton2 );
265 DALI_TEST_CHECK( lostActor == pushButton1 );
267 gainActor = lostActor = NULL;
269 // Removing the focus actor from the stage would also result in signal emission.
270 stage.Remove( pushButton1 );
271 stage.Remove( pushButton2 );
273 DALI_TEST_CHECK( gainActor == Control() );
274 DALI_TEST_CHECK( lostActor == Control() );
278 int UtcDaliKeyInputFocusManagerSignalUnhandledKeyEvent(void)
280 ToolkitTestApplication application;
282 tet_infoline("UtcDaliKeyInputFocusManagerSignalUnhandledKeyEvent");
285 SignalUnhandledKeyEventCallback callback( data );
287 KeyInputFocusManager manager = KeyInputFocusManager::Get();
288 manager.UnhandledKeyEventSignal().Connect( &callback, &SignalUnhandledKeyEventCallback::Callback );
291 Integration::KeyEvent event("a", "a", 0, 0, 0, Integration::KeyEvent::Up);
292 application.ProcessEvent(event);
294 DALI_TEST_CHECK(data.functorCalled);
295 DALI_TEST_CHECK(event.keyName == data.receivedKeyEvent.keyPressedName );
296 DALI_TEST_CHECK(event.keyCode == data.receivedKeyEvent.keyCode);
297 DALI_TEST_CHECK(event.keyString == data.receivedKeyEvent.keyPressed );
298 DALI_TEST_CHECK(event.state == data.receivedKeyEvent.state );
302 Integration::KeyEvent event2("v", "v", 0, 0, 0, Integration::KeyEvent::Up);
303 application.ProcessEvent(event2);
305 DALI_TEST_CHECK(data.functorCalled);
306 DALI_TEST_CHECK(event2.keyName == data.receivedKeyEvent.keyPressedName );
307 DALI_TEST_CHECK(event2.keyCode == data.receivedKeyEvent.keyCode);
308 DALI_TEST_CHECK(event2.keyString == data.receivedKeyEvent.keyPressed );