#include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
#include <dali-toolkit/dali-toolkit.h>
#include <dali/devel-api/adaptor-framework/accessibility.h>
-#include <dali/devel-api/adaptor-framework/accessibility-impl.h>
+#include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
+#include <dali/devel-api/adaptor-framework/window-devel.h>
+#include <dali/devel-api/atspi-interfaces/accessible.h>
+#include <dali/devel-api/atspi-interfaces/action.h>
+#include <dali/devel-api/atspi-interfaces/component.h>
+#include <dali-toolkit/devel-api/controls/buttons/toggle-button.h>
#include <dali-toolkit/devel-api/controls/control-devel.h>
#include <dali-toolkit/devel-api/controls/popup/popup.h>
+#include <dali-toolkit/devel-api/controls/table-view/table-view.h>
+#include <dali-toolkit/devel-api/controls/web-view/web-view.h>
#include <dali/devel-api/actors/actor-devel.h>
#include <dali/devel-api/common/stage.h>
#include <cstdlib>
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;
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;
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<Dali::Accessibility::Component*>(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<Dali::Accessibility::Component*>(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;
ToolkitTestApplication application;
auto control = Control::New();
- auto noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE );
- DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION );
+ auto highlightable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
+ DALI_TEST_EQUALS(highlightable, false, TEST_LOCATION);
+
+ // negative testcase - trying to set unconvertible value
+ control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, "deadbeef");
+ highlightable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
+ DALI_TEST_EQUALS(highlightable, false, TEST_LOCATION);
auto q = Dali::Accessibility::Accessible::Get( control );
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 );
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;
Dali::Accessibility::TestEnableSC( true );
auto rel = Accessibility::RelationType::FLOWS_TO;
- auto number = static_cast< size_t >( rel );
auto control = Control::New();
auto destination1 = Control::New();
auto destination2 = Control::New();
DevelControl::AppendAccessibilityRelation( control, destination1, rel );
auto relations = DevelControl::GetAccessibilityRelations(control);
- DALI_TEST_CHECK( relations[ number ].size() == 1 );
+ DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION);
+ DALI_TEST_EQUALS(relations[0].mRelationType, rel, TEST_LOCATION);
+ DALI_TEST_EQUALS(relations[0].mTargets.size(), 1u, TEST_LOCATION);
DevelControl::AppendAccessibilityRelation( control, destination2, rel );
relations = DevelControl::GetAccessibilityRelations(control);
- DALI_TEST_CHECK( relations[ number ].size() == 2 );
+ DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION);
+ DALI_TEST_EQUALS(relations[0].mRelationType, rel, TEST_LOCATION);
+ DALI_TEST_EQUALS(relations[0].mTargets.size(), 2u, TEST_LOCATION);
auto accessible = Dali::Accessibility::Accessible::Get( control );
auto accessible_destination1 = Dali::Accessibility::Accessible::Get( destination1 );
auto accessible_destination2 = Dali::Accessibility::Accessible::Get( destination2 );
auto relationset = accessible->GetRelationSet();
- DALI_TEST_CHECK( relationset[0].relationType == rel );
- DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination1->GetAddress() || relationset[0].targets[1] == accessible_destination1->GetAddress() );
- DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination2->GetAddress() || relationset[0].targets[1] == accessible_destination2->GetAddress() );
+ DALI_TEST_CHECK( relationset[0].mRelationType == rel );
+ DALI_TEST_CHECK( relationset[0].mTargets[0] == accessible_destination1 || relationset[0].mTargets[1] == accessible_destination1 );
+ DALI_TEST_CHECK( relationset[0].mTargets[0] == accessible_destination2 || relationset[0].mTargets[1] == accessible_destination2 );
auto relationset_bridge = TestGetRelationSet( accessible -> GetAddress() );
- DALI_TEST_CHECK( static_cast< uint32_t >( relationset[0].relationType ) == std::get<0>( relationset_bridge[0] ) );
+ DALI_TEST_CHECK( static_cast< uint32_t >( relationset[0].mRelationType ) == std::get<0>( relationset_bridge[0] ) );
- DALI_TEST_CHECK( relationset[0].targets[0] == std::get<1>( relationset_bridge[0] )[0] || relationset[0].targets[1] == std::get<1>( relationset_bridge[0] )[0] );
- DALI_TEST_CHECK( relationset[0].targets[0] == std::get<1>( relationset_bridge[0] )[1] || relationset[0].targets[1] == std::get<1>( relationset_bridge[0] )[1] );
+ DALI_TEST_CHECK( relationset[0].mTargets[0]->GetAddress() == std::get<1>( relationset_bridge[0] )[0] || relationset[0].mTargets[1]->GetAddress() == std::get<1>( relationset_bridge[0] )[0] );
+ DALI_TEST_CHECK( relationset[0].mTargets[0]->GetAddress() == std::get<1>( relationset_bridge[0] )[1] || relationset[0].mTargets[1]->GetAddress() == std::get<1>( relationset_bridge[0] )[1] );
- DevelControl::RemoveAccessibilityRelation(control,destination2,rel);
+ DevelControl::RemoveAccessibilityRelation(control, destination2, rel);
relations = DevelControl::GetAccessibilityRelations(control);
- DALI_TEST_CHECK( relations[ number ].size() == 1 );
+ DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION);
+ DALI_TEST_EQUALS(relations[0].mTargets.size(), 1u, TEST_LOCATION);
DevelControl::ClearAccessibilityRelations(control);
relations = DevelControl::GetAccessibilityRelations(control);
- DALI_TEST_CHECK( relations[ number ].size() == 0 );
+ DALI_TEST_EQUALS(relations.size(), 0u, TEST_LOCATION);
Dali::Accessibility::TestEnableSC( false );
child_1_accessible -> GetIndexInParent();
DALI_ABORT("Object has parent, test abort");
}
- catch (Dali::DaliException &){}
+ catch (const std::domain_error&){}
parent.Add(child_1);
parent.Add(child_2);
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 );
+
+ 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 );
+
+ auto a = Dali::Accessibility::Accessible::Get( control );
+ auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
+
+ 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;
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));
+ 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<Dali::Accessibility::Component*>( a );
- auto extents = a_component->GetExtents(Dali::Accessibility::CoordType::SCREEN);
+ 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 );
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 );
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;
} );
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);
+
+ TableView tableView = TableView::New( 2, 2 ); // 2 by 2 grid.
+ tableView.SetProperty( Actor::Property::SIZE, Vector2(100.0f, 100.0f) );
+ scrollView.Add(tableView);
+
+ PushButton actorC = PushButton::New();
+ actorC.SetProperty( Actor::Property::SIZE, Vector2(50.0f, 50.0f) );
+ tableView.AddChild( actorC, TableView::CellPosition( 0, 0 ) );
+
+ PushButton actorD = PushButton::New();
+ application.GetScene().Add( actorD );
+
+ Wait(application);
+
+ auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(scrollView));
+ DALI_TEST_CHECK(accessibleParent);
+ auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorA));
+ DALI_TEST_CHECK(accessibleA);
+ auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorB));
+ DALI_TEST_CHECK(accessibleB);
+ auto* accessibleC = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorC));
+ DALI_TEST_CHECK(accessibleC);
+
+ accessibleA->GrabHighlight(); // == scrollView.ScrollTo(actorA)
+ Wait(application);
+ accessibleB->GrabHighlight(); // == scrollView.ScrollTo(actorB)
+ Wait(application);
+
+ // scrollView is ancestor of actorC
+ // This should work without a crash
+ accessibleC->GrabHighlight(); // == scrollView.ScrollTo(actorC)
+ Wait(application);
+
+ // negative testcase calling ScrollToChild using non-child actor
+ accessibleParent->ScrollToChild(actorD);
+
+ 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<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view));
+ DALI_TEST_CHECK(accessibleParent);
+ auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(0)));
+ DALI_TEST_CHECK(accessibleA);
+ auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(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<DevelControl::ControlAccessible*>(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(), label, 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<DevelControl::ControlAccessible*>(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<DevelControl::ControlAccessible*>(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<DevelControl::ControlAccessible*>(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;
+}
+
+int UtcDaliWebViewAccessible(void)
+{
+ ToolkitTestApplication application;
+
+ auto webView = Dali::Toolkit::WebView::New();
+ auto webViewAccessible = Dali::Accessibility::Accessible::Get(webView);
+
+ DALI_TEST_CHECK(webViewAccessible);
+
+ auto children = webViewAccessible->GetChildren();
+
+ DALI_TEST_CHECK(children.empty());
+
+ Dali::Accessibility::TestEnableSC(true);
+
+ children = webViewAccessible->GetChildren();
+
+ DALI_TEST_EQUALS(children.size(), 1u, TEST_LOCATION);
+
+ auto* child = children[0];
+
+ DALI_TEST_CHECK(child);
+ DALI_TEST_CHECK(child->IsProxy());
+ DALI_TEST_EQUALS(child->GetParent(), webViewAccessible, TEST_LOCATION);
+
+ auto address = child->GetAddress();
+
+ DALI_TEST_CHECK(address);
+ DALI_TEST_NOT_EQUALS(address.GetBus(), webViewAccessible->GetAddress().GetBus(), 0.0f, TEST_LOCATION);
+
+ Dali::Accessibility::TestEnableSC(false);
+
+ children = webViewAccessible->GetChildren();
+
+ DALI_TEST_CHECK(children.empty());
+
+ END_TEST;
+}