X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit-internal%2Futc-Dali-Accessibility-Controls-BridgeUp.cpp;h=047018d371ac407c6d063ebbbca551e0168b395b;hp=484e0de49116f7651c08b75bd5679dccee5fb25e;hb=refs%2Fchanges%2F79%2F265679%2F5;hpb=a1d8151d48f5de5e02670b0f519ce87ad98781cf diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp index 484e0de..047018d 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp @@ -4,8 +4,10 @@ #include #include #include +#include +#include #include -#include +#include #include #include #include @@ -39,10 +41,10 @@ namespace Dali { int UtcDaliControlAccessibilityRaiseBridge(void) { - ToolkitTestApplication application; - DALI_TEST_CHECK(!Accessibility::IsUp()); + ToolkitTestApplication application; + Dali::Accessibility::TestEnableSC(true); DALI_TEST_CHECK(Accessibility::IsUp()); @@ -89,6 +91,7 @@ int UtcDaliControlAccessibilityName(void) DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , TestGetName( q->GetAddress()), TEST_LOCATION ); + //TODO test emission of name change signal Dali::Accessibility::TestEnableSC( false ); END_TEST; @@ -120,6 +123,7 @@ int UtcDaliControlAccessibilityDescription(void) DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , TestGetDescription( q->GetAddress()), TEST_LOCATION ); + //TODO test emission of description change signal Dali::Accessibility::TestEnableSC( false ); END_TEST; @@ -159,6 +163,67 @@ int UtcDaliControlAccessibilityRole(void) END_TEST; } +int UtcDaliControlAccessibilityRoleToggleButton(void) +{ + ToolkitTestApplication application; + + auto control = Dali::Toolkit::ToggleButton::New(); + auto button = Dali::Accessibility::Role::TOGGLE_BUTTON; + + control.SetProperty(Toolkit::ToggleButton::Property::TOOLTIPS, + Property::Array{"option1", "option2"}); + + Dali::Accessibility::TestEnableSC( true ); + + control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button ); + auto q = Dali::Accessibility::Accessible::Get( control ); + + DALI_TEST_EQUALS( button , q->GetRole(), TEST_LOCATION); + DALI_TEST_EQUALS( "toggle button" , q->GetRoleName(), TEST_LOCATION ); + + Dali::Accessibility::States states = q->GetStates(); + DALI_TEST_EQUALS( true , (bool)states[Dali::Accessibility::State::VISIBLE], TEST_LOCATION); + + DALI_TEST_EQUALS( "option1", q->GetDescription(), TEST_LOCATION ); + + auto i = dynamic_cast(q); + if (i) + i->GrabHighlight(); + + control.SetProperty( Toolkit::Button::Property::LABEL, "ToggleButton2" ); + DALI_TEST_EQUALS( "ToggleButton2", TestGetName( q->GetAddress() ), TEST_LOCATION ); + + Dali::Accessibility::TestEnableSC( false ); + + END_TEST; +} + +int UtcDaliControlAccessibilityButtonLabel(void) +{ + ToolkitTestApplication application; + + auto control = Dali::Toolkit::PushButton::New(); + auto button = Dali::Accessibility::Role::PUSH_BUTTON; + + Dali::Accessibility::TestEnableSC( true ); + + control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button ); + + auto q = Dali::Accessibility::Accessible::Get( control ); + auto i = dynamic_cast(q); + + if (i) + i->GrabHighlight(); + + control.SetProperty( Toolkit::Button::Property::LABEL, "Button2" ); + + DALI_TEST_EQUALS( "Button2" , TestGetName( q->GetAddress() ), TEST_LOCATION ); + + Dali::Accessibility::TestEnableSC( false ); + + END_TEST; +} + int UtcDaliControlAccessibilityState(void) { ToolkitTestApplication application; @@ -180,10 +245,16 @@ int UtcDaliControlAccessibilityState(void) int UtcDaliControlAccessibilityModal(void) { ToolkitTestApplication application; - auto control = TextSelectionPopup::New( NULL ); - auto states = DevelControl::GetAccessibilityStates(control); - DALI_TEST_CHECK( states[ Dali::Accessibility::State::MODAL ] ); + auto control = Dali::Toolkit::Popup::New(); + auto q = Dali::Accessibility::Accessible::Get( control ); + + Dali::Accessibility::TestEnableSC( true ); + + auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )}; + DALI_TEST_CHECK( states_by_bridge[Dali::Accessibility::State::MODAL] ); + + Dali::Accessibility::TestEnableSC( false ); END_TEST; } @@ -196,12 +267,17 @@ int UtcDaliControlAccessibilityHighlightable(void) auto noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ); DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION ); + // negative testcase - trying to set unconvertible value + control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, "deadbeef" ); + noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ); + DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION ); + auto q = Dali::Accessibility::Accessible::Get( control ); Dali::Accessibility::TestEnableSC( true ); auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )}; - DALI_TEST_CHECK( states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] ); + DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] ); control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true ); DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION ); @@ -228,6 +304,10 @@ int UtcDaliControlAccessibilityHighlightBridgeUp(void) auto controla = Control::New(); auto controlb = Control::New(); + controla.Add(controlb); + + controla.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true ); + controlb.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true ); Dali::Accessibility::TestEnableSC( true ); @@ -381,6 +461,22 @@ int UtcDaliControlReadingInfoType(void) auto control = Control::New(); auto reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control); + + for ( auto i = 0u; i < 4; ++i) + DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]); + + reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = false; + reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = false; + reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = false; + reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = false; + + DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type); + + reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control); + + for ( auto i = 0u; i < 4; ++i) + DALI_TEST_CHECK ( false == reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]); + reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = true; reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = true; reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = true; @@ -599,17 +695,24 @@ int UtcDaliAccessibilityGrabFocus(void) END_TEST; } -int UtcDaliAccessibilityGetExtents(void) +int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch(void) { ToolkitTestApplication application; + tet_infoline( "UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch" ); Dali::Accessibility::TestEnableSC( true ); auto control = Control::New(); Stage::GetCurrent().GetRootLayer().Add( control ); - control.SetProperty(Actor::Property::POSITION, Vector3(10, 10, 100)); - control.SetProperty(Actor::Property::SIZE, Vector2(10, 10)); + auto window = Dali::DevelWindow::Get( control ); + DALI_TEST_CHECK( window ); + + //window.SetPosition({0,0}); + DevelWindow::SetPositionSize( window, PositionSize( 0,0,480, 240 ) ); + + control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) ); + control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) ); application.SendNotification(); application.Render( 1 ); @@ -617,13 +720,103 @@ int UtcDaliAccessibilityGetExtents(void) auto a = Dali::Accessibility::Accessible::Get( control ); auto a_component = dynamic_cast( a ); - auto extents = a_component->GetExtents(Dali::Accessibility::CoordType::SCREEN); + auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN ); + DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION ); + + auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN ); + DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION ); + + extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW ); + DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION ); + + bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW ); + DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION ); + + control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false ); + application.SendNotification(); + application.Render( 1 ); + + extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN ); + DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION ); + + bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN ); + DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION ); + + extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW ); + DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION ); + + bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW ); + DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION ); + + Dali::Accessibility::TestEnableSC( false ); + + END_TEST; +} + +int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionDoNotMatch(void) +{ + ToolkitTestApplication application; + + Dali::Accessibility::TestEnableSC( true ); + + auto control = Control::New(); + Stage::GetCurrent().GetRootLayer().Add( control ); + auto window = Dali::DevelWindow::Get( control ); + //window.SetPosition({33,33}); + DevelWindow::SetPositionSize( window, PositionSize( 33,33,480, 240 ) ); + + control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) ); + control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) ); + + application.SendNotification(); + application.Render( 1 ); + + auto a = Dali::Accessibility::Accessible::Get( control ); + auto a_component = dynamic_cast( a ); + + auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN ); + DALI_TEST_EQUALS( extents.x, 38.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.y, 38.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION ); + + auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN ); + DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 38, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 38, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION ); + + extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW ); DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION ); DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION ); DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION ); DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION ); - auto bridge_extents = TestGetExtents( a_component -> GetAddress() ); + bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW ); DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION ); DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION ); DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION ); @@ -633,13 +826,25 @@ int UtcDaliAccessibilityGetExtents(void) application.SendNotification(); application.Render( 1 ); - extents = a_component->GetExtents(Dali::Accessibility::CoordType::SCREEN); + extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN ); + DALI_TEST_EQUALS( extents.x, 43.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.y, 43.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION ); + + bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN ); + DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 43, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 43, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION ); + DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION ); + + extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW ); DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION ); DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION ); DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION ); DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION ); - bridge_extents = TestGetExtents( a_component -> GetAddress() ); + bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW ); DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION ); DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION ); DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION ); @@ -696,10 +901,10 @@ int UtcDaliAccessibilityAction(void) auto a = Dali::Accessibility::Accessible::Get( control ); auto b = dynamic_cast( a ); - std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "show", "hide" }; + std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" }; auto count = b -> GetActionCount(); - DALI_TEST_EQUALS( count, 7, TEST_LOCATION ); + DALI_TEST_EQUALS( count, 9, TEST_LOCATION ); for (auto i = 0u; i GetActionKeyBinding( i ), "", TEST_LOCATION ); } - try - { - b ->GetActionDescription( count ); - DALI_ABORT( "Correct index, abort" ); - } - catch( std::domain_error &){} - - try - { - b ->GetActionName( count ); - DALI_ABORT( "Correct index, abort" ); - } - catch( std::domain_error &){} - - try - { - b ->GetLocalizedActionName( count ); - DALI_ABORT( "Correct index, abort" ); - } - catch( std::domain_error &){} - - try - { - b ->GetActionKeyBinding( count ); - DALI_ABORT( "Correct index, abort" ); - } - catch( std::domain_error &){} + // Empty strings should be returned for invalid indices + DALI_TEST_EQUALS(b->GetActionDescription(count), "", TEST_LOCATION); + DALI_TEST_EQUALS(b->GetActionName(count), "", TEST_LOCATION); + DALI_TEST_EQUALS(b->GetLocalizedActionName(count), "", TEST_LOCATION); + DALI_TEST_EQUALS(b->GetActionKeyBinding(count), "", TEST_LOCATION); count = TestGetActionCount(b -> GetAddress()); - DALI_TEST_EQUALS( count, 7, TEST_LOCATION ); + DALI_TEST_EQUALS( count, 9, TEST_LOCATION ); for (auto i = 0u; iGetAddress(), i ), "", TEST_LOCATION ); } - try - { - TestGetActionDescription( b->GetAddress(), count ); - DALI_ABORT( "Correct index, abort" ); - } - catch( TestDBusWrapper::error& ){} - - try - { - TestGetActionName( b->GetAddress(), count ); - DALI_ABORT( "Correct index, abort" ); - } - catch( TestDBusWrapper::error& ){} - - try - { - TestGetLocalizedActionName( b->GetAddress(), count ); - DALI_ABORT( "Correct index, abort" ); - } - catch( TestDBusWrapper::error& ){} - - try - { - TestGetActionKeyBinding( b->GetAddress(), count ); - DALI_ABORT( "Correct index, abort" ); - } - catch( TestDBusWrapper::error& ){} - + DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), count), "", TEST_LOCATION); + DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), count), "", TEST_LOCATION); + DALI_TEST_EQUALS(TestGetLocalizedActionName(b->GetAddress(), count), "", TEST_LOCATION); + DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), count), "", TEST_LOCATION); Dali::Accessibility::TestEnableSC( false ); @@ -788,16 +947,20 @@ int UtcDaliAccessibilityDoAction(void) ToolkitTestApplication application; Dali::Accessibility::TestEnableSC( true ); - thread_local std::vector< bool > actions_done { false, false, false, false }; + thread_local std::vector< bool > actions_done { false, false, false, false, false, false }; auto control = Control::New( ); auto a = Dali::Accessibility::Accessible::Get( control ); auto b = dynamic_cast( a ); - std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "show", "hide" }; + std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" }; - DALI_TEST_CHECK( b -> DoAction( actions[2] ) ); - DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); - DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); + // Test calling action by name + DALI_TEST_CHECK( b -> DoAction( actions[2] ) ); // ReadingSkipped + DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped + DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped + + // Negative test of calling action with not defined name + DALI_TEST_CHECK( !b -> DoAction( "undefined" ) ); DevelControl::AccessibilityReadingSkippedSignal(control).Connect( [] () { actions_done[ 1 ] = true; @@ -808,14 +971,23 @@ int UtcDaliAccessibilityDoAction(void) DevelControl::AccessibilityReadingStoppedSignal(control).Connect( [] () { actions_done[ 3 ] = true; } ); + DevelControl::AccessibilityReadingPausedSignal(control).Connect( [] () { + actions_done[ 4 ] = true; + } ); + DevelControl::AccessibilityReadingResumedSignal(control).Connect( [] () { + actions_done[ 5 ] = true; + } ); DevelControl::AccessibilityActivateSignal(control).Connect( [] () { actions_done[ 0 ] = true; } ); + // Test calling action by index DALI_TEST_CHECK( b -> DoAction( 1 ) ); DALI_TEST_CHECK( b -> DoAction( 2 ) ); DALI_TEST_CHECK( b -> DoAction( 3 ) ); DALI_TEST_CHECK( b -> DoAction( 4 ) ); + DALI_TEST_CHECK( b -> DoAction( 5 ) ); + DALI_TEST_CHECK( b -> DoAction( 6 ) ); for ( auto i = 0u; i < actions_done.size(); ++i ) { @@ -827,6 +999,8 @@ int UtcDaliAccessibilityDoAction(void) DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 2 ) ); DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 3 ) ); DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 4 ) ); + DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 5 ) ); + DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 6 ) ); for ( auto i = 0u; i < actions_done.size(); ++i ) { @@ -838,6 +1012,8 @@ int UtcDaliAccessibilityDoAction(void) DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 2 ] ) ); DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 3 ] ) ); DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 4 ] ) ); + DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 5 ] ) ); + DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 6 ] ) ); for ( auto i = 0u; i < actions_done.size(); ++i ) DALI_TEST_CHECK( actions_done[ i ] ); @@ -846,3 +1022,255 @@ int UtcDaliAccessibilityDoAction(void) END_TEST; } + +void TestVoidCallback() +{ +} + +int UtcDaliAccessibilitySignals(void) +{ + ToolkitTestApplication application; + ConnectionTracker connectionTracker; + Control control = Control::New(); + + DALI_TEST_CHECK( DevelControl::AccessibilityGetNameSignal(control).Empty() ); + control.ConnectSignal( &connectionTracker, "getName", &TestVoidCallback ); + DALI_TEST_CHECK( !DevelControl::AccessibilityGetNameSignal(control).Empty() ); + + DALI_TEST_CHECK( DevelControl::AccessibilityGetDescriptionSignal(control).Empty() ); + control.ConnectSignal( &connectionTracker, "getDescription", &TestVoidCallback ); + DALI_TEST_CHECK( !DevelControl::AccessibilityGetDescriptionSignal(control).Empty() ); + + DALI_TEST_CHECK( DevelControl::AccessibilityDoGestureSignal(control).Empty() ); + control.ConnectSignal( &connectionTracker, "doGesture", &TestVoidCallback ); + DALI_TEST_CHECK( !DevelControl::AccessibilityDoGestureSignal(control).Empty() ); + + END_TEST; +} + +static void Wait(ToolkitTestApplication& application) +{ + application.SendNotification(); + application.Render(16); +} + +int UtcDaliAccessibilityScrollToChildScrollView(void) +{ + ToolkitTestApplication application; + Dali::Accessibility::TestEnableSC( true ); + + ScrollView scrollView = ScrollView::New(); + application.GetScene().Add( scrollView ); + + PushButton actorA = PushButton::New(); + const Dali::Vector3 positionA = Vector3(100.0f, 400.0f, 0.0f); + actorA.SetProperty( Dali::Actor::Property::POSITION, positionA ); + scrollView.Add(actorA); + + PushButton actorB = PushButton::New(); + const Dali::Vector3 positionB = Vector3(500.0f, 200.0f, 0.0f); + actorB.SetProperty( Dali::Actor::Property::POSITION, positionB ); + scrollView.Add(actorB); + + Wait(application); + + auto* accessibleParent = dynamic_cast(Dali::Accessibility::Accessible::Get(scrollView)); + DALI_TEST_CHECK(accessibleParent); + auto* accessibleA = dynamic_cast(Dali::Accessibility::Accessible::Get(actorA)); + DALI_TEST_CHECK(accessibleA); + auto* accessibleB = dynamic_cast(Dali::Accessibility::Accessible::Get(actorB)); + DALI_TEST_CHECK(accessibleB); + + accessibleA->GrabHighlight(); // == scrollView.ScrollTo(actorA) + Wait(application); + accessibleB->GrabHighlight(); // == scrollView.ScrollTo(actorB) + Wait(application); + + Dali::Accessibility::TestEnableSC( false ); + END_TEST; +} + +namespace { + class TestItemFactory : public ItemFactory + { + public: + TestItemFactory() + { + } + + unsigned int GetNumberOfItems() override + { + return 2; + } + + Dali::Actor NewItem(unsigned int itemId) override + { + return TextLabel::New(std::to_string(itemId)); + } + }; +} + +int UtcDaliAccessibilityScrollToChildItemView(void) +{ + ToolkitTestApplication application; + Dali::Accessibility::TestEnableSC( true ); + + TestItemFactory factory; + ItemView view = ItemView::New(factory); + Dali::Vector3 vec(480.0f, 800.0f, 0.0f); + ItemLayoutPtr layout = DefaultItemLayout::New( DefaultItemLayout::DEPTH ); + + view.AddLayout(*layout); + view.SetProperty( Actor::Property::SIZE, vec ); + + application.GetScene().Add(view); + layout->SetOrientation(ControlOrientation::Down); + view.ActivateLayout(0, vec, 0.0f); + + Wait(application); + + auto* accessibleParent = dynamic_cast(Dali::Accessibility::Accessible::Get(view)); + DALI_TEST_CHECK(accessibleParent); + auto* accessibleA = dynamic_cast(Dali::Accessibility::Accessible::Get(view.GetItem(0))); + DALI_TEST_CHECK(accessibleA); + auto* accessibleB = dynamic_cast(Dali::Accessibility::Accessible::Get(view.GetItem(1))); + DALI_TEST_CHECK(accessibleB); + + accessibleA->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorA)) + Wait(application); + accessibleB->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorB)) + Wait(application); + + Dali::Accessibility::TestEnableSC( false ); + END_TEST; +} + +int UtcDaliAccessibilityScrollToChildNonScrollable(void) +{ + ToolkitTestApplication application; + Dali::Accessibility::TestEnableSC( true ); + + TextLabel label = TextLabel::New("123"); + + auto* accessible = dynamic_cast(Dali::Accessibility::Accessible::Get(label)); + DALI_TEST_CHECK(accessible); + + DALI_TEST_EQUALS(accessible->IsScrollable(), false, TEST_LOCATION); + DALI_TEST_EQUALS(accessible->ScrollToChild({}), false, TEST_LOCATION); + DALI_TEST_EQUALS(accessible->GetInternalActor(), Dali::Actor{}, TEST_LOCATION); + + Dali::Accessibility::TestEnableSC( false ); + END_TEST; +} + +int UtcDaliAccessibilityCheckHighlight(void) +{ + ToolkitTestApplication application; + Dali::Accessibility::TestEnableSC( true ); + Dali::Accessibility::TestResetMoveOutedCalled(); + + // Make precondition two children exist in parent area + PushButton parentButton = PushButton::New(); + parentButton.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX); + parentButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT); + parentButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + parentButton.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f)); + parentButton.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 200.0f)); + application.GetScene().Add( parentButton ); + + PushButton buttonA = PushButton::New(); + buttonA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT); + buttonA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f)); + buttonA.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f)); + parentButton.Add(buttonA); + + PushButton buttonB = PushButton::New(); + buttonB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT); + buttonB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f)); + buttonB.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f)); + parentButton.Add(buttonB); + Wait(application); + + // Set highlight to first child (A) to enable movement tracking + auto* accessible = dynamic_cast(Dali::Accessibility::Accessible::Get(buttonA)); + DALI_TEST_CHECK(accessible); + accessible->GrabHighlight(); + Wait(application); + + // Move first child (A) out of parent area through the parent's area top edge - single move outed event expected for A object and OUTGOING_TOP_LEFT direction + buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, -200.0f)); + Wait(application); + // Need one more notificaiton to get correct updated position + application.SendNotification(); + DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION ); + + // Reset verdict data + Dali::Accessibility::TestResetMoveOutedCalled(); + + // Move first child (A) outside of parent area (both start and end position are outside of parent area) - no move outed event expected for A object + buttonA.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, -300.0f) ); + Wait(application); + // Need one more notificaiton to get correct updated position + application.SendNotification(); + DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION ); + + // Reset verdict data + Dali::Accessibility::TestResetMoveOutedCalled(); + + // Set highlight to second child (B) to enable movement tracking + accessible = dynamic_cast(Dali::Accessibility::Accessible::Get(buttonB)); + DALI_TEST_CHECK(accessible); + accessible->GrabHighlight(); + Wait(application); + + // Move second child (B) inside of parent area (both start and end position are inside of parent area) - no move outed event expected for B object + // B: (0,100) --> (0, 50) + buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 50.0f) ); + Wait(application); + // Need one more notificaiton to get correct updated position + application.SendNotification(); + DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION ); + + // Reset verdict data + Dali::Accessibility::TestResetMoveOutedCalled(); + + // Move second child (B) out of parent area through the parent's area right edge - single move outed event expected for B object and OUTGOING_BOTTOM_RIGHT direction + buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f)); + Wait(application); + // Need one more notificaiton to get correct updated position + application.SendNotification(); + DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION ); + + // Reset verdict data + Dali::Accessibility::TestResetMoveOutedCalled(); + + // Move second child (B) back into parent area (start position is outside but end position is inside of parent area) - no move outed event expected for B object + // B: (300,100) --> (0, 100) + buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f) ); + Wait(application); + // Need one more seding notificaiton to get correct updated position + application.SendNotification(); + DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION ); + + // Reset verdict data + Dali::Accessibility::TestResetMoveOutedCalled(); + + // Disable movement tracking on B by giving highlight to A + accessible = dynamic_cast(Dali::Accessibility::Accessible::Get(buttonA)); + DALI_TEST_CHECK(accessible); + accessible->GrabHighlight(); + Wait(application); + + // Move B (untracked) out of parent area through the parent's area right edge - no move outed event expected for B object + // B: (0,100) --> (300, 100) + buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f) ); + Wait(application); + // Need one more seding notificaiton to get correct updated position + application.SendNotification(); + DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION ); + + Dali::Accessibility::TestEnableSC( false ); + END_TEST; +}