X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Futc-Dali-KeyInputFocusManager.cpp;h=5a0cf3324c4785304f42f7e32e26db54e8f200b6;hp=56cd9e892552426aedea50236432a0475d716c68;hb=HEAD;hpb=b39bc6a329f67a7ec5b4a872544ca05b7ac1fa5f diff --git a/automated-tests/src/dali-toolkit/utc-Dali-KeyInputFocusManager.cpp b/automated-tests/src/dali-toolkit/utc-Dali-KeyInputFocusManager.cpp index 56cd9e8..8377ec7 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-KeyInputFocusManager.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-KeyInputFocusManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,13 +15,14 @@ * */ -#include -#include #include #include -#include +#include #include #include +#include +#include +#include #include "dummy-control.h" @@ -30,7 +31,6 @@ using namespace Toolkit; namespace { - /** * Callback class for KeyInputFocusChanged signal. */ @@ -42,13 +42,13 @@ public: * @param[in] gainActor Ref to the actor that should be set as the one that gains key input focus. * @param[in] lostActor Ref to the actor that should be set as the one that loses key input focus. */ - KeyInputFocusChangedCallback( Control& gainActor, Control& lostActor ) - : mActorGain( gainActor ), - mActorLost( lostActor ) + KeyInputFocusChangedCallback(Control& gainActor, Control& lostActor) + : mActorGain(gainActor), + mActorLost(lostActor) { } - void Callback( Control gainingActor, Control lostActor ) + void Callback(Control gainingActor, Control lostActor) { mActorGain = gainingActor; mActorLost = lostActor; @@ -63,19 +63,17 @@ struct SignalData { SignalData() : functorCalled(false) - {} + { + } void Reset() { functorCalled = false; - receivedKeyEvent.keyModifier = 0; - receivedKeyEvent.keyPressedName.clear(); - receivedKeyEvent.keyPressed.clear(); - + receivedKeyEvent.Reset(); } - bool functorCalled; + bool functorCalled; KeyEvent receivedKeyEvent; }; @@ -89,19 +87,19 @@ public: * Constructor * @param[in] returnValue Set return value of KeyEvent callback. * */ - KeyEventCallback( bool consumed ) - : mConsumed( consumed ), - mIsCalled( false ) + KeyEventCallback(bool consumed) + : mConsumed(consumed), + mIsCalled(false) { } - bool Callback( Control control, const KeyEvent& keyEvent ) + bool Callback(Control control, const KeyEvent& keyEvent) { mIsCalled = true; return mConsumed; } - void Callback( const KeyEvent& keyEvent ) + void Callback(const KeyEvent& keyEvent) { mIsCalled = true; } @@ -139,13 +137,14 @@ int UtcDaliKeyInputFocusManagerGet(void) // Check that focus manager is a singleton DALI_TEST_CHECK(manager == newManager); + END_TEST; } int UtcDaliKeyInputFocusManagerSetFocus01(void) { ToolkitTestApplication application; - Stage stage = Stage::GetCurrent(); + Integration::Scene stage = application.GetScene(); tet_infoline(" Check that there is no focused control. Set focus to control. Check it is now the focused actor and receives KeyInputFocusGained signal"); @@ -153,21 +152,21 @@ int UtcDaliKeyInputFocusManagerSetFocus01(void) DALI_TEST_CHECK(manager); Control focusedControl = manager.GetCurrentFocusControl(); - DALI_TEST_CHECK( ! focusedControl ); + DALI_TEST_CHECK(!focusedControl); - DummyControl dummy = DummyControl::New(true); + DummyControl dummy = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(dummy.GetImplementation()); - dummy.SetSize(100.0f, 100.0f); - stage.Add( dummy ); - DALI_TEST_CHECK( ! dummyImpl.keyInputFocusGained ); + dummy.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + stage.Add(dummy); + DALI_TEST_CHECK(!dummyImpl.keyInputFocusGained); - manager.SetFocus( dummy ); - DALI_TEST_CHECK( dummy.HasKeyInputFocus()); // Also tests IsKeyboardListener() API - DALI_TEST_CHECK( dummyImpl.keyInputFocusGained ); + manager.SetFocus(dummy); + DALI_TEST_CHECK(dummy.HasKeyInputFocus()); // Also tests IsKeyboardListener() API + DALI_TEST_CHECK(dummyImpl.keyInputFocusGained); focusedControl = manager.GetCurrentFocusControl(); - DALI_TEST_CHECK( focusedControl ); - DALI_TEST_CHECK( focusedControl == dummy ); + DALI_TEST_CHECK(focusedControl); + DALI_TEST_CHECK(focusedControl == dummy); END_TEST; } @@ -175,97 +174,95 @@ int UtcDaliKeyInputFocusManagerSetFocus01(void) int UtcDaliKeyInputFocusManagerSetFocus02(void) { ToolkitTestApplication application; - Stage stage = Stage::GetCurrent(); + Integration::Scene stage = application.GetScene(); tet_infoline(" Set focus to control. Check it is now the focused actor and receives KeyInputFocusGained signal. Set focuse to another control - check that the first control receives KeyInputFocusLost"); KeyInputFocusManager manager = KeyInputFocusManager::Get(); DALI_TEST_CHECK(manager); - DummyControl dummy1 = DummyControl::New(true); + DummyControl dummy1 = DummyControl::New(true); Impl::DummyControl& dummy1Impl = static_cast(dummy1.GetImplementation()); - dummy1.SetSize(100.0f, 100.0f); - stage.Add( dummy1 ); - DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusGained ); - DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusLost ); - - manager.SetFocus( dummy1 ); - DALI_TEST_CHECK( dummy1.HasKeyInputFocus()); // Also tests IsKeyboardListener() API - DALI_TEST_CHECK( dummy1Impl.keyInputFocusGained ); + dummy1.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + stage.Add(dummy1); + DALI_TEST_CHECK(!dummy1Impl.keyInputFocusGained); + DALI_TEST_CHECK(!dummy1Impl.keyInputFocusLost); + + manager.SetFocus(dummy1); + DALI_TEST_CHECK(dummy1.HasKeyInputFocus()); // Also tests IsKeyboardListener() API + DALI_TEST_CHECK(dummy1Impl.keyInputFocusGained); dummy1Impl.keyInputFocusGained = false; - DummyControl dummy2 = DummyControl::New(true); + DummyControl dummy2 = DummyControl::New(true); Impl::DummyControl& dummy2Impl = static_cast(dummy2.GetImplementation()); - dummy2.SetSize(100.0f, 100.0f); - stage.Add( dummy2 ); - DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusGained ); - DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusLost ); - - manager.SetFocus( dummy2 ); - DALI_TEST_CHECK( dummy2.HasKeyInputFocus()); // Also tests IsKeyboardListener() API - DALI_TEST_CHECK( dummy2Impl.keyInputFocusGained ); + dummy2.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + stage.Add(dummy2); + DALI_TEST_CHECK(!dummy2Impl.keyInputFocusGained); + DALI_TEST_CHECK(!dummy1Impl.keyInputFocusLost); + + manager.SetFocus(dummy2); + DALI_TEST_CHECK(dummy2.HasKeyInputFocus()); // Also tests IsKeyboardListener() API + DALI_TEST_CHECK(dummy2Impl.keyInputFocusGained); dummy1Impl.keyInputFocusGained = false; - DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusGained ); - DALI_TEST_CHECK( dummy1Impl.keyInputFocusLost ); + DALI_TEST_CHECK(!dummy1Impl.keyInputFocusGained); + DALI_TEST_CHECK(dummy1Impl.keyInputFocusLost); END_TEST; } int UtcDaliKeyInputFocusManagerKeyEventPropagation01(void) { - ToolkitTestApplication application; - Stage stage = Stage::GetCurrent(); + Integration::Scene stage = application.GetScene(); tet_infoline("Test KeyEvent propagation. If focused control doesn't consume KeyEvent, KeyEvent will be recursively delivered to the control and its parents, until the event is consumed or the stage is reached. In this case, KeyEvent is delivered to KeyboardFocusManager via Stage's KeyEventSignal"); KeyInputFocusManager manager = KeyInputFocusManager::Get(); DALI_TEST_CHECK(manager); - KeyEventCallback stageCallback( false ); - stage.KeyEventSignal().Connect( &stageCallback, &KeyEventCallback::Callback ); + KeyEventCallback stageCallback(false); + stage.KeyEventSignal().Connect(&stageCallback, &KeyEventCallback::Callback); DummyControl dummy1 = DummyControl::New(true); - dummy1.SetSize(100.0f, 100.0f); - KeyEventCallback callback1( false ); - dummy1.KeyEventSignal().Connect( &callback1, &KeyEventCallback::Callback ); - stage.Add( dummy1 ); + dummy1.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + KeyEventCallback callback1(false); + dummy1.KeyEventSignal().Connect(&callback1, &KeyEventCallback::Callback); + stage.Add(dummy1); DummyControl dummy2 = DummyControl::New(true); - dummy2.SetSize(100.0f, 100.0f); - KeyEventCallback callback2( false ); - dummy2.KeyEventSignal().Connect( &callback2, &KeyEventCallback::Callback ); - dummy1.Add( dummy2 ); + dummy2.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + KeyEventCallback callback2(false); + dummy2.KeyEventSignal().Connect(&callback2, &KeyEventCallback::Callback); + dummy1.Add(dummy2); - DummyControl dummy3 = DummyControl::New(true); + DummyControl dummy3 = DummyControl::New(true); Impl::DummyControl& dummy3Impl = static_cast(dummy3.GetImplementation()); - dummy3.SetSize(100.0f, 100.0f); - KeyEventCallback callback3( false ); - dummy3.KeyEventSignal().Connect( &callback3, &KeyEventCallback::Callback ); - dummy2.Add( dummy3 ); - DALI_TEST_CHECK( ! dummy3Impl.keyInputFocusGained ); - DALI_TEST_CHECK( ! dummy3Impl.keyInputFocusLost ); + dummy3.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + KeyEventCallback callback3(false); + dummy3.KeyEventSignal().Connect(&callback3, &KeyEventCallback::Callback); + dummy2.Add(dummy3); + DALI_TEST_CHECK(!dummy3Impl.keyInputFocusGained); + DALI_TEST_CHECK(!dummy3Impl.keyInputFocusLost); - manager.SetFocus( dummy3 ); - DALI_TEST_CHECK( dummy3Impl.keyInputFocusGained ); + manager.SetFocus(dummy3); + DALI_TEST_CHECK(dummy3Impl.keyInputFocusGained); - Integration::KeyEvent event( "a", "a", 0, 0, 0, Integration::KeyEvent::Up, "", DevelKeyEvent::DeviceClass::TOUCH ); + Integration::KeyEvent event("a", "", "a", 0, 0, 0, Integration::KeyEvent::UP, "", "", Device::Class::TOUCH, Device::Subclass::NONE); application.ProcessEvent(event); - DALI_TEST_CHECK( callback1.mIsCalled ); - DALI_TEST_CHECK( callback2.mIsCalled ); - DALI_TEST_CHECK( callback3.mIsCalled ); - DALI_TEST_CHECK( stageCallback.mIsCalled ); + DALI_TEST_CHECK(callback1.mIsCalled); + DALI_TEST_CHECK(callback2.mIsCalled); + DALI_TEST_CHECK(callback3.mIsCalled); + DALI_TEST_CHECK(stageCallback.mIsCalled); END_TEST; } int UtcDaliKeyInputFocusManagerKeyEventPropagation02(void) { - ToolkitTestApplication application; - Stage stage = Stage::GetCurrent(); + Integration::Scene stage = application.GetScene(); tet_infoline("Test KeyEvent propagation. If focused control doesn't consume KeyEvent, KeyEvent will be recursively delivered to the control and its parents, until the event is consumed or the stage is reached. In this case, KeyEvent is delivered from dummy3 to dummy2"); @@ -273,35 +270,81 @@ int UtcDaliKeyInputFocusManagerKeyEventPropagation02(void) DALI_TEST_CHECK(manager); DummyControl dummy1 = DummyControl::New(true); - dummy1.SetSize(100.0f, 100.0f); - KeyEventCallback callback1( false ); - dummy1.KeyEventSignal().Connect( &callback1, &KeyEventCallback::Callback ); - stage.Add( dummy1 ); + dummy1.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + KeyEventCallback callback1(false); + dummy1.KeyEventSignal().Connect(&callback1, &KeyEventCallback::Callback); + stage.Add(dummy1); DummyControl dummy2 = DummyControl::New(true); - dummy2.SetSize(100.0f, 100.0f); - KeyEventCallback callback2( true ); - dummy2.KeyEventSignal().Connect( &callback2, &KeyEventCallback::Callback ); - dummy1.Add( dummy2 ); + dummy2.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + KeyEventCallback callback2(true); + dummy2.KeyEventSignal().Connect(&callback2, &KeyEventCallback::Callback); + dummy1.Add(dummy2); - DummyControl dummy3 = DummyControl::New(true); + DummyControl dummy3 = DummyControl::New(true); Impl::DummyControl& dummy3Impl = static_cast(dummy3.GetImplementation()); - dummy3.SetSize(100.0f, 100.0f); - KeyEventCallback callback3( false ); - dummy3.KeyEventSignal().Connect( &callback3, &KeyEventCallback::Callback ); - dummy2.Add( dummy3 ); - DALI_TEST_CHECK( ! dummy3Impl.keyInputFocusGained ); - DALI_TEST_CHECK( ! dummy3Impl.keyInputFocusLost ); + dummy3.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + KeyEventCallback callback3(false); + dummy3.KeyEventSignal().Connect(&callback3, &KeyEventCallback::Callback); + dummy2.Add(dummy3); + DALI_TEST_CHECK(!dummy3Impl.keyInputFocusGained); + DALI_TEST_CHECK(!dummy3Impl.keyInputFocusLost); - manager.SetFocus( dummy3 ); - DALI_TEST_CHECK( dummy3Impl.keyInputFocusGained ); + manager.SetFocus(dummy3); + DALI_TEST_CHECK(dummy3Impl.keyInputFocusGained); - Integration::KeyEvent event( "a", "a", 0, 0, 0, Integration::KeyEvent::Up, "", DevelKeyEvent::DeviceClass::TOUCH ); + Integration::KeyEvent event("a", "", "a", 0, 0, 0, Integration::KeyEvent::UP, "", "", Device::Class::TOUCH, Device::Subclass::NONE); application.ProcessEvent(event); - DALI_TEST_CHECK( !callback1.mIsCalled ); - DALI_TEST_CHECK( callback2.mIsCalled ); - DALI_TEST_CHECK( callback3.mIsCalled ); + DALI_TEST_CHECK(!callback1.mIsCalled); + DALI_TEST_CHECK(callback2.mIsCalled); + DALI_TEST_CHECK(callback3.mIsCalled); + + END_TEST; +} + +int UtcDaliKeyInputFocusManagerDispatchKeyEvents(void) +{ + ToolkitTestApplication application; + Integration::Scene stage = application.GetScene(); + + tet_infoline("Test KeyEvents propagation. If DISPATCH_KEY_EVENTS property is false, the KeyEvent is also not received."); + + KeyInputFocusManager manager = KeyInputFocusManager::Get(); + DALI_TEST_CHECK(manager); + + DummyControl dummy1 = DummyControl::New(true); + dummy1.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + KeyEventCallback callback1(false); + dummy1.KeyEventSignal().Connect(&callback1, &KeyEventCallback::Callback); + stage.Add(dummy1); + + DummyControl dummy2 = DummyControl::New(true); + dummy2.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + KeyEventCallback callback2(false); + dummy2.KeyEventSignal().Connect(&callback2, &KeyEventCallback::Callback); + // dummy2 set DISPATCH_KEY_EVENTS property to false. + dummy2.SetProperty(Toolkit::DevelControl::Property::DISPATCH_KEY_EVENTS, false); + dummy1.Add(dummy2); + + DummyControl dummy3 = DummyControl::New(true); + Impl::DummyControl& dummy3Impl = static_cast(dummy3.GetImplementation()); + dummy3.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + KeyEventCallback callback3(false); + dummy3.KeyEventSignal().Connect(&callback3, &KeyEventCallback::Callback); + dummy2.Add(dummy3); + DALI_TEST_CHECK(!dummy3Impl.keyInputFocusGained); + DALI_TEST_CHECK(!dummy3Impl.keyInputFocusLost); + + manager.SetFocus(dummy3); + DALI_TEST_CHECK(dummy3Impl.keyInputFocusGained); + + Integration::KeyEvent event("a", "", "a", 0, 0, 0, Integration::KeyEvent::UP, "", "", Device::Class::TOUCH, Device::Subclass::NONE); + application.ProcessEvent(event); + + DALI_TEST_CHECK(!callback1.mIsCalled); + DALI_TEST_CHECK(!callback2.mIsCalled); + DALI_TEST_CHECK(!callback3.mIsCalled); END_TEST; } @@ -309,81 +352,81 @@ int UtcDaliKeyInputFocusManagerKeyEventPropagation02(void) int UtcDaliKeyInputFocusManagerGetCurrentFocusControl(void) { ToolkitTestApplication application; - Stage stage = Stage::GetCurrent(); + Integration::Scene stage = application.GetScene(); tet_infoline(" Add 2 controls, check they each get focused. Re-focus the first control - ensure it's now got focus (check signals)"); KeyInputFocusManager manager = KeyInputFocusManager::Get(); DALI_TEST_CHECK(manager); - DummyControl dummy1 = DummyControl::New(true); + DummyControl dummy1 = DummyControl::New(true); Impl::DummyControl& dummy1Impl = static_cast(dummy1.GetImplementation()); - dummy1.SetSize(100.0f, 100.0f); - stage.Add( dummy1 ); - DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusGained ); - DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusLost ); + dummy1.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + stage.Add(dummy1); + DALI_TEST_CHECK(!dummy1Impl.keyInputFocusGained); + DALI_TEST_CHECK(!dummy1Impl.keyInputFocusLost); - DummyControl dummy2 = DummyControl::New(true); + DummyControl dummy2 = DummyControl::New(true); Impl::DummyControl& dummy2Impl = static_cast(dummy2.GetImplementation()); - dummy2.SetSize(100.0f, 100.0f); - stage.Add( dummy2 ); - DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusGained ); - DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusLost ); + dummy2.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + stage.Add(dummy2); + DALI_TEST_CHECK(!dummy2Impl.keyInputFocusGained); + DALI_TEST_CHECK(!dummy2Impl.keyInputFocusLost); manager.SetFocus(dummy1); - DALI_TEST_CHECK( dummy1 == manager.GetCurrentFocusControl() ); - DALI_TEST_CHECK( dummy1Impl.keyInputFocusGained ); - DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusLost ); + DALI_TEST_CHECK(dummy1 == manager.GetCurrentFocusControl()); + DALI_TEST_CHECK(dummy1Impl.keyInputFocusGained); + DALI_TEST_CHECK(!dummy1Impl.keyInputFocusLost); dummy1Impl.keyInputFocusGained = false; - dummy1Impl.keyInputFocusLost = false; + dummy1Impl.keyInputFocusLost = false; manager.SetFocus(dummy2); - DALI_TEST_CHECK( dummy2 == manager.GetCurrentFocusControl() ); - DALI_TEST_CHECK( dummy1Impl.keyInputFocusLost ); - DALI_TEST_CHECK( dummy2Impl.keyInputFocusGained ); - DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusGained ); - DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusLost ); + DALI_TEST_CHECK(dummy2 == manager.GetCurrentFocusControl()); + DALI_TEST_CHECK(dummy1Impl.keyInputFocusLost); + DALI_TEST_CHECK(dummy2Impl.keyInputFocusGained); + DALI_TEST_CHECK(!dummy1Impl.keyInputFocusGained); + DALI_TEST_CHECK(!dummy2Impl.keyInputFocusLost); // Reset signal received dummy1Impl.keyInputFocusGained = false; - dummy1Impl.keyInputFocusLost = false; + dummy1Impl.keyInputFocusLost = false; dummy2Impl.keyInputFocusGained = false; - dummy2Impl.keyInputFocusLost = false; + dummy2Impl.keyInputFocusLost = false; manager.SetFocus(dummy1); - DALI_TEST_CHECK( dummy1 == manager.GetCurrentFocusControl()); - DALI_TEST_CHECK( dummy1Impl.keyInputFocusGained ); - DALI_TEST_CHECK( dummy2Impl.keyInputFocusLost ); - DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusLost ); - DALI_TEST_CHECK( ! dummy2Impl.keyInputFocusGained ); + DALI_TEST_CHECK(dummy1 == manager.GetCurrentFocusControl()); + DALI_TEST_CHECK(dummy1Impl.keyInputFocusGained); + DALI_TEST_CHECK(dummy2Impl.keyInputFocusLost); + DALI_TEST_CHECK(!dummy1Impl.keyInputFocusLost); + DALI_TEST_CHECK(!dummy2Impl.keyInputFocusGained); END_TEST; } int UtcDaliKeyInputFocusManagerRemoveFocus(void) { ToolkitTestApplication application; - Stage stage = Stage::GetCurrent(); + Integration::Scene stage = application.GetScene(); tet_infoline(" Add focus controls. Test that removing focus from control which has focus. "); KeyInputFocusManager manager = KeyInputFocusManager::Get(); DALI_TEST_CHECK(manager); - DummyControl dummy1 = DummyControl::New(true); + DummyControl dummy1 = DummyControl::New(true); Impl::DummyControl& dummy1Impl = static_cast(dummy1.GetImplementation()); - dummy1.SetSize(100.0f, 100.0f); - stage.Add( dummy1 ); - DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusGained ); - DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusLost ); + dummy1.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + stage.Add(dummy1); + DALI_TEST_CHECK(!dummy1Impl.keyInputFocusGained); + DALI_TEST_CHECK(!dummy1Impl.keyInputFocusLost); manager.SetFocus(dummy1); DALI_TEST_CHECK(dummy1 == manager.GetCurrentFocusControl()); dummy1Impl.keyInputFocusGained = false; - dummy1Impl.keyInputFocusLost = false; + dummy1Impl.keyInputFocusLost = false; manager.RemoveFocus(dummy1); DALI_TEST_CHECK(Control() == manager.GetCurrentFocusControl()); - DALI_TEST_CHECK( dummy1Impl.keyInputFocusLost ); - DALI_TEST_CHECK( ! dummy1Impl.keyInputFocusGained ); + DALI_TEST_CHECK(dummy1Impl.keyInputFocusLost); + DALI_TEST_CHECK(!dummy1Impl.keyInputFocusGained); END_TEST; } @@ -391,42 +434,117 @@ int UtcDaliKeyInputFocusManagerRemoveFocus(void) int UtcDaliKeyInputFocusManagerSignalKeyInputFocusChanged(void) { ToolkitTestApplication application; - KeyInputFocusManager manager = KeyInputFocusManager::Get(); - Stage stage = Stage::GetCurrent(); + KeyInputFocusManager manager = KeyInputFocusManager::Get(); + Integration::Scene stage = application.GetScene(); tet_infoline(" UtcDaliKeyInputFocusManagerSignalKeyInputFocusChanged"); PushButton pushButton1 = PushButton::New(); PushButton pushButton2 = PushButton::New(); - stage.Add( pushButton1 ); - stage.Add( pushButton2 ); + stage.Add(pushButton1); + stage.Add(pushButton2); - PushButton gainActor, lostActor; - KeyInputFocusChangedCallback callback( gainActor, lostActor ); - manager.KeyInputFocusChangedSignal().Connect( &callback, &KeyInputFocusChangedCallback::Callback ); + PushButton gainActor, lostActor; + KeyInputFocusChangedCallback callback(gainActor, lostActor); + manager.KeyInputFocusChangedSignal().Connect(&callback, &KeyInputFocusChangedCallback::Callback); manager.SetFocus(pushButton1); - DALI_TEST_CHECK( gainActor == pushButton1 ); - DALI_TEST_CHECK( lostActor == Control() ); + DALI_TEST_CHECK(gainActor == pushButton1); + DALI_TEST_CHECK(lostActor == Control()); gainActor.Reset(); lostActor.Reset(); manager.SetFocus(pushButton2); - DALI_TEST_CHECK( gainActor == pushButton2 ); - DALI_TEST_CHECK( lostActor == pushButton1 ); + DALI_TEST_CHECK(gainActor == pushButton2); + DALI_TEST_CHECK(lostActor == pushButton1); gainActor.Reset(); lostActor.Reset(); // Removing the focus actor from the stage would also result in signal emission. - stage.Remove( pushButton1 ); - stage.Remove( pushButton2 ); + stage.Remove(pushButton1); + stage.Remove(pushButton2); + + DALI_TEST_CHECK(gainActor == Control()); + DALI_TEST_CHECK(lostActor == Control()); + END_TEST; +} + +int UtcDaliKeyInputFocusManagerSignalKeyInputFocusChangedforNewWindow(void) +{ + ToolkitTestApplication application; + KeyInputFocusManager manager = KeyInputFocusManager::Get(); + + tet_infoline(" UtcDaliKeyInputFocusManagerSignalKeyInputFocusChanged"); + + PushButton pushButton1 = PushButton::New(); + PushButton pushButton2 = PushButton::New(); + + Window window = Window::New(PositionSize(0, 0, 0, 0), "", false); + DALI_TEST_CHECK(window); + + window.Add(pushButton1); + window.Add(pushButton2); + + PushButton gainActor, lostActor; + KeyInputFocusChangedCallback callback(gainActor, lostActor); + manager.KeyInputFocusChangedSignal().Connect(&callback, &KeyInputFocusChangedCallback::Callback); + + manager.SetFocus(pushButton1); + + DALI_TEST_CHECK(gainActor == pushButton1); + DALI_TEST_CHECK(lostActor == Control()); + + gainActor.Reset(); + lostActor.Reset(); + + manager.SetFocus(pushButton2); + + DALI_TEST_CHECK(gainActor == pushButton2); + DALI_TEST_CHECK(lostActor == pushButton1); + + gainActor.Reset(); + lostActor.Reset(); + + // Removing the focus actor from the window would also result in signal emission. + window.Remove(pushButton1); + window.Remove(pushButton2); + DALI_TEST_CHECK(gainActor == Control()); + DALI_TEST_CHECK(lostActor == Control()); + + window.Reset(); + END_TEST; +} + +int UtcDaliKeyInputFocusManagerKeyEventOtherWindow(void) +{ + ToolkitTestApplication application; + + tet_infoline(" UtcDaliKeyInputFocusManagerSignalKeyEventOtherWindow"); + + Dali::Integration::Scene scene = application.GetScene(); + + KeyInputFocusManager manager = KeyInputFocusManager::Get(); + DALI_TEST_CHECK(manager); + + PushButton pushButton1 = PushButton::New(); + scene.Add(pushButton1); + + KeyEventCallback windowCallback(false); + pushButton1.KeyEventSignal().Connect(&windowCallback, &KeyEventCallback::Callback); + + manager.SetFocus(pushButton1); + + Integration::KeyEvent event("a", "", "a", 0, 0, 0, Integration::KeyEvent::UP, "", "", Device::Class::TOUCH, Device::Subclass::NONE); + event.windowId = 3; + + application.ProcessEvent(event); + + DALI_TEST_CHECK(!windowCallback.mIsCalled); - DALI_TEST_CHECK( gainActor == Control() ); - DALI_TEST_CHECK( lostActor == Control() ); END_TEST; }