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-ScrollView.cpp;h=3b4038ea4ee6581d2dfba5848824ceaceb0220b6;hp=39af3d3ac91db0b4bfd6712b5b4b7f46f1773400;hb=1f316c7e8f22f1ada38dfdff44d556205bb40ca4;hpb=d04c5bdbb95cc98f90848c7a98b0b2804df6e5b8 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ScrollView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ScrollView.cpp index 39af3d3..3b4038e 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ScrollView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ScrollView.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2015 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. @@ -44,10 +44,24 @@ static void TestCallback(BaseHandle handle) gObjectCreatedCallBackCalled = true; } +struct CallbackFunctor +{ + CallbackFunctor(bool* callbackFlag) + : mCallbackFlag( callbackFlag ) + { + } + + void operator()() + { + *mCallbackFlag = true; + } + bool* mCallbackFlag; +}; const int MILLISECONDS_PER_SECOND = 1000; const int RENDER_FRAME_INTERVAL = 16; ///< Duration of each frame in ms. (at approx 60FPS) const int RENDER_ANIMATION_TEST_DURATION_MS = 1000; ///< 1000ms to test animation + const int RENDER_DELAY_SCROLL = 1000; ///< duration to wait for any scroll to complete. // For Clamp Signal testing... @@ -57,7 +71,7 @@ const int CLAMP_STEP_0_CHECK_NOTCLAMPED = 0; ///< FSM: "First const int CLAMP_STEP_1_CHECK_CLAMPED_WEST = 1; ///< FSM: "Next check that scrollview clamps against left side" const int CLAMP_STEP_2_CHECK_CLAMPED_SOUTH_WEST = 2; ///< FSM: "Then check that scrollview clamps against bottom-left side" const int CLAMP_STEP_3_SUCCESS = 3; ///< FSM: "Finished (Success)" -const Vector3 CLAMP_START_SCROLL_POSITION(30.0f, 100.0f, 0.0f); ///< Scroll start position for the Clamping tests. +const Vector2 CLAMP_START_SCROLL_POSITION(30.0f, 100.0f); ///< Scroll start position for the Clamping tests. const Vector2 CLAMP_TOUCH_START( 100.0f, 100.0f ); ///< Start point to touch from for the Clamping tests. const Vector2 CLAMP_TOUCH_MOVEMENT( 5.0f, -5.0f ); ///< Amount to move touch for each frame for the Clamping tests. const int CLAMP_GESTURE_FRAMES = 100; ///< Number of Frames to synthesize a gesture for the Clamping tests. @@ -65,12 +79,17 @@ const Vector3 TEST_ACTOR_POSITION(100.0f, 100.0f, 0.0f); ///< A Test acto const Vector3 TEST_CONSTRAINT_OFFSET(1.0f, 2.0f, 0.0f); ///< A Test constraint offset (arbitrary value to test effects) const float TEST_RATIO_TOLERANCE = 0.05; ///< +/-5% tolerance for ratio comparisons. -const int MAX_FRAMES_TO_TEST_OVERSHOOT = 600; ///< 10 seconds (at 60 frames per second). -const Vector3 OVERSHOOT_START_SCROLL_POSITION(100.0f, 100.0f, 0.0f); ///< Scroll start position for the Overshoot tests. -const float TEST_CUSTOM1_SNAP_OVERSHOOT_DURATION = 0.05f; ///< a Test duration -const float TEST_CUSTOM2_SNAP_OVERSHOOT_DURATION = 1.5f; ///< another Test duration +const float DEFAULT_SNAP_OVERSHOOT_DURATION(0.5f); ///< Default overshoot snapping animation time. +const float DEFAULT_MAX_OVERSHOOT(100.0f); ///< Default maximum allowed overshoot in pixels + +const int MAX_FRAMES_TO_TEST_OVERSHOOT = 600; ///< 10 seconds (at 60 frames per second). +const Vector2 OVERSHOOT_START_SCROLL_POSITION(100.0f, 100.0f); ///< Scroll start position for the Overshoot tests. +const float SCROLL_ANIMATION_DURATION(0.33f); ///< Duration of scroll animation in Overshoot tests (i.e. 100 pixels of overshoot in the speed of 500 pixels per 100 frames, 100/(500/(100/60)) = 0.33) +const Vector2 SNAP_POSITION_WITH_DECELERATED_VELOCITY(74.0f, 74.0f); ///< the snap position for Overshoot tests with the decelerated velocity (i.e. Decelerated from 500 pixels per 100 frames). +const float TEST_CUSTOM1_SNAP_OVERSHOOT_DURATION = 0.05f; ///< a Test duration +const float TEST_CUSTOM2_SNAP_OVERSHOOT_DURATION = 1.5f; ///< another Test duration const float TEST_CUSTOM3_SNAP_OVERSHOOT_DURATION = TEST_CUSTOM2_SNAP_OVERSHOOT_DURATION * 0.5f; // Same as above, but different alpha function. -const float TIME_TOLERANCE = 0.05f; ///< Allow testing tolerance between a 10th of second (+/- 3 frames) +const float TIME_TOLERANCE = 0.05f; ///< Allow testing tolerance between a 10th of second (+/- 3 frames) // Generate a PanGestureEvent to send to Core @@ -152,7 +171,7 @@ static Vector3 gConstraintResult; ///< Result from constra * * @param[in] position The current scroll position. */ -static void OnScrollStart( const Vector3& position ) +static void OnScrollStart( const Vector2& position ) { gOnScrollStartCalled = true; } @@ -162,7 +181,7 @@ static void OnScrollStart( const Vector3& position ) * * @param[in] position The current scroll position. */ -static void OnScrollUpdate( const Vector3& position ) +static void OnScrollUpdate( const Vector2& position ) { gOnScrollUpdateCalled = true; } @@ -172,7 +191,7 @@ static void OnScrollUpdate( const Vector3& position ) * * @param[in] position The current scroll position. */ -static void OnScrollComplete( const Vector3& position ) +static void OnScrollComplete( const Vector2& position ) { gOnScrollCompleteCalled = true; } @@ -212,7 +231,7 @@ struct TestSumConstraint */ void operator()( Vector3& current, const PropertyInputContainer& inputs ) { - gConstraintResult = current + inputs[0]->GetVector3() + mOffset; + gConstraintResult = current + Vector3(inputs[0]->GetVector2()) + mOffset; current = gConstraintResult; } @@ -260,10 +279,56 @@ float TestAlphaFunction(float progress) } // unnamed namespace -int UtcDaliScrollViewNew(void) +int UtcDaliToolkitScrollViewConstructorP(void) +{ + ToolkitTestApplication application; + + ScrollView scrollView; + DALI_TEST_CHECK( !scrollView ); + END_TEST; +} + +int UtcDaliToolkitScrollViewCopyConstructorP(void) +{ + ToolkitTestApplication application; + + ScrollView scrollView = ScrollView::New(); + scrollView.SetProperty( ScrollView::Property::SCROLL_POSITION, Vector2(10.0f, 10.0f) ); + + ScrollView copy( scrollView ); + DALI_TEST_CHECK( copy ); + DALI_TEST_CHECK( copy.GetProperty( ScrollView::Property::SCROLL_POSITION ) == scrollView.GetProperty( ScrollView::Property::SCROLL_POSITION ) ); + END_TEST; +} + +int UtcDaliToolkitScrollViewAssignmentOperatorP(void) +{ + ToolkitTestApplication application; + + ScrollView scrollView = ScrollView::New(); + scrollView.SetProperty( ScrollView::Property::SCROLL_POSITION, Vector2(10.0f, 10.0f) ); + + ScrollView copy = scrollView; + DALI_TEST_CHECK( copy ); + DALI_TEST_CHECK( copy.GetProperty( ScrollView::Property::SCROLL_POSITION ) == scrollView.GetProperty( ScrollView::Property::SCROLL_POSITION ) ); + END_TEST; +} + +int UtcDaliScrollViewDestructorP(void) +{ + ToolkitTestApplication application; + + ScrollView* scrollView = new ScrollView(); + delete scrollView; + + DALI_TEST_CHECK( true ); + END_TEST; +} + +int UtcDaliToolkitScrollViewNewP1(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewNew"); + tet_infoline(" UtcDaliToolkitScrollViewNewP1"); ScrollView scrollView; @@ -290,10 +355,29 @@ int UtcDaliScrollViewNew(void) END_TEST; } -int UtcDaliScrollViewDownCast(void) +int UtcDaliToolkitScrollViewNewP2(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewNewP2 - create thru type registry"); + + ScrollView scrollView; + DALI_TEST_CHECK( !scrollView ); + + TypeRegistry typeRegistry = TypeRegistry::Get(); + TypeInfo scrollViewType = typeRegistry.GetTypeInfo("ScrollView"); + BaseHandle handle = scrollViewType.CreateInstance(); + DALI_TEST_CHECK( handle ); + + scrollView = ScrollView::DownCast(handle); + DALI_TEST_CHECK( scrollView ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewDownCastP(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewDownCast"); + tet_infoline(" UtcDaliToolkitScrollViewDownCastP"); ScrollView scrollView = ScrollView::New(); BaseHandle handle(scrollView); @@ -304,17 +388,17 @@ int UtcDaliScrollViewDownCast(void) END_TEST; } -int UtcDaliScrollViewScrollToPosition(void) +int UtcDaliToolkitScrollViewScrollToPositionP(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewScrollToPosition"); + tet_infoline(" UtcDaliToolkitScrollViewScrollToPositionP"); // Create the ScrollView actor ScrollView scrollView = ScrollView::New(); Stage::GetCurrent().Add( scrollView ); - const Vector3 target = Vector3(100.0f, 200.0f, 0.0f); - const Vector3 target2 = Vector3(300.0f, 100.0f, 0.0f); + const Vector2 target = Vector2(100.0f, 200.0f); + const Vector2 target2 = Vector2(300.0f, 100.0f); scrollView.ScrollTo( target, 0.0f ); Wait(application); @@ -323,14 +407,133 @@ int UtcDaliScrollViewScrollToPosition(void) Wait(application, RENDER_DELAY_SCROLL); DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target2, TEST_LOCATION ); - Wait(application); END_TEST; } -int UtcDaliScrollViewScrollToPage(void) +int UtcDaliToolkitScrollViewScrollToPositionWithDirectionBiasP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewScrollToPositionWithDirectionBiasP"); + + ScrollView scrollView = ScrollView::New(); + Stage::GetCurrent().Add( scrollView ); + RulerPtr rulerX = new FixedRuler( 100.0f ); + rulerX->SetDomain( RulerDomain(0.0f, 200.0f, true) ); + RulerPtr rulerY = new FixedRuler( 100.0f ); + rulerY->SetDomain( RulerDomain(0.0f, 200.0f, true) ); + + scrollView.SetRulerX( rulerX ); + scrollView.SetRulerY( rulerY ); + + scrollView.SetWrapMode(true); + + Property::Value wrapMode = scrollView.GetProperty( Toolkit::ScrollView::Property::WRAP_ENABLED ); + DALI_TEST_EQUALS( wrapMode.Get(), true, TEST_LOCATION ); + + const Vector2 target = Vector2(50.0f, 50.0f); + const Vector2 target2 = Vector2(150.0f, 150.0f); + + scrollView.ScrollTo( target, 0.0f ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target, TEST_LOCATION ); + + scrollView.ScrollTo( target2, 0.25f, Dali::Toolkit::DirectionBiasLeft, Dali::Toolkit::DirectionBiasLeft ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2::ZERO, TEST_LOCATION ); + + scrollView.ScrollTo( target, 0.0f ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target, TEST_LOCATION ); + + scrollView.ScrollTo( target2, 0.25f, Dali::Toolkit::DirectionBiasRight, Dali::Toolkit::DirectionBiasRight ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target2, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewScrollToPositionWithAlphaFunctionP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewScrollToPositionWithAlphaFunctionP"); + + // Create the ScrollView actor + ScrollView scrollView = ScrollView::New(); + Stage::GetCurrent().Add( scrollView ); + + const Vector2 target = Vector2(100.0f, 200.0f); + const Vector2 target2 = Vector2(300.0f, 100.0f); + + scrollView.ScrollTo( target, 0.5f, TestAlphaFunction ); + Wait(application, 250); + // Check that the scroll animation should finish within just half of the specified duration with the above alpha function + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target, TEST_LOCATION ); + + scrollView.ScrollTo( target2, 0.5f, AlphaFunction::LINEAR ); + Wait(application, 250); + // Check that the scroll animation has not finished within half of the specified duration with the linear alpha function + DALI_TEST_CHECK( scrollView.GetCurrentScrollPosition() != target2 ); + + // Wait till the end of the specified duration + Wait(application, 250); + // Check that the scroll animation has finished + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target2, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewScrollToPositionWithAlphaFunctionAndDirectionBiasP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewScrollToPositionWithAlphaFunctionAndDirectionBiasP"); + + ScrollView scrollView = ScrollView::New(); + Stage::GetCurrent().Add( scrollView ); + RulerPtr rulerX = new FixedRuler( 100.0f ); + rulerX->SetDomain( RulerDomain(0.0f, 200.0f, true) ); + RulerPtr rulerY = new FixedRuler( 100.0f ); + rulerY->SetDomain( RulerDomain(0.0f, 200.0f, true) ); + + scrollView.SetRulerX( rulerX ); + scrollView.SetRulerY( rulerY ); + + scrollView.SetWrapMode(true); + + const Vector2 target = Vector2(50.0f, 50.0f); + const Vector2 target2 = Vector2(150.0f, 150.0f); + + scrollView.ScrollTo( target, 0.0f ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target, TEST_LOCATION ); + + scrollView.ScrollTo( target2, 0.25f, AlphaFunction::LINEAR, Dali::Toolkit::DirectionBiasLeft, Dali::Toolkit::DirectionBiasLeft ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2::ZERO, TEST_LOCATION ); + + scrollView.ScrollTo( target, 0.0f ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target, TEST_LOCATION ); + + scrollView.ScrollTo( target2, 0.25f, AlphaFunction::LINEAR, Dali::Toolkit::DirectionBiasRight, Dali::Toolkit::DirectionBiasRight ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target2, TEST_LOCATION ); + + scrollView.ScrollTo( target, 0.0f ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target, TEST_LOCATION ); + + scrollView.ScrollTo( target2, 0.25f, TestAlphaFunction, Dali::Toolkit::DirectionBiasRight, Dali::Toolkit::DirectionBiasRight ); + Wait(application, 125); + // Check that the scroll animation should finish within just half of the specified duration with the above alpha function + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target2, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewScrollToPageP(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewScrollToPage"); + tet_infoline(" UtcDaliToolkitScrollViewScrollToPageP"); ScrollView scrollView = ScrollView::New(); Stage::GetCurrent().Add( scrollView ); @@ -344,29 +547,29 @@ int UtcDaliScrollViewScrollToPage(void) scrollView.ScrollTo( 1, 0.0f ); Wait(application); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector3(100.0f, 0.0f, 0.0f), TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(100.0f, 0.0f), TEST_LOCATION ); scrollView.ScrollTo( 5, 0.0f ); Wait(application); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector3(500.0f, 0.0f, 0.0f), TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(500.0f, 0.0f), TEST_LOCATION ); scrollView.ScrollTo( 10, 0.0f ); Wait(application); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector3(200.0f, 100.0f, 0.0f), TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(200.0f, 100.0f), TEST_LOCATION ); scrollView.ScrollTo( 15, 0.0f ); Wait(application); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector3(700.0f, 100.0f, 0.0f), TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(700.0f, 100.0f), TEST_LOCATION ); DALI_TEST_EQUALS( static_cast(scrollView.GetCurrentPage()), 15, TEST_LOCATION ); scrollView.ScrollTo( 3 ); Wait(application, RENDER_DELAY_SCROLL); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector3(300.0f, 0.0f, 0.0f), TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(300.0f, 0.0f), TEST_LOCATION ); DALI_TEST_EQUALS( static_cast(scrollView.GetCurrentPage()), 3, TEST_LOCATION ); scrollView.ScrollTo( 9 ); Wait(application, RENDER_DELAY_SCROLL); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector3(100.0f, 100.0f, 0.0f), TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(100.0f, 100.0f), TEST_LOCATION ); DALI_TEST_EQUALS( static_cast(scrollView.GetCurrentPage()), 9, TEST_LOCATION ); // Apply DefaultRulers instead and see what happens. @@ -381,17 +584,58 @@ int UtcDaliScrollViewScrollToPage(void) // This time should always scroll to origin (0.0f, 0.0f) scrollView.ScrollTo( 1, 0.0f ); Wait(application); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector3(0.0f, 0.0f, 0.0f), TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(0.0f, 0.0f), TEST_LOCATION ); DALI_TEST_EQUALS( static_cast(scrollView.GetCurrentPage()), 0, TEST_LOCATION ); - Wait(application); END_TEST; } -int UtcDaliScrollViewScrollToActor(void) +int UtcDaliToolkitScrollViewScrollToPageWithDirectionBiasP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewScrollToPageWithDirectionBiasP"); + + ScrollView scrollView = ScrollView::New(); + Stage::GetCurrent().Add( scrollView ); + RulerPtr rulerX = new FixedRuler( 100.0f ); + rulerX->SetDomain( RulerDomain(0.0f, 200.0f, true) ); + RulerPtr rulerY = new FixedRuler( 100.0f ); + rulerY->SetDomain( RulerDomain(0.0f, 200.0f, true) ); + + scrollView.SetRulerX( rulerX ); + scrollView.SetRulerY( rulerY ); + + scrollView.SetWrapMode(true); + + scrollView.ScrollTo( 0, 0.25, Dali::Toolkit::DirectionBiasLeft ); + + Wait(application, RENDER_FRAME_INTERVAL); // Wait for one frame + // Check that the scroll position remains the same + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(0.0f, 0.0f), TEST_LOCATION ); + + Wait(application, RENDER_DELAY_SCROLL); // Wait for one second + // Check that it stays at the same page (i.e. the same scroll position) + DALI_TEST_EQUALS( static_cast(scrollView.GetCurrentPage()), 0, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(0.0f, 0.0f), TEST_LOCATION ); + + scrollView.ScrollTo( 0, 0.25, Dali::Toolkit::DirectionBiasRight ); + + Wait(application, RENDER_FRAME_INTERVAL); // Wait for one frame + // Check that it scrolls towards the right + DALI_TEST_CHECK( scrollView.GetCurrentScrollPosition().x > 0.0f ); + + Wait(application, RENDER_DELAY_SCROLL); // Wait for one second + // Check that it scrolls back to the same page (i.e. the same scroll position) + DALI_TEST_EQUALS( static_cast(scrollView.GetCurrentPage()), 0, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(0.0f, 0.0f), TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewScrollToActorP(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewScrollToActor"); + tet_infoline(" UtcDaliToolkitScrollViewScrollToActorP"); ScrollView scrollView = ScrollView::New(); Stage::GetCurrent().Add( scrollView ); @@ -410,27 +654,27 @@ int UtcDaliScrollViewScrollToActor(void) scrollView.ScrollTo(actorA, 0.0f); Wait(application); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), positionA, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), positionA.GetVectorXY(), TEST_LOCATION ); Wait(application); scrollView.ScrollTo(actorB, 0.0f); Wait(application); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), positionB, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), positionB.GetVectorXY(), TEST_LOCATION ); scrollView.ScrollTo(actorA); Wait(application, RENDER_DELAY_SCROLL); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), positionA, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), positionA.GetVectorXY(), TEST_LOCATION ); scrollView.ScrollTo(actorB); Wait(application, RENDER_DELAY_SCROLL); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), positionB, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), positionB.GetVectorXY(), TEST_LOCATION ); END_TEST; } -int UtcDaliScrollViewScrollToSnapPoint(void) +int UtcDaliToolkitScrollViewScrollToSnapPointP(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewScrollToSnapPoint"); + tet_infoline(" UtcDaliToolkitScrollViewScrollToSnapPointP"); ScrollView scrollView = ScrollView::New(); Stage::GetCurrent().Add( scrollView ); @@ -442,21 +686,21 @@ int UtcDaliScrollViewScrollToSnapPoint(void) scrollView.SetRulerX( rulerX ); scrollView.SetRulerY( rulerY ); - scrollView.ScrollTo( Vector3(120.0f, 190.0f, 0.0f), 0.0f ); + scrollView.ScrollTo( Vector2(120.0f, 190.0f), 0.0f ); Wait(application); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector3(120.0f, 190.0f, 0.0f), TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(120.0f, 190.0f), TEST_LOCATION ); scrollView.ScrollToSnapPoint(); Wait(application, RENDER_DELAY_SCROLL); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector3(100.0f, 200.0f, 0.0f), TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(100.0f, 200.0f), TEST_LOCATION ); END_TEST; } -int UtcDaliScrollViewSetScrollUpdateDistance(void) +int UtcDaliToolkitScrollViewSetScrollUpdateDistanceP(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewRefreshInterval"); + tet_infoline(" UtcDaliToolkitScrollViewSetScrollUpdateDistanceP"); ScrollView scrollView = ScrollView::New(); @@ -469,14 +713,17 @@ int UtcDaliScrollViewSetScrollUpdateDistance(void) END_TEST; } -int UtcDaliScrollViewWrapMode(void) +int UtcDaliToolkitScrollViewSetWrapModeP(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewWrapMode"); + tet_infoline(" UtcDaliToolkitScrollViewSetWrapModeP"); ScrollView scrollView = ScrollView::New(); Stage::GetCurrent().Add( scrollView ); + Actor actor = Actor::New(); + scrollView.Add( actor ); + // Position rulers. 4x4 grid. RulerPtr rulerX = new FixedRuler(50.0f); RulerPtr rulerY = new FixedRuler(50.0f); @@ -486,18 +733,21 @@ int UtcDaliScrollViewWrapMode(void) scrollView.SetRulerY(rulerY); scrollView.SetWrapMode(false); - scrollView.ScrollTo(Vector3(225.0f, 125.0f, 0.0f), 0.0f); // 5th (1st) page across, and 3rd (3rd) page down. (wrapped) + scrollView.ScrollTo(Vector2(225.0f, 125.0f), 0.0f); // 5th (1st) page across, and 3rd (3rd) page down. (wrapped) Wait(application); DALI_TEST_EQUALS( static_cast(scrollView.GetCurrentPage()), 17, TEST_LOCATION ); + scrollView.SetWrapMode(true); + scrollView.ScrollTo(Vector2(230.0f, 130.0f), 0.0f); // 5th (1st) page across, and 3rd (3rd) page down. (wrapped) + Wait(application); DALI_TEST_EQUALS( static_cast(scrollView.GetCurrentPage()), 13, TEST_LOCATION ); END_TEST; } -int UtcDaliScrollViewActorAutoSnap(void) +int UtcDaliToolkitScrollViewActorAutoSnap(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewActorAutoSnap"); + tet_infoline(" UtcDaliToolkitScrollViewActorAutoSnap"); ScrollView scrollView = ScrollView::New(); Stage::GetCurrent().Add( scrollView ); @@ -521,7 +771,7 @@ int UtcDaliScrollViewActorAutoSnap(void) b.SetPosition(bPosition); // Goto a random position, and execute snap (should not move) - Vector3 targetScroll = Vector3(500.0f, 500.0f, 0.0f); + Vector2 targetScroll = Vector2(500.0f, 500.0f); scrollView.ScrollTo(targetScroll, 0.0f); Wait(application); scrollView.ScrollToSnapPoint(); @@ -532,20 +782,20 @@ int UtcDaliScrollViewActorAutoSnap(void) scrollView.SetActorAutoSnap(true); scrollView.ScrollToSnapPoint(); Wait(application, RENDER_DELAY_SCROLL); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), bPosition, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), bPosition.GetVectorXY(), TEST_LOCATION ); - scrollView.ScrollTo(Vector3(0.0f, 0.0f, 0.0f), 0.0f); + scrollView.ScrollTo(Vector2(0.0f, 0.0f), 0.0f); Wait(application); scrollView.ScrollToSnapPoint(); Wait(application, RENDER_DELAY_SCROLL); - DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), aPosition, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), aPosition.GetVectorXY(), TEST_LOCATION ); END_TEST; } -int UtcDaliScrollViewSignalsStartComplete(void) +int UtcDaliToolkitScrollViewSignalsStartComplete(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewSignalsStartComplete"); + tet_infoline(" UtcDaliToolkitScrollViewSignalsStartComplete"); gOnScrollStartCalled = false; gOnScrollCompleteCalled = false; @@ -563,7 +813,7 @@ int UtcDaliScrollViewSignalsStartComplete(void) scrollView.ScrollStartedSignal().Connect( &OnScrollStart ); scrollView.ScrollUpdatedSignal().Connect( &OnScrollUpdate ); scrollView.ScrollCompletedSignal().Connect( &OnScrollComplete ); - scrollView.ScrollTo( Vector3(100.0f, 100.0f, 0.0f) ); + scrollView.ScrollTo( Vector2(100.0f, 100.0f) ); Wait(application, RENDER_DELAY_SCROLL); DALI_TEST_CHECK(gOnScrollStartCalled); @@ -571,10 +821,10 @@ int UtcDaliScrollViewSignalsStartComplete(void) END_TEST; } -int UtcDaliScrollViewSignalsUpdate(void) +int UtcDaliToolkitScrollViewSignalsUpdate01(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewSignalsUpdate"); + tet_infoline(" UtcDaliToolkitScrollViewSignalsUpdate"); gOnScrollStartCalled = false; gOnScrollUpdateCalled = false; @@ -598,7 +848,7 @@ int UtcDaliScrollViewSignalsUpdate(void) scrollView.ScrollUpdatedSignal().Connect( &OnScrollUpdate ); scrollView.ScrollCompletedSignal().Connect( &OnScrollComplete ); - ImageActor image = CreateSolidColorActor( Color::RED ); + Actor image = Actor::New(); image.SetSize(stageSize); image.SetParentOrigin(ParentOrigin::TOP_LEFT); image.SetAnchorPoint(AnchorPoint::TOP_LEFT); @@ -631,6 +881,73 @@ int UtcDaliScrollViewSignalsUpdate(void) END_TEST; } +int UtcDaliToolkitScrollViewSignalsUpdate02(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSignalsUpdate"); + + gOnScrollStartCalled = false; + gOnScrollUpdateCalled = false; + gOnScrollCompleteCalled = false; + + ScrollView scrollView = ScrollView::New(); + Stage::GetCurrent().Add( scrollView ); + Vector2 stageSize = Stage::GetCurrent().GetSize(); + scrollView.SetSize(stageSize); + scrollView.SetParentOrigin(ParentOrigin::TOP_LEFT); + scrollView.SetAnchorPoint(AnchorPoint::TOP_LEFT); + + // Position rulers. + RulerPtr rulerX = new DefaultRuler(); + RulerPtr rulerY = new DefaultRuler(); + rulerX->SetDomain( RulerDomain(0.0f, 1000.0f, false) ); + rulerY->SetDomain( RulerDomain(0.0f, 1000.0f, false) ); + scrollView.SetRulerX(rulerX); + scrollView.SetRulerY(rulerY); + Dali::ConnectionTracker tracker; + bool scrollStarted=false; + bool scrollUpdated=false; + bool scrollCompleted=false; + DALI_TEST_CHECK(scrollView.ConnectSignal( &tracker, "scrollStarted", CallbackFunctor(&scrollStarted) )); + DALI_TEST_CHECK(scrollView.ConnectSignal( &tracker, "scrollUpdated", CallbackFunctor(&scrollUpdated) )); + DALI_TEST_CHECK(scrollView.ConnectSignal( &tracker, "scrollCompleted", CallbackFunctor(&scrollCompleted) )); + + Actor image = Actor::New(); + image.SetSize(stageSize); + image.SetParentOrigin(ParentOrigin::TOP_LEFT); + image.SetAnchorPoint(AnchorPoint::TOP_LEFT); + scrollView.Add(image); + + Wait(application); + + // Do a pan starting from 100,100 and moving down diagonally. + Vector2 pos(100.0f, 100.0f); + SendPan(application, Gesture::Possible, pos); + SendPan(application, Gesture::Started, pos); + pos.x += 5.0f; + pos.y += 5.0f; + Wait(application, 100); + + for(int i = 0;i<20;i++) + { + SendPan(application, Gesture::Continuing, pos); + pos.x += 5.0f; + pos.y += 5.0f; + Wait(application); + } + + SendPan(application, Gesture::Finished, pos); + Wait(application, RENDER_DELAY_SCROLL); + + DALI_TEST_CHECK(scrollStarted); + DALI_TEST_CHECK(scrollUpdated); + DALI_TEST_CHECK(scrollCompleted); + + Stage::GetCurrent().Remove( scrollView ); + + END_TEST; +} + static Vector2 PerformGestureDiagonalSwipe(ToolkitTestApplication& application, Vector2 start, Vector2 direction, int frames, bool finish = true) { gOnScrollStartCalled = false; @@ -661,13 +978,14 @@ static Vector2 PerformGestureDiagonalSwipe(ToolkitTestApplication& application, return pos; } -int UtcDaliScrollViewScrollSensitive(void) +int UtcDaliToolkitScrollViewScrollSensitive(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewScrollSensitive"); + tet_infoline(" UtcDaliToolkitScrollViewScrollSensitive"); // Set up a scrollView... ScrollView scrollView = ScrollView::New(); + scrollView.SetOvershootEnabled(true); Stage::GetCurrent().Add( scrollView ); Vector2 stageSize = Stage::GetCurrent().GetSize(); scrollView.SetSize(stageSize); @@ -707,10 +1025,10 @@ int UtcDaliScrollViewScrollSensitive(void) END_TEST; } -int UtcDaliScrollViewAxisAutoLock(void) +int UtcDaliToolkitScrollViewAxisAutoLock(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewAxisAutoLock"); + tet_infoline(" UtcDaliToolkitScrollViewAxisAutoLock"); // Set up a scrollView... ScrollView scrollView = ScrollView::New(); @@ -732,20 +1050,20 @@ int UtcDaliScrollViewAxisAutoLock(void) scrollView.ScrollCompletedSignal().Connect( &OnScrollComplete ); // Normal - scrollView.ScrollTo(Vector3(100.0f, 100.0f, 0.0f), 0.0f); // move in a little. + scrollView.ScrollTo(Vector2(100.0f, 100.0f), 0.0f); // move in a little. Wait(application); - Vector3 startPosition = scrollView.GetCurrentScrollPosition(); + Vector2 startPosition = scrollView.GetCurrentScrollPosition(); PerformGestureDiagonalSwipe(application, CLAMP_TOUCH_START, Vector2(5.0f, 1.0f), 50, true); // mostly horizontal - const Vector3 positionAfterNormal = scrollView.GetCurrentScrollPosition(); + const Vector2 positionAfterNormal = scrollView.GetCurrentScrollPosition(); // Autolock scrollView.SetAxisAutoLock(true); DALI_TEST_CHECK(scrollView.GetAxisAutoLock()); - scrollView.ScrollTo(Vector3(100.0f, 100.0f, 0.0f), 0.0f); // move in a little. + scrollView.ScrollTo(Vector2(100.0f, 100.0f), 0.0f); // move in a little. Wait(application); PerformGestureDiagonalSwipe(application, CLAMP_TOUCH_START, Vector2(5.0f, 1.0f), 50, true); // mostly horizontal - const Vector3 positionAfterAutoLock = scrollView.GetCurrentScrollPosition(); + const Vector2 positionAfterAutoLock = scrollView.GetCurrentScrollPosition(); // compare how much the Y position has deviated for normal and autolock. const float devianceNormal = fabsf(startPosition.y - positionAfterNormal.y); @@ -759,10 +1077,10 @@ int UtcDaliScrollViewAxisAutoLock(void) END_TEST; } -int UtcDaliScrollViewAxisAutoLockGradient(void) +int UtcDaliToolkitScrollViewAxisAutoLockGradient(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewAxisAutoLockGradient"); + tet_infoline(" UtcDaliToolkitScrollViewAxisAutoLockGradient"); // Set up a scrollView... ScrollView scrollView = ScrollView::New(); @@ -773,10 +1091,10 @@ int UtcDaliScrollViewAxisAutoLockGradient(void) END_TEST; } -int UtcDaliScrollViewConstraints(void) +int UtcDaliToolkitScrollViewConstraints(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewConstraints"); + tet_infoline(" UtcDaliToolkitScrollViewConstraints"); // Set up a scrollView... ScrollView scrollView = ScrollView::New(); @@ -818,10 +1136,10 @@ int UtcDaliScrollViewConstraints(void) END_TEST; } -int UtcDaliScrollViewBind(void) +int UtcDaliToolkitScrollViewBind(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewBind"); + tet_infoline(" UtcDaliToolkitScrollViewBind"); // Set up a scrollView... ScrollView scrollView = ScrollView::New(); @@ -872,31 +1190,854 @@ int UtcDaliScrollViewBind(void) END_TEST; } -int UtcDaliRulerEnableDisable(void) +int UtcDaliToolkitScrollViewOvershoot(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliRulerEnableDisable"); + tet_infoline(" UtcDaliToolkitScrollViewOvershoot"); - RulerPtr ruler = new DefaultRuler(); + // Set up a scrollView... + ScrollView scrollView = ScrollView::New(); + scrollView.SetOvershootEnabled(true); + Stage::GetCurrent().Add( scrollView ); + Vector2 stageSize = Stage::GetCurrent().GetSize(); + scrollView.SetSize(stageSize); + scrollView.SetParentOrigin(ParentOrigin::TOP_LEFT); + scrollView.SetAnchorPoint(AnchorPoint::TOP_LEFT); - DALI_TEST_CHECK( ruler->IsEnabled() ); - ruler->Disable(); - DALI_TEST_CHECK( !ruler->IsEnabled() ); - ruler->Enable(); - DALI_TEST_CHECK( ruler->IsEnabled() ); - END_TEST; -} + // Position rulers. + RulerPtr rulerX = new DefaultRuler(); + RulerPtr rulerY = new DefaultRuler(); + rulerX->SetDomain( RulerDomain(0.0f, stageSize.width + CLAMP_EXCESS_WIDTH, true) ); + rulerY->SetDomain( RulerDomain(0.0f, stageSize.height + CLAMP_EXCESS_HEIGHT, true) ); + scrollView.SetRulerX(rulerX); + scrollView.SetRulerY(rulerY); + scrollView.ScrollStartedSignal().Connect( &OnScrollStart ); + scrollView.ScrollUpdatedSignal().Connect( &OnScrollUpdate ); + scrollView.ScrollCompletedSignal().Connect( &OnScrollComplete ); -int UtcDaliRulerDomainEnableDisable(void) -{ - ToolkitTestApplication application; - tet_infoline(" UtcDaliRulerDomainEnableDisable"); + scrollView.ScrollTo(OVERSHOOT_START_SCROLL_POSITION, 0.0f); // move in a little. + Wait(application); - RulerPtr ruler = new DefaultRuler(); - DALI_TEST_EQUALS( ruler->GetDomain().GetSize(), 1.0f, TEST_LOCATION ); + // 1. Scroll page in NW (-500,-500 pixels), then inspect overshoot. (don't release touch) + Vector2 currentPos = Vector2(100.0f, 100.0f); + currentPos = PerformGestureDiagonalSwipe(application, currentPos, Vector2(5.0f, 5.0f), 100, false); + float overshootXValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_X); + float overshootYValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_Y); + Vector2 positionValue = scrollView.GetProperty(ScrollView::Property::SCROLL_POSITION); + DALI_TEST_EQUALS(overshootXValue, 1.0f, TEST_LOCATION); + DALI_TEST_EQUALS(overshootYValue, 1.0f, TEST_LOCATION); + DALI_TEST_EQUALS(positionValue, Vector2::ZERO, TEST_LOCATION); + float timeToReachOrigin; - ruler->SetDomain( RulerDomain(0.0f, 100.0f, true) ); + // Now release touch. Overshoot should snap back to zero. + SendPan(application, Gesture::Finished, currentPos); + timeToReachOrigin = TestOvershootSnapDuration(application, scrollView); + + float minTimeToReachOrigin = SCROLL_ANIMATION_DURATION + DEFAULT_SNAP_OVERSHOOT_DURATION * (SNAP_POSITION_WITH_DECELERATED_VELOCITY.x / DEFAULT_MAX_OVERSHOOT) - TIME_TOLERANCE; + float maxTimeToReachOrigin = SCROLL_ANIMATION_DURATION + DEFAULT_SNAP_OVERSHOOT_DURATION * (SNAP_POSITION_WITH_DECELERATED_VELOCITY.x / DEFAULT_MAX_OVERSHOOT) + TIME_TOLERANCE; + + DALI_TEST_CHECK( (timeToReachOrigin > minTimeToReachOrigin) && + (timeToReachOrigin < maxTimeToReachOrigin) ); + + // 2. Repeat Scroll, but this time change overshoot snap duration to shorter time + scrollView.SetSnapOvershootDuration(TEST_CUSTOM1_SNAP_OVERSHOOT_DURATION); + + currentPos = PerformGestureDiagonalSwipe(application, Vector2(100.0f, 100.0f), Vector2(5.0f, 5.0f), 100, false); + // Now release touch. Overshoot should snap back to zero. + SendPan(application, Gesture::Finished, currentPos); + timeToReachOrigin = TestOvershootSnapDuration(application, scrollView); + + minTimeToReachOrigin = SCROLL_ANIMATION_DURATION + TEST_CUSTOM1_SNAP_OVERSHOOT_DURATION * (SNAP_POSITION_WITH_DECELERATED_VELOCITY.x / DEFAULT_MAX_OVERSHOOT) - TIME_TOLERANCE; + maxTimeToReachOrigin = SCROLL_ANIMATION_DURATION + TEST_CUSTOM1_SNAP_OVERSHOOT_DURATION * (SNAP_POSITION_WITH_DECELERATED_VELOCITY.x / DEFAULT_MAX_OVERSHOOT) + TIME_TOLERANCE; + + DALI_TEST_CHECK( (timeToReachOrigin > minTimeToReachOrigin) && + (timeToReachOrigin < maxTimeToReachOrigin) ); + + // 3. Repeat Scroll, but this time change overshoot snap duration to longer time. + scrollView.SetSnapOvershootDuration(TEST_CUSTOM2_SNAP_OVERSHOOT_DURATION); + + currentPos = PerformGestureDiagonalSwipe(application, Vector2(100.0f, 100.0f), Vector2(5.0f, 5.0f), 100, false); + // Now release touch. Overshoot should snap back to zero. + SendPan(application, Gesture::Finished, currentPos); + timeToReachOrigin = TestOvershootSnapDuration(application, scrollView); + + minTimeToReachOrigin = SCROLL_ANIMATION_DURATION + TEST_CUSTOM2_SNAP_OVERSHOOT_DURATION * (SNAP_POSITION_WITH_DECELERATED_VELOCITY.x / DEFAULT_MAX_OVERSHOOT) - TIME_TOLERANCE; + maxTimeToReachOrigin = SCROLL_ANIMATION_DURATION + TEST_CUSTOM2_SNAP_OVERSHOOT_DURATION * (SNAP_POSITION_WITH_DECELERATED_VELOCITY.x / DEFAULT_MAX_OVERSHOOT) + TIME_TOLERANCE; + + DALI_TEST_CHECK( (timeToReachOrigin > minTimeToReachOrigin) && + (timeToReachOrigin < maxTimeToReachOrigin) ); + + // 4. Repeat Scroll, but this time change overshoot function. + scrollView.SetSnapOvershootDuration(TEST_CUSTOM3_SNAP_OVERSHOOT_DURATION); + scrollView.SetSnapOvershootAlphaFunction(TestAlphaFunction); + + currentPos = PerformGestureDiagonalSwipe(application, Vector2(100.0f, 100.0f), Vector2(5.0f, 5.0f), 100, false); + // Now release touch. Overshoot should snap back to zero. + SendPan(application, Gesture::Finished, currentPos); + timeToReachOrigin = TestOvershootSnapDuration(application, scrollView); + + minTimeToReachOrigin = SCROLL_ANIMATION_DURATION + TEST_CUSTOM3_SNAP_OVERSHOOT_DURATION * (SNAP_POSITION_WITH_DECELERATED_VELOCITY.x / DEFAULT_MAX_OVERSHOOT) - TIME_TOLERANCE; + maxTimeToReachOrigin = SCROLL_ANIMATION_DURATION + TEST_CUSTOM3_SNAP_OVERSHOOT_DURATION * (SNAP_POSITION_WITH_DECELERATED_VELOCITY.x / DEFAULT_MAX_OVERSHOOT) + TIME_TOLERANCE; + + DALI_TEST_CHECK( (timeToReachOrigin > minTimeToReachOrigin) && + (timeToReachOrigin < maxTimeToReachOrigin) ); + END_TEST; +} + +int UtcDaliToolkitScrollViewSnapAlphaFunction(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSnapAlphaFunction"); + + // Set up a scrollView... + ScrollView scrollView = ScrollView::New(); + scrollView.SetScrollSnapAlphaFunction( AlphaFunction::EASE_IN ); + DALI_TEST_CHECK( scrollView.GetScrollSnapAlphaFunction().GetBuiltinFunction() == AlphaFunction::EASE_IN ); + scrollView.SetScrollSnapAlphaFunction( AlphaFunction::EASE_OUT ); + DALI_TEST_CHECK( scrollView.GetScrollSnapAlphaFunction().GetBuiltinFunction() == AlphaFunction::EASE_OUT ); + + scrollView.SetScrollFlickAlphaFunction( AlphaFunction::BOUNCE ); + DALI_TEST_CHECK( scrollView.GetScrollFlickAlphaFunction().GetBuiltinFunction() == AlphaFunction::BOUNCE ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewSnapDuration(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSnapDuration"); + + // Set up a scrollView... + ScrollView scrollView = ScrollView::New(); + scrollView.SetScrollSnapDuration( 1.0f ); + DALI_TEST_EQUALS( scrollView.GetScrollSnapDuration(), 1.0f, TEST_LOCATION ); + scrollView.SetScrollSnapDuration( 0.5f ); + DALI_TEST_EQUALS( scrollView.GetScrollSnapDuration(), 0.5f, TEST_LOCATION ); + + scrollView.SetScrollFlickDuration( 2.0f ); + DALI_TEST_EQUALS( scrollView.GetScrollFlickDuration(), 2.0f, TEST_LOCATION ); + scrollView.SetScrollFlickDuration( 1.5f ); + DALI_TEST_EQUALS( scrollView.GetScrollFlickDuration(), 1.5f, TEST_LOCATION ); + END_TEST; +} + +int UtcDaliToolkitScrollViewSnapStartedSignalP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSnapStartedSignalP"); + + // Set up a scrollView... + ScrollView scrollView = ScrollView::New(); + Stage::GetCurrent().Add( scrollView ); + Vector2 stageSize = Stage::GetCurrent().GetSize(); + scrollView.SetSize(stageSize); + scrollView.SetParentOrigin(ParentOrigin::TOP_LEFT); + scrollView.SetAnchorPoint(AnchorPoint::TOP_LEFT); + + // Position rulers. + RulerPtr rulerX = new DefaultRuler(); + RulerPtr rulerY = new DefaultRuler(); + rulerX->SetDomain( RulerDomain(0.0f, stageSize.width + CLAMP_EXCESS_WIDTH, true) ); + rulerY->SetDomain( RulerDomain(0.0f, stageSize.height + CLAMP_EXCESS_HEIGHT, true) ); + scrollView.SetRulerX(rulerX); + scrollView.SetRulerY(rulerY); + scrollView.SnapStartedSignal().Connect( &OnSnapStart ); + + scrollView.ScrollTo(CLAMP_START_SCROLL_POSITION, 0.0f); // move in a little. + Wait(application); + + // First try a snap. + PerformGestureDiagonalSwipe(application, CLAMP_TOUCH_START, Vector2(0.5f, 0.0f), 60, true); + + DALI_TEST_CHECK( gOnSnapStartCalled ); + DALI_TEST_CHECK( gLastSnapType == Toolkit::Snap ); + + // Second try a swipe. + PerformGestureDiagonalSwipe(application, CLAMP_TOUCH_START, Vector2(20.0f, 0.0f), 60, true); + + DALI_TEST_CHECK( gOnSnapStartCalled ); + DALI_TEST_CHECK( gLastSnapType == Toolkit::Flick ); + END_TEST; +} + +int UtcDaliToolkitScrollViewGetCurrentPageP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewGetCurrentPageP"); + + ScrollView scrollView = ScrollView::New(); + Stage::GetCurrent().Add( scrollView ); + RulerPtr rulerX = new FixedRuler( 100.0f ); + rulerX->SetDomain( RulerDomain(0.0f, 800.0f, true) ); + RulerPtr rulerY = new FixedRuler( 100.0f ); + rulerY->SetDomain( RulerDomain(0.0f, 400.0f, true) ); + + scrollView.SetRulerX( rulerX ); + scrollView.SetRulerY( rulerY ); + + scrollView.ScrollTo( 15 ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( static_cast(scrollView.GetCurrentPage()), 15, TEST_LOCATION ); + + scrollView.ScrollTo( 3 ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( static_cast(scrollView.GetCurrentPage()), 3, TEST_LOCATION ); + + scrollView.ScrollTo( 9 ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( static_cast(scrollView.GetCurrentPage()), 9, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewSetMaxOvershootP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSetMaxOvershootP"); + + // Set up a scrollView... + ScrollView scrollView = ScrollView::New(); + Stage::GetCurrent().Add( scrollView ); + Vector2 stageSize = Stage::GetCurrent().GetSize(); + scrollView.SetSize(stageSize); + scrollView.SetParentOrigin(ParentOrigin::TOP_LEFT); + scrollView.SetAnchorPoint(AnchorPoint::TOP_LEFT); + + // Position rulers. + RulerPtr rulerX = new DefaultRuler(); + RulerPtr rulerY = new DefaultRuler(); + rulerX->SetDomain( RulerDomain(0.0f, stageSize.width + CLAMP_EXCESS_WIDTH, true) ); + rulerY->SetDomain( RulerDomain(0.0f, stageSize.height + CLAMP_EXCESS_HEIGHT, true) ); + scrollView.SetRulerX(rulerX); + scrollView.SetRulerY(rulerY); + + // Set the max overshoot to be 50 pixels in both X axis and Y axis + scrollView.SetMaxOvershoot(50.0f, 50.0f); + + scrollView.ScrollTo(OVERSHOOT_START_SCROLL_POSITION, 0.0f); // move in a little. + Wait(application); + + // Scroll page in NW (-20,-20 pixels), then check that overshoot should be 0. (don't release touch) + Vector2 currentPos = PerformGestureDiagonalSwipe(application, OVERSHOOT_START_SCROLL_POSITION, Vector2(1.0f, 1.0f), 20, false); + float overshootXValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_X); + float overshootYValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_Y); + DALI_TEST_EQUALS(overshootXValue, 0.0f, TEST_LOCATION); + DALI_TEST_EQUALS(overshootYValue, 0.0f, TEST_LOCATION); + + // Scroll page further in NW (-105,-105 pixels), then check that overshoot should be around 0.5. (don't release touch) + currentPos = PerformGestureDiagonalSwipe(application, OVERSHOOT_START_SCROLL_POSITION, Vector2(1.0f, 1.0f), 105, false); + overshootXValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_X); + overshootYValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_Y); + // The overshoot value is a 0.0f - 1.0f ranged value of the amount overshot related to the maximum overshoot. + // EG. If we move 105, max overshoot is 50, then we overshot 50 / 105. + float correctOvershootValue = 50.0f / 105.f; + DALI_TEST_EQUALS( overshootXValue, correctOvershootValue, 0.001f, TEST_LOCATION ); + DALI_TEST_EQUALS( overshootYValue, correctOvershootValue, 0.001f, TEST_LOCATION ); + + // Scroll page further in NW (-30,-30 pixels), then check that overshoot should be now 1.0. (don't release touch) + currentPos = PerformGestureDiagonalSwipe(application, OVERSHOOT_START_SCROLL_POSITION, Vector2(1.0f, 1.0f), 30, false); + overshootXValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_X); + overshootYValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_Y); + DALI_TEST_EQUALS(overshootXValue, 1.0f, TEST_LOCATION); + DALI_TEST_EQUALS(overshootYValue, 1.0f, TEST_LOCATION); + + // Change the max overshoot to be 100 pixels in both X axis and Y axis + scrollView.SetMaxOvershoot(100.0f, 100.0f); + Wait(application); + + // Check that overshoot should be now around 0.8. + overshootXValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_X); + overshootYValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_Y); + DALI_TEST_CHECK(overshootXValue > 0.79f && overshootXValue < 0.81f); + DALI_TEST_CHECK(overshootYValue > 0.79f && overshootYValue < 0.81f); + + // Scroll page further in NW (-30,-30 pixels), then check that overshoot should be now 1.0. (don't release touch) + currentPos = PerformGestureDiagonalSwipe(application, OVERSHOOT_START_SCROLL_POSITION, Vector2(1.0f, 1.0f), 30, false); + overshootXValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_X); + overshootYValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_Y); + DALI_TEST_EQUALS(overshootXValue, 1.0f, TEST_LOCATION); + DALI_TEST_EQUALS(overshootYValue, 1.0f, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliToolkitScrollViewSetScrollingDirectionP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSetScrollingDirectionP"); + + // Set up a scrollView... + ScrollView scrollView = ScrollView::New(); + Stage::GetCurrent().Add( scrollView ); + Vector2 stageSize = Stage::GetCurrent().GetSize(); + scrollView.SetSize(stageSize); + scrollView.SetParentOrigin(ParentOrigin::TOP_LEFT); + scrollView.SetAnchorPoint(AnchorPoint::TOP_LEFT); + + Vector2 START_POSITION = Vector2(10.0f, 10.0f); + + scrollView.ScrollTo(START_POSITION, 0.0f); + Wait(application); + // Try a vertical swipe. + PerformGestureDiagonalSwipe(application, START_POSITION, Vector2(0.0f, 1.0f), 60, true); + // Take into account resampling done when prediction is off. + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition() - Vector2(0.0f, 0.5f), Vector2(10.0f, -50.0f), 0.25f, TEST_LOCATION ); + + scrollView.SetScrollingDirection(Dali::PanGestureDetector::DIRECTION_VERTICAL); + + scrollView.ScrollTo(START_POSITION, 0.0f); + Wait(application); + // Try a vertical swipe. + PerformGestureDiagonalSwipe(application, START_POSITION, Vector2(0.0f, 1.0f), 60, true); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), START_POSITION, TEST_LOCATION ); + + scrollView.RemoveScrollingDirection(Dali::PanGestureDetector::DIRECTION_VERTICAL); + + scrollView.ScrollTo(Vector2(10.0f, 10.0f), 0.0f); + Wait(application); + // Try a vertical swipe. + PerformGestureDiagonalSwipe(application, START_POSITION, Vector2(0.0f, 1.0f), 60, true); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition() - Vector2(0.0f, 0.5f), Vector2(10.0f, -50.0f), 0.25f, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewRemoveScrollingDirectionP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewRemoveScrollingDirectionP"); + + // Set up a scrollView... + ScrollView scrollView = ScrollView::New(); + Stage::GetCurrent().Add( scrollView ); + Vector2 stageSize = Stage::GetCurrent().GetSize(); + scrollView.SetSize(stageSize); + scrollView.SetParentOrigin(ParentOrigin::TOP_LEFT); + scrollView.SetAnchorPoint(AnchorPoint::TOP_LEFT); + + Vector2 START_POSITION = Vector2(10.0f, 10.0f); + + scrollView.SetScrollingDirection(Dali::PanGestureDetector::DIRECTION_VERTICAL); + + scrollView.ScrollTo(START_POSITION, 0.0f); + Wait(application); + // Try a vertical swipe. + PerformGestureDiagonalSwipe(application, START_POSITION, Vector2(0.0f, 1.0f), 60, true); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), START_POSITION, TEST_LOCATION ); + + scrollView.RemoveScrollingDirection(Dali::PanGestureDetector::DIRECTION_VERTICAL); + + scrollView.ScrollTo(Vector2(10.0f, 10.0f), 0.0f); + Wait(application); + // Try a vertical swipe. + PerformGestureDiagonalSwipe(application, START_POSITION, Vector2(0.0f, 1.0f), 60, true); + // Take into account resampling done when prediction is off. + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition() - Vector2(0.0f, 0.5f), Vector2(10.0f, -50.0f), 0.25f, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewSetRulerXP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSetRulerXP"); + + ScrollView scrollView = ScrollView::New(); + Stage::GetCurrent().Add( scrollView ); + RulerPtr rulerX = new FixedRuler( 100.0f ); + rulerX->SetDomain( RulerDomain(0.0f, 800.0f, true) ); + + scrollView.SetRulerX( rulerX ); + + scrollView.ScrollTo( 1, 0.0f ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(100.0f, 0.0f), TEST_LOCATION ); + + RulerPtr newRulerX = new FixedRuler( 200.0f ); + newRulerX->SetDomain( RulerDomain(0.0f, 800.0f, true) ); + + scrollView.SetRulerX( newRulerX ); + + scrollView.ScrollTo( 1, 0.0f ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(200.0f, 0.0f), TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewSetRulerYP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSetRulerYP"); + + ScrollView scrollView = ScrollView::New(); + Stage::GetCurrent().Add( scrollView ); + + RulerPtr rulerY = new FixedRuler( 200.0f ); + rulerY->SetDomain( RulerDomain(0.0f, 400.0f, true) ); + + scrollView.SetRulerY( rulerY ); + + scrollView.ScrollTo( Vector2(0.0f, 350.0f), 0.0f ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(0.0f, 350.0f), TEST_LOCATION ); + + RulerPtr newRulerY = new FixedRuler( 100.0f ); + newRulerY->SetDomain( RulerDomain(0.0f, 200.0f, true) ); + scrollView.SetRulerY( newRulerY ); + + scrollView.ScrollTo( Vector2(0.0f, 350.0f), 0.0f ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), Vector2(0.0f, 200.0f), TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewSetMinimumSpeedForFlickP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSetMinimumSpeedForFlickP"); + + ScrollView scrollView = ScrollView::New(); + scrollView.SetMinimumSpeedForFlick(25.0f); + DALI_TEST_EQUALS( scrollView.GetMinimumSpeedForFlick(), 25.0f, TEST_LOCATION ); + scrollView.SetMinimumSpeedForFlick(60.0f); + DALI_TEST_EQUALS( scrollView.GetMinimumSpeedForFlick(), 60.0f, TEST_LOCATION ); + END_TEST; +} + +int UtcDaliToolkitScrollViewSetMinimumDistanceForFlickP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSetMinimumDistanceForFlick"); + + ScrollView scrollView = ScrollView::New(); + + scrollView.SetMinimumDistanceForFlick(Vector2(30.0f, 15.0f)); + DALI_TEST_EQUALS( scrollView.GetMinimumDistanceForFlick(), Vector2(30.0f, 15.0f), TEST_LOCATION ); + scrollView.SetMinimumDistanceForFlick(Vector2(60.0f, 30.0f)); + DALI_TEST_EQUALS( scrollView.GetMinimumDistanceForFlick(), Vector2(60.0f, 30.0f), TEST_LOCATION); + END_TEST; +} + +int UtcDaliToolkitScrollViewSetWheelScrollDistanceStepP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSetWheelScrollDistanceStepP"); + + ScrollView scrollView = ScrollView::New(); + // Disable Refresh signal (TET environment cannot use adaptor's Timer) + scrollView.SetWheelScrollDistanceStep(Vector2(30.0f, 15.0f)); + DALI_TEST_EQUALS( scrollView.GetWheelScrollDistanceStep(), Vector2(30.0f, 15.0f), TEST_LOCATION ); + scrollView.SetWheelScrollDistanceStep(Vector2(60.0f, 30.0f)); + DALI_TEST_EQUALS( scrollView.GetWheelScrollDistanceStep(), Vector2(60.0f, 30.0f), TEST_LOCATION); + END_TEST; +} + +int UtcDaliToolkitScrollViewApplyEffectP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewApplyEffectP"); + + // Create a ScrollView + ScrollView scrollView = ScrollView::New(); + + // Create two scroll view effects + Dali::Path path = Dali::Path::New(); + ScrollViewEffect effect = ScrollViewPagePathEffect::New(path, Vector3(-1.0f, 0.0f, 0.0f), Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(100.0f, 100.0f, 0.0f), 2); + ScrollViewEffect newEffect = ScrollViewPagePathEffect::New(path, Vector3(-1.0f, 1.0f, 1.0f), Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(200.0f, 150.0f, 0.0f), 5); + + // Apply both effects + scrollView.ApplyEffect(effect); + scrollView.ApplyEffect(newEffect); + + DALI_TEST_CHECK( true ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewApplyEffectN(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewApplyEffectN"); + + // Create a ScrollView + ScrollView scrollView = ScrollView::New(); + + // Create two scroll view effects + Dali::Path path = Dali::Path::New(); + ScrollViewEffect effect = ScrollViewPagePathEffect::New(path, Vector3(-1.0f, 0.0f, 0.0f), Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(100.0f, 100.0f, 0.0f), 2); + ScrollViewEffect newEffect = ScrollViewPagePathEffect::New(path, Vector3(-1.0f, 1.0f, 1.0f), Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(200.0f, 150.0f, 0.0f), 5); + + // Apply both effects + scrollView.ApplyEffect(effect); + scrollView.ApplyEffect(newEffect); + + // Attempt to apply the same effect again + try + { + scrollView.ApplyEffect(newEffect); + tet_result( TET_FAIL ); + } + catch ( DaliException& e ) + { + DALI_TEST_ASSERT( e, "!effectAlreadyExistsInScrollView", TEST_LOCATION ); + } + + END_TEST; +} + +int UtcDaliToolkitScrollViewRemoveEffectP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewRemoveEffectP"); + + // Create a ScrollView + ScrollView scrollView = ScrollView::New(); + + // Create two scroll view effects + Dali::Path path = Dali::Path::New(); + ScrollViewEffect effect = ScrollViewPagePathEffect::New(path, Vector3(-1.0f, 0.0f, 0.0f), Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(100.0f, 100.0f, 0.0f), 2); + ScrollViewEffect newEffect = ScrollViewPagePathEffect::New(path, Vector3(-1.0f, 1.0f, 1.0f), Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(200.0f, 150.0f, 0.0f), 5); + + // Apply both effects + scrollView.ApplyEffect(effect); + scrollView.ApplyEffect(newEffect); + + // Remove both effects + scrollView.RemoveEffect(effect); + scrollView.RemoveEffect(newEffect); + + DALI_TEST_CHECK( true ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewRemoveEffectN(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewRemoveEffectN"); + + // Create a ScrollView + ScrollView scrollView = ScrollView::New(); + + // Create two scroll view effects + Dali::Path path = Dali::Path::New(); + ScrollViewEffect effect = ScrollViewPagePathEffect::New(path, Vector3(-1.0f, 0.0f, 0.0f), Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(100.0f, 100.0f, 0.0f), 2); + ScrollViewEffect newEffect = ScrollViewPagePathEffect::New(path, Vector3(-1.0f, 1.0f, 1.0f), Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(200.0f, 150.0f, 0.0f), 5); + + // Apply the first effect + scrollView.ApplyEffect(effect); + + // Attempt to remove the second effect which has not been applied to scroll view + try + { + scrollView.RemoveEffect(newEffect); + tet_result( TET_FAIL ); + } + catch ( DaliException& e ) + { + DALI_TEST_ASSERT( e, "effectExistedInScrollView", TEST_LOCATION ); + } + + END_TEST; +} + +int UtcDaliToolkitScrollViewRemoveAllEffectsP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewRemoveAllEffectsP"); + + // Create a ScrollView + ScrollView scrollView = ScrollView::New(); + + // Create two scroll view effects + Dali::Path path = Dali::Path::New(); + ScrollViewEffect effect = ScrollViewPagePathEffect::New(path, Vector3(-1.0f, 0.0f, 0.0f), Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(100.0f, 100.0f, 0.0f), 2); + ScrollViewEffect newEffect = ScrollViewPagePathEffect::New(path, Vector3(-1.0f, 1.0f, 1.0f), Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(200.0f, 150.0f, 0.0f), 5); + + // Apply both effects + scrollView.ApplyEffect(effect); + scrollView.ApplyEffect(newEffect); + + // Attempt to apply the same first effect again + try + { + scrollView.ApplyEffect(effect); + tet_result( TET_FAIL ); + } + catch ( DaliException& e ) + { + DALI_TEST_ASSERT( e, "!effectAlreadyExistsInScrollView", TEST_LOCATION ); + } + + // Remove both effects + scrollView.RemoveAllEffects(); + + // Apply both effects again + scrollView.ApplyEffect(effect); + scrollView.ApplyEffect(newEffect); + + DALI_TEST_CHECK( true ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewRemoveAllEffectsN(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewRemoveAllEffectsN"); + + // Create a ScrollView + ScrollView scrollView = ScrollView::New(); + + // Remove effects when there is no effect applied previously + scrollView.RemoveAllEffects(); + + DALI_TEST_CHECK( true ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewSetOvershootEnabledP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSetOvershootEnabledP"); + + ScrollView scrollView = ScrollView::New(); + + scrollView.SetOvershootEnabled(true); + DALI_TEST_CHECK(scrollView.IsOvershootEnabled()); + + scrollView.SetOvershootEnabled(false); + DALI_TEST_CHECK(!scrollView.IsOvershootEnabled()); + + END_TEST; +} + +int UtcDaliToolkitScrollViewSetOvershootEffectColorP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSetOvershootEffectColorP"); + + ScrollView scrollView = ScrollView::New(); + + scrollView.SetOvershootEffectColor(Dali::Color::RED); + DALI_TEST_EQUALS(scrollView.GetOvershootEffectColor(), Dali::Color::RED, TEST_LOCATION); + + scrollView.SetOvershootEffectColor(Dali::Color::YELLOW); + DALI_TEST_EQUALS(scrollView.GetOvershootEffectColor(), Dali::Color::YELLOW, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliToolkitScrollViewSetOvershootAnimationSpeedP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewSetOvershootAnimationSpeedP"); + + ScrollView scrollView = ScrollView::New(); + + scrollView.SetOvershootAnimationSpeed(55.0f); + DALI_TEST_EQUALS(scrollView.GetOvershootAnimationSpeed(), 55.0f, TEST_LOCATION); + + scrollView.SetOvershootAnimationSpeed(120.0f); + DALI_TEST_EQUALS(scrollView.GetOvershootAnimationSpeed(), 120.0f, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliToolkitScrollViewGetSet(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewGetSet"); + ScrollView scrollView = ScrollView::New(); + scrollView.SetMaxFlickSpeed(0.5f); + DALI_TEST_EQUALS(scrollView.GetMaxFlickSpeed(), 0.5f, Math::MACHINE_EPSILON_0, TEST_LOCATION); + scrollView.SetFrictionCoefficient(0.6f); + DALI_TEST_EQUALS(scrollView.GetFrictionCoefficient(), 0.6f, Math::MACHINE_EPSILON_0, TEST_LOCATION); + scrollView.SetFlickSpeedCoefficient(0.7f); + DALI_TEST_EQUALS(scrollView.GetFlickSpeedCoefficient(), 0.7f, Math::MACHINE_EPSILON_0, TEST_LOCATION); + END_TEST; +} + +int UtcDaliToolkitScrollViewRulerDomainConstructorP(void) +{ + ToolkitTestApplication application; + + RulerDomain domainX = RulerDomain(0.0f, 200.0f, true); + DALI_TEST_EQUALS( domainX.min, 0.0f, TEST_LOCATION); + DALI_TEST_EQUALS( domainX.max, 200.0f, TEST_LOCATION); + DALI_TEST_EQUALS( domainX.enabled, true, TEST_LOCATION); + + RulerDomain domainY = RulerDomain(100.0f, 500.0f, false); + DALI_TEST_EQUALS( domainY.min, 100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( domainY.max, 500.0f, TEST_LOCATION); + DALI_TEST_EQUALS( domainY.enabled, false, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliToolkitScrollViewRulerDomainGetSizeP(void) +{ + ToolkitTestApplication application; + + RulerDomain domainX = RulerDomain(0.0f, 200.0f, true); + DALI_TEST_EQUALS( domainX.GetSize(), 200.0f, TEST_LOCATION); + + RulerDomain domainY = RulerDomain(100.0f, 500.0f, false); + DALI_TEST_EQUALS( domainY.GetSize(), 400.0f, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliToolkitScrollViewRulerDomainClampP(void) +{ + ToolkitTestApplication application; + + RulerDomain domainX = RulerDomain(0.0f, 200.0f, true); + + float value = domainX.Clamp(50.0f, 100.0f, 1.0f); + DALI_TEST_EQUALS( value, 50.0f, TEST_LOCATION); + + value = domainX.Clamp(300.0f, 20.0f, 1.0f); + DALI_TEST_EQUALS( value, 180.0f, TEST_LOCATION); + + value = domainX.Clamp(300.0f, 20.0f, 0.5f); + DALI_TEST_EQUALS( value, 80.0f, TEST_LOCATION); + + value = domainX.Clamp(250.0f, 200.0f, 2.0f); + DALI_TEST_EQUALS( value, 200.0f, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliToolkitScrollViewRulerDomainClampWithStateP(void) +{ + ToolkitTestApplication application; + + RulerDomain domainX = RulerDomain(0.0f, 200.0f, true); + + ClampState clamped; + float value = domainX.Clamp(50.0f, 100.0f, 1.0f, clamped); + DALI_TEST_EQUALS( value, 50.0f, TEST_LOCATION); + DALI_TEST_EQUALS( clamped, Dali::Toolkit::NotClamped, TEST_LOCATION); + + value = domainX.Clamp(-100.0f, 200.0f, 1.0f, clamped); + DALI_TEST_EQUALS( value, 0.0f, TEST_LOCATION); + DALI_TEST_EQUALS( clamped, Dali::Toolkit::ClampedToMin, TEST_LOCATION); + + value = domainX.Clamp(300.0f, 20.0f, 1.0f, clamped); + DALI_TEST_EQUALS( value, 180.0f, TEST_LOCATION); + DALI_TEST_EQUALS( clamped, Dali::Toolkit::ClampedToMax, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliToolkitScrollViewDefaultRulerConstructorP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewDefaultRulerConstructorP"); + + RulerPtr defaultRuler = new DefaultRuler(); + DALI_TEST_CHECK( defaultRuler ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewDefaultRulerDestructorP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewDefaultRulerDestructorP"); + + RulerPtr defaultRuler = new DefaultRuler(); + + DALI_TEST_CHECK( true ); + END_TEST; +} + +int UtcDaliToolkitScrollViewFixedRulerConstructorP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewFixedRulerConstructorP"); + + RulerPtr fixedRuler = new FixedRuler( 100.0f ); + DALI_TEST_CHECK( fixedRuler ); + + fixedRuler = new FixedRuler( 0.0f ); + DALI_TEST_CHECK( fixedRuler ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewFixedRulerDestructorP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewFixedRulerDestructorP"); + + RulerPtr fixedRuler = new FixedRuler( 100.0f ); + + DALI_TEST_CHECK( true ); + END_TEST; +} + +int UtcDaliToolkitScrollViewRulerGetTypeP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewRulerGetTypeP"); + + RulerPtr defaultRuler = new DefaultRuler(); + DALI_TEST_CHECK( defaultRuler ); + DALI_TEST_EQUALS( defaultRuler->GetType(), Dali::Toolkit::Ruler::Free, TEST_LOCATION); + + RulerPtr fixedRuler = new FixedRuler( 100.0f ); + DALI_TEST_CHECK( fixedRuler ); + DALI_TEST_EQUALS( fixedRuler->GetType(), Dali::Toolkit::Ruler::Fixed, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliToolkitScrollViewRulerGetExtensionP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewRulerGetExtensionP"); + + RulerPtr defaultRuler = new DefaultRuler(); + DALI_TEST_CHECK( defaultRuler ); + DALI_TEST_CHECK( !defaultRuler->GetExtension() ); + + RulerPtr fixedRuler = new FixedRuler( 100.0f ); + DALI_TEST_CHECK( fixedRuler ); + DALI_TEST_CHECK( !fixedRuler->GetExtension() ); + + END_TEST; +} + +int UtcDaliToolkitScrollViewRulerEnableDisable(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewRulerEnableDisable"); + + RulerPtr ruler = new DefaultRuler(); + + DALI_TEST_CHECK( ruler->IsEnabled() ); + ruler->Disable(); + DALI_TEST_CHECK( !ruler->IsEnabled() ); + ruler->Enable(); + DALI_TEST_CHECK( ruler->IsEnabled() ); + END_TEST; +} + +int UtcDaliToolkitScrollViewRulerDomainEnableDisable(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewRulerDomainEnableDisable"); + + RulerPtr ruler = new DefaultRuler(); + DALI_TEST_EQUALS( ruler->GetDomain().GetSize(), 1.0f, TEST_LOCATION ); + + ruler->SetDomain( RulerDomain(0.0f, 100.0f, true) ); DALI_TEST_EQUALS( ruler->GetDomain().GetSize(), 100.0f, TEST_LOCATION ); DALI_TEST_EQUALS( ruler->Clamp(-200.0f), 0.0f, TEST_LOCATION ); DALI_TEST_EQUALS( ruler->Clamp(200.0f), 100.0f, TEST_LOCATION ); @@ -908,10 +2049,10 @@ int UtcDaliRulerDomainEnableDisable(void) END_TEST; } -int UtcDaliRulerSnapAndClamp(void) +int UtcDaliToolkitScrollViewRulerSnapAndClamp(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliRulerSnapAndClamp"); + tet_infoline(" UtcDaliToolkitScrollViewRulerSnapAndClamp"); RulerPtr ruler = new FixedRuler( 50.0f ); ruler->SetDomain( RulerDomain(0.0f, 400.0f, true) ); @@ -963,10 +2104,10 @@ int UtcDaliRulerSnapAndClamp(void) END_TEST; } -int UtcDaliRulerFixedRulerSpacing(void) +int UtcDaliToolkitScrollViewFixedRulerGetPositionFromPageP(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliRulerFixedRulerSpacing"); + tet_infoline(" UtcDaliToolkitScrollViewFixedRulerGetPositionFromPageP"); RulerPtr rulerNormal = new FixedRuler( 25.0f ); rulerNormal->SetDomain( RulerDomain(10.0f, 90.0f, true) ); @@ -981,133 +2122,229 @@ int UtcDaliRulerFixedRulerSpacing(void) position = rulerNormal->GetPositionFromPage(2, volume, true); DALI_TEST_EQUALS( position, 60.0f, TEST_LOCATION ); DALI_TEST_EQUALS( volume, 0u, TEST_LOCATION ); + + // Disable the ruler + rulerNormal->Disable(); + + position = rulerNormal->GetPositionFromPage(1, volume, true); + DALI_TEST_EQUALS( position, 10.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( volume, 1u, TEST_LOCATION ); + + position = rulerNormal->GetPositionFromPage(2, volume, true); + DALI_TEST_EQUALS( position, 10.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( volume, 2u, TEST_LOCATION ); + END_TEST; } -int UtcDaliScrollViewOvershoot(void) +int UtcDaliToolkitScrollViewDefaultRulerGetTotalPagesP(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewOvershoot"); + tet_infoline(" UtcDaliToolkitScrollViewDefaultRulerGetTotalPagesP"); - // Set up a scrollView... - ScrollView scrollView = ScrollView::New(); - Stage::GetCurrent().Add( scrollView ); - Vector2 stageSize = Stage::GetCurrent().GetSize(); - scrollView.SetSize(stageSize); - scrollView.SetParentOrigin(ParentOrigin::TOP_LEFT); - scrollView.SetAnchorPoint(AnchorPoint::TOP_LEFT); + RulerPtr defaultRuler = new DefaultRuler(); + DALI_TEST_CHECK( defaultRuler ); + DALI_TEST_EQUALS( defaultRuler->GetTotalPages(), 1u, TEST_LOCATION); - // Position rulers. - RulerPtr rulerX = new DefaultRuler(); - RulerPtr rulerY = new DefaultRuler(); - rulerX->SetDomain( RulerDomain(0.0f, stageSize.width + CLAMP_EXCESS_WIDTH, true) ); - rulerY->SetDomain( RulerDomain(0.0f, stageSize.height + CLAMP_EXCESS_HEIGHT, true) ); - scrollView.SetRulerX(rulerX); - scrollView.SetRulerY(rulerY); - scrollView.ScrollStartedSignal().Connect( &OnScrollStart ); - scrollView.ScrollUpdatedSignal().Connect( &OnScrollUpdate ); - scrollView.ScrollCompletedSignal().Connect( &OnScrollComplete ); + END_TEST; +} - scrollView.ScrollTo(OVERSHOOT_START_SCROLL_POSITION, 0.0f); // move in a little. - Wait(application); +int UtcDaliToolkitScrollViewDefaultRulerGetPageFromPositionP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewDefaultRulerGetPageFromPositionP"); - // 1. Scroll page in NW (-500,-500 pixels), then inspect overshoot. (don't release touch) - Vector2 currentPos = Vector2(100.0f, 100.0f); - currentPos = PerformGestureDiagonalSwipe(application, currentPos, Vector2(5.0f, 5.0f), 100, false); - float overshootXValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_X); - float overshootYValue = scrollView.GetProperty(ScrollView::Property::OVERSHOOT_Y); - Vector3 positionValue = scrollView.GetProperty(ScrollView::Property::SCROLL_POSITION); - DALI_TEST_EQUALS(overshootXValue, 1.0f, TEST_LOCATION); - DALI_TEST_EQUALS(overshootYValue, 1.0f, TEST_LOCATION); - DALI_TEST_EQUALS(positionValue, Vector3::ZERO, TEST_LOCATION); + RulerPtr defaultRuler = new DefaultRuler(); + DALI_TEST_CHECK( defaultRuler ); + DALI_TEST_EQUALS( defaultRuler->GetPageFromPosition(100.0f, true), 0u, TEST_LOCATION); + DALI_TEST_EQUALS( defaultRuler->GetPageFromPosition(-300.0f, false), 0u, TEST_LOCATION); - float timeToReachOrigin; + END_TEST; +} - // Now release touch. Overshoot should snap back to zero. - SendPan(application, Gesture::Finished, currentPos); - timeToReachOrigin = TestOvershootSnapDuration(application, scrollView); +int UtcDaliToolkitScrollViewDefaultRulerGetPositionFromPageP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewDefaultRulerGetPositionFromPageP"); - DALI_TEST_CHECK( (timeToReachOrigin > Toolkit::ScrollView::DEFAULT_SNAP_OVERSHOOT_DURATION - TIME_TOLERANCE) && - (timeToReachOrigin < Toolkit::ScrollView::DEFAULT_SNAP_OVERSHOOT_DURATION + TIME_TOLERANCE) ); + RulerPtr defaultRuler = new DefaultRuler(); + DALI_TEST_CHECK( defaultRuler ); - // 2. Repeat Scroll, but this time change overshoot snap duration to shorter time - scrollView.SetSnapOvershootDuration(TEST_CUSTOM1_SNAP_OVERSHOOT_DURATION); + unsigned int volume; + DALI_TEST_EQUALS( defaultRuler->GetPositionFromPage(0, volume, true), 0.0f, TEST_LOCATION); + DALI_TEST_EQUALS( volume, 0u, TEST_LOCATION); - currentPos = PerformGestureDiagonalSwipe(application, Vector2(100.0f, 100.0f), Vector2(5.0f, 5.0f), 100, false); - // Now release touch. Overshoot should snap back to zero. - SendPan(application, Gesture::Finished, currentPos); - timeToReachOrigin = TestOvershootSnapDuration(application, scrollView); + DALI_TEST_EQUALS( defaultRuler->GetPositionFromPage(3, volume, false), 0.0f, TEST_LOCATION); + DALI_TEST_EQUALS( volume, 0u, TEST_LOCATION); - DALI_TEST_CHECK( (timeToReachOrigin > TEST_CUSTOM1_SNAP_OVERSHOOT_DURATION - TIME_TOLERANCE) && - (timeToReachOrigin < TEST_CUSTOM1_SNAP_OVERSHOOT_DURATION + TIME_TOLERANCE) ); + END_TEST; +} - // 3. Repeat Scroll, but this time change overshoot snap duration to longer time. - scrollView.SetSnapOvershootDuration(TEST_CUSTOM2_SNAP_OVERSHOOT_DURATION); +int UtcDaliToolkitScrollViewDefaultRulerSnapP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewDefaultRulerSnapP"); - currentPos = PerformGestureDiagonalSwipe(application, Vector2(100.0f, 100.0f), Vector2(5.0f, 5.0f), 100, false); - // Now release touch. Overshoot should snap back to zero. - SendPan(application, Gesture::Finished, currentPos); - timeToReachOrigin = TestOvershootSnapDuration(application, scrollView); + RulerPtr defaultRuler = new DefaultRuler(); + DALI_TEST_CHECK( defaultRuler ); - DALI_TEST_CHECK( (timeToReachOrigin > TEST_CUSTOM2_SNAP_OVERSHOOT_DURATION - TIME_TOLERANCE) && - (timeToReachOrigin < TEST_CUSTOM2_SNAP_OVERSHOOT_DURATION + TIME_TOLERANCE) ); + DALI_TEST_EQUALS( defaultRuler->Snap(50.0f, 0.5f), 50.0f, TEST_LOCATION); + DALI_TEST_EQUALS( defaultRuler->Snap(-120.0f, 1.0f), -120.0f, TEST_LOCATION); - // 4. Repeat Scroll, but this time change overshoot function. - scrollView.SetSnapOvershootDuration(TEST_CUSTOM3_SNAP_OVERSHOOT_DURATION); - scrollView.SetSnapOvershootAlphaFunction(TestAlphaFunction); + END_TEST; +} - currentPos = PerformGestureDiagonalSwipe(application, Vector2(100.0f, 100.0f), Vector2(5.0f, 5.0f), 100, false); - // Now release touch. Overshoot should snap back to zero. - SendPan(application, Gesture::Finished, currentPos); - timeToReachOrigin = TestOvershootSnapDuration(application, scrollView); +int UtcDaliToolkitScrollViewFixedRulerGetTotalPagesP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewFixedRulerGetTotalPagesP"); + + RulerPtr fixedRuler = new FixedRuler( 100.0f ); + fixedRuler->SetDomain( RulerDomain(0.0f, 400.0f, true) ); + + fixedRuler->Enable(); + DALI_TEST_EQUALS( fixedRuler->GetTotalPages(), 4u, TEST_LOCATION); + + fixedRuler->Disable(); + DALI_TEST_EQUALS( fixedRuler->GetTotalPages(), 1u, TEST_LOCATION); - DALI_TEST_CHECK( (timeToReachOrigin > TEST_CUSTOM3_SNAP_OVERSHOOT_DURATION - TIME_TOLERANCE) && - (timeToReachOrigin < TEST_CUSTOM3_SNAP_OVERSHOOT_DURATION + TIME_TOLERANCE) ); END_TEST; } -int UtcDaliScrollViewSnapAlphaFunction(void) +int UtcDaliToolkitScrollViewFixedRulerGetPageFromPositionP(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewSnapAlphaFunction"); + tet_infoline(" UtcDaliToolkitScrollViewFixedRulerGetPageFromPositionP"); + + RulerPtr fixedRuler = new FixedRuler( 100.0f ); + fixedRuler->SetDomain( RulerDomain(0.0f, 400.0f, true) ); + + fixedRuler->Enable(); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(250.0f, true), 3u, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(250.0f, false), 3u, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(-350.0f, true), 1u, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(-350.0f, false), 0u, TEST_LOCATION); + + fixedRuler->Disable(); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(250.0f, true), 0u, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(250.0f, false), 0u, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(-350.0f, true), 0u, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(-350.0f, false), 0u, TEST_LOCATION); + + // Set domain size to be smaller than the ruler space + fixedRuler->SetDomain( RulerDomain(0.0f, 50.0f, true) ); + + fixedRuler->Enable(); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(250.0f, true), 0u, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(250.0f, false), 3u, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(-350.0f, true), 0u, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(-350.0f, false), 0u, TEST_LOCATION); + + fixedRuler->Disable(); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(250.0f, true), 0u, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(250.0f, false), 0u, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(-350.0f, true), 0u, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->GetPageFromPosition(-350.0f, false), 0u, TEST_LOCATION); - // Set up a scrollView... - ScrollView scrollView = ScrollView::New(); - scrollView.SetScrollSnapAlphaFunction( AlphaFunctions::EaseIn ); - DALI_TEST_CHECK( scrollView.GetScrollSnapAlphaFunction() == AlphaFunctions::EaseIn ); - scrollView.SetScrollSnapAlphaFunction( AlphaFunctions::EaseOut ); - DALI_TEST_CHECK( scrollView.GetScrollSnapAlphaFunction() == AlphaFunctions::EaseOut ); + END_TEST; +} + +int UtcDaliToolkitScrollViewFixedRulerSnapP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitScrollViewFixedRulerSnapP"); + + RulerPtr fixedRuler = new FixedRuler( 100.0f ); + fixedRuler->SetDomain( RulerDomain(0.0f, 400.0f, true) ); + + DALI_TEST_EQUALS( fixedRuler->Snap(-30.0f, 0.0f), -100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(-70.0f, 0.0f), -100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(-120.0f, 0.0f), -200.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(-480.0f, 0.0f), -500.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(20.0f, 0.0f), 0.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(50.0f, 0.0f), 0.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(80.0f, 0.0f), 0.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(100.0f, 0.0f), 100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(120.0f, 0.0f), 100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(250.0f, 0.0f), 200.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(620.0f, 0.0f), 600.0f, TEST_LOCATION); + + DALI_TEST_EQUALS( fixedRuler->Snap(-30.0f, 0.5f), 0.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(-70.0f, 0.5f), -100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(-120.0f, 0.5f), -100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(-480.0f, 0.5f), -500.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(20.0f, 0.5f), 0.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(50.0f, 0.5f), 100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(80.0f, 0.5f), 100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(100.0f, 0.5f), 100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(120.0f, 0.5f), 100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(250.0f, 0.5f), 300.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(620.0f, 0.5f), 600.0f, TEST_LOCATION); + + DALI_TEST_EQUALS( fixedRuler->Snap(-30.0f, 1.0f), 0.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(-70.0f, 1.0f), 0.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(-120.0f, 1.0f), -100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(-480.0f, 1.0f), -400.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(20.0f, 1.0f), 100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(50.0f, 1.0f), 100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(80.0f, 1.0f), 100.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(100.0f, 1.0f), 200.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(120.0f, 1.0f), 200.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(250.0f, 1.0f), 300.0f, TEST_LOCATION); + DALI_TEST_EQUALS( fixedRuler->Snap(620.0f, 1.0f), 700.0f, TEST_LOCATION); - scrollView.SetScrollFlickAlphaFunction( AlphaFunctions::Bounce ); - DALI_TEST_CHECK( scrollView.GetScrollFlickAlphaFunction() == AlphaFunctions::Bounce ); - scrollView.SetScrollFlickAlphaFunction( AlphaFunctions::BounceBack ); - DALI_TEST_CHECK( scrollView.GetScrollFlickAlphaFunction() == AlphaFunctions::BounceBack ); END_TEST; } -int UtcDaliScrollViewSnapDuration(void) +int UtcDaliToolkitScrollViewConstraintsMove(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewSnapDuration"); + tet_infoline(" UtcDaliToolkitScrollViewConstraintsMove"); // Set up a scrollView... ScrollView scrollView = ScrollView::New(); - scrollView.SetScrollSnapDuration( 1.0f ); - DALI_TEST_EQUALS( scrollView.GetScrollSnapDuration(), 1.0f, TEST_LOCATION ); - scrollView.SetScrollSnapDuration( 0.5f ); - DALI_TEST_EQUALS( scrollView.GetScrollSnapDuration(), 0.5f, TEST_LOCATION ); + Stage::GetCurrent().Add( scrollView ); + Vector2 stageSize = Stage::GetCurrent().GetSize(); + scrollView.SetSize(stageSize); + scrollView.SetParentOrigin(ParentOrigin::TOP_LEFT); + scrollView.SetAnchorPoint(AnchorPoint::TOP_LEFT); + + // Position rulers. + RulerPtr rulerX = new DefaultRuler(); + RulerPtr rulerY = new DefaultRuler(); + rulerX->SetDomain( RulerDomain(0.0f, stageSize.width + CLAMP_EXCESS_WIDTH, true) ); + rulerY->SetDomain( RulerDomain(0.0f, stageSize.height + CLAMP_EXCESS_HEIGHT, true) ); + scrollView.SetRulerX(rulerX); + scrollView.SetRulerY(rulerY); + + // Add an Actor to ScrollView, + Actor a = Actor::New(); + scrollView.Add(a); + a.SetPosition( TEST_ACTOR_POSITION ); + Wait(application); + + const Vector2 target = Vector2(100.0f, 100.0f); + const Vector2 target2 = Vector2(200.0f, 200.0f); + + Constraint constraint = Constraint::New( scrollView, Actor::Property::POSITION, MoveActorConstraint ); + constraint.AddSource( Source(scrollView, ScrollView::Property::SCROLL_POSITION) ); + constraint.SetRemoveAction(Constraint::Discard); + scrollView.ApplyConstraintToChildren(constraint); + + scrollView.ScrollTo( target, 0.0f ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target, TEST_LOCATION ); + scrollView.ScrollTo( target2 ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target2, TEST_LOCATION ); - scrollView.SetScrollFlickDuration( 2.0f ); - DALI_TEST_EQUALS( scrollView.GetScrollFlickDuration(), 2.0f, TEST_LOCATION ); - scrollView.SetScrollFlickDuration( 1.5f ); - DALI_TEST_EQUALS( scrollView.GetScrollFlickDuration(), 1.5f, TEST_LOCATION ); END_TEST; } -int UtcDaliScrollViewSignalsSnapStart(void) +int UtcDaliToolkitScrollViewConstraintsWrap(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewSignalsSnapStart"); + tet_infoline(" UtcDaliToolkitScrollViewConstraintsWrap"); // Set up a scrollView... ScrollView scrollView = ScrollView::New(); @@ -1124,51 +2361,258 @@ int UtcDaliScrollViewSignalsSnapStart(void) rulerY->SetDomain( RulerDomain(0.0f, stageSize.height + CLAMP_EXCESS_HEIGHT, true) ); scrollView.SetRulerX(rulerX); scrollView.SetRulerY(rulerY); - scrollView.SnapStartedSignal().Connect( &OnSnapStart ); - scrollView.ScrollTo(CLAMP_START_SCROLL_POSITION, 0.0f); // move in a little. + // Add an Actor to ScrollView, + Actor a = Actor::New(); + scrollView.Add(a); + a.SetPosition( TEST_ACTOR_POSITION ); Wait(application); - // First try a snap. - PerformGestureDiagonalSwipe(application, CLAMP_TOUCH_START, Vector2(0.5f, 0.0f), 60, true); + const Vector2 target = Vector2(100.0f, 100.0f); + const Vector2 target2 = Vector2(200.0f, 200.0f); - DALI_TEST_CHECK( gOnSnapStartCalled ); - DALI_TEST_CHECK( gLastSnapType == Toolkit::Snap ); + Constraint constraint = Constraint::New( scrollView, Actor::Property::POSITION, WrapActorConstraint ); + constraint.AddSource( LocalSource( Actor::Property::SCALE ) ); + constraint.AddSource( LocalSource( Actor::Property::ANCHOR_POINT ) ); + constraint.AddSource( LocalSource( Actor::Property::SIZE ) ); + constraint.AddSource( Source( scrollView, Toolkit::Scrollable::Property::SCROLL_POSITION_MIN ) ); + constraint.AddSource( Source( scrollView, Toolkit::Scrollable::Property::SCROLL_POSITION_MAX ) ); + constraint.AddSource( Source( scrollView, Toolkit::ScrollView::Property::WRAP ) ); + constraint.SetRemoveAction(Constraint::Discard); + scrollView.ApplyConstraintToChildren(constraint); - // Second try a swipe. - PerformGestureDiagonalSwipe(application, CLAMP_TOUCH_START, Vector2(20.0f, 0.0f), 60, true); + scrollView.ScrollTo( target, 0.0f ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target, TEST_LOCATION ); + scrollView.ScrollTo( target2 ); + Wait(application, RENDER_DELAY_SCROLL); + DALI_TEST_EQUALS( scrollView.GetCurrentScrollPosition(), target2, TEST_LOCATION ); + + scrollView.Remove(a); + Wait(application); - DALI_TEST_CHECK( gOnSnapStartCalled ); - DALI_TEST_CHECK( gLastSnapType == Toolkit::Flick ); END_TEST; } - -int UtcDaliScrollViewSetMouseWheelScrollDistanceStep(void) +// Non-API test (so no P or N variant). +int UtcDaliToolkitScrollViewGesturePageLimit(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewSetMouseWheelScrollDistanceStep"); + tet_infoline( " UtcDaliToolkitScrollViewGesturePageLimit" ); + // Set up a scrollView. ScrollView scrollView = ScrollView::New(); - // Disable Refresh signal (TET environment cannot use adaptor's Timer) - scrollView.SetMouseWheelScrollDistanceStep(Vector2(30.0f, 15.0f)); - DALI_TEST_EQUALS( scrollView.GetMouseWheelScrollDistanceStep(), Vector2(30.0f, 15.0f), TEST_LOCATION ); - scrollView.SetMouseWheelScrollDistanceStep(Vector2(60.0f, 30.0f)); - DALI_TEST_EQUALS( scrollView.GetMouseWheelScrollDistanceStep(), Vector2(60.0f, 30.0f), TEST_LOCATION); + + // Do not rely on stage size for UTC tests. + Vector2 pageSize( 720.0f, 1280.0f ); + scrollView.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS ); + scrollView.SetSize( pageSize ); + scrollView.SetParentOrigin( ParentOrigin::CENTER ); + scrollView.SetAnchorPoint( AnchorPoint::CENTER ); + scrollView.SetPosition( 0.0f, 0.0f, 0.0f ); + + // Position rulers. + // We set the X ruler to fixed to give us pages to snap to. + Dali::Toolkit::FixedRuler* rulerX = new Dali::Toolkit::FixedRuler( pageSize.width ); + // Note: The 3x page width is arbitary, but we need enough to show that we are + // capping page movement by the page limiter, and not the domain. + rulerX->SetDomain( Dali::Toolkit::RulerDomain( 0.0f, pageSize.width * 3.0f, false ) ); + Dali::Toolkit::RulerPtr rulerY = new Dali::Toolkit::DefaultRuler(); + rulerY->Disable(); + scrollView.SetRulerX( rulerX ); + scrollView.SetRulerY( rulerY ); + + scrollView.SetWrapMode( false ); + scrollView.SetScrollSensitive( true ); + + Stage::GetCurrent().Add( scrollView ); + + // Set up a gesture to perform. + Vector2 startPos( 50.0f, 0.0f ); + Vector2 direction( -5.0f, 0.0f ); + int frames = 200; + + // Force starting position. + scrollView.ScrollTo( startPos, 0.0f ); + Wait( application ); + + // Deliberately skip the "Finished" part of the gesture, so we can read the coordinates before the snap begins. + Vector2 currentPos( PerformGestureDiagonalSwipe( application, startPos, direction, frames - 1, false ) ); + + // Confirm the final X coord has not moved more than one page from the start X position. + DALI_TEST_GREATER( ( startPos.x + pageSize.width ), scrollView.GetCurrentScrollPosition().x, TEST_LOCATION ); + + // Finish the gesture and wait for the snap. + currentPos += direction; + SendPan( application, Gesture::Finished, currentPos ); + // We add RENDER_FRAME_INTERVAL on to wait for an extra frame (for the last "finished" gesture to complete first. + Wait( application, RENDER_DELAY_SCROLL + RENDER_FRAME_INTERVAL ); + + // Confirm the final X coord has snapped to exactly one page ahead of the start page. + DALI_TEST_EQUALS( pageSize.width, scrollView.GetCurrentScrollPosition().x, Math::MACHINE_EPSILON_0, TEST_LOCATION ); + END_TEST; } -int UtcDaliScrollViewGetSet(void) +int UtcDaliScrollViewSetGetProperty(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliScrollViewGetSet"); + + // Create the ScrollView actor ScrollView scrollView = ScrollView::New(); - scrollView.SetMaxOvershoot(50.0f, 50.0f); - scrollView.SetMaxFlickSpeed(0.5f); - DALI_TEST_EQUALS(scrollView.GetMaxFlickSpeed(), 0.5f, Math::MACHINE_EPSILON_0, TEST_LOCATION); - scrollView.SetFrictionCoefficient(0.6f); - DALI_TEST_EQUALS(scrollView.GetFrictionCoefficient(), 0.6f, Math::MACHINE_EPSILON_0, TEST_LOCATION); - scrollView.SetFlickSpeedCoefficient(0.7f); - DALI_TEST_EQUALS(scrollView.GetFlickSpeedCoefficient(), 0.7f, Math::MACHINE_EPSILON_0, TEST_LOCATION); + DALI_TEST_CHECK(scrollView); + + // Event side properties + + // Test "wrapEnabled" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("wrapEnabled") == ScrollView::Property::WRAP_ENABLED ); + scrollView.SetProperty( ScrollView::Property::WRAP_ENABLED, true ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::WRAP_ENABLED).Get(), true, TEST_LOCATION ); + + // Test "panningEnabled" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("panningEnabled") == ScrollView::Property::PANNING_ENABLED ); + scrollView.SetProperty( ScrollView::Property::PANNING_ENABLED, false ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::PANNING_ENABLED).Get(), false, TEST_LOCATION ); + + // Test "axisAutoLockEnabled" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("axisAutoLockEnabled") == ScrollView::Property::AXIS_AUTO_LOCK_ENABLED ); + scrollView.SetProperty( ScrollView::Property::AXIS_AUTO_LOCK_ENABLED, false ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::AXIS_AUTO_LOCK_ENABLED).Get(), false, TEST_LOCATION ); + + // Test "wheelScrollDistanceStep" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("wheelScrollDistanceStep") == ScrollView::Property::WHEEL_SCROLL_DISTANCE_STEP ); + scrollView.SetProperty( ScrollView::Property::WHEEL_SCROLL_DISTANCE_STEP, Vector2(100.0f, 50.0f) ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::WHEEL_SCROLL_DISTANCE_STEP).Get(), Vector2(100.0f, 50.0f), TEST_LOCATION ); + + // Test "overshootEnabled" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("overshootEnabled") == Scrollable::Property::OVERSHOOT_ENABLED ); + DALI_TEST_EQUALS( scrollView.GetProperty(Scrollable::Property::OVERSHOOT_ENABLED).Get(), scrollView.IsOvershootEnabled(), TEST_LOCATION ); + scrollView.SetProperty( Scrollable::Property::OVERSHOOT_ENABLED, false ); + DALI_TEST_EQUALS( scrollView.GetProperty(Scrollable::Property::OVERSHOOT_ENABLED).Get(), false, TEST_LOCATION ); + + // Animatable properties + + // Test "scrollPosition" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollPosition") == ScrollView::Property::SCROLL_POSITION ); + scrollView.SetProperty( ScrollView::Property::SCROLL_POSITION, Vector2(320.0f, 550.0f) ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_POSITION).Get(), Vector2(320.0f, 550.0f), TEST_LOCATION ); + + // Test "scrollPrePosition", "scrollPrePositionX" and "scrollPrePositionY" properties + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollPrePosition") == ScrollView::Property::SCROLL_PRE_POSITION ); + scrollView.SetProperty( ScrollView::Property::SCROLL_PRE_POSITION, Vector2(300.0f, 500.0f) ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_PRE_POSITION).Get(), Vector2(300.0f, 500.0f), TEST_LOCATION ); + + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollPrePositionX") == ScrollView::Property::SCROLL_PRE_POSITION_X ); + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollPrePositionY") == ScrollView::Property::SCROLL_PRE_POSITION_Y ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_PRE_POSITION_X).Get(), 300.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_PRE_POSITION_Y).Get(), 500.0f, TEST_LOCATION ); + scrollView.SetProperty( ScrollView::Property::SCROLL_PRE_POSITION_X, 400.0f ); + scrollView.SetProperty( ScrollView::Property::SCROLL_PRE_POSITION_Y, 600.0f ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_PRE_POSITION_X).Get(), 400.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_PRE_POSITION_Y).Get(), 600.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_PRE_POSITION).Get(), Vector2(400.0f, 600.0f), TEST_LOCATION ); + + // Test "scrollPrePositionMax", "scrollPrePositionMaxX" and "scrollPrePositionMaxY" properties + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollPrePositionMax") == ScrollView::Property::SCROLL_PRE_POSITION_MAX ); + scrollView.SetProperty( ScrollView::Property::SCROLL_PRE_POSITION_MAX, Vector2(100.0f, 200.0f) ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_PRE_POSITION_MAX).Get(), Vector2(100.0f, 200.0f), TEST_LOCATION ); + + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollPrePositionMaxX") == ScrollView::Property::SCROLL_PRE_POSITION_MAX_X ); + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollPrePositionMaxY") == ScrollView::Property::SCROLL_PRE_POSITION_MAX_Y ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_PRE_POSITION_MAX_X).Get(), 100.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_PRE_POSITION_MAX_Y).Get(), 200.0f, TEST_LOCATION ); + scrollView.SetProperty( ScrollView::Property::SCROLL_PRE_POSITION_MAX_X, 300.0f ); + scrollView.SetProperty( ScrollView::Property::SCROLL_PRE_POSITION_MAX_Y, 400.0f ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_PRE_POSITION_MAX_X).Get(), 300.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_PRE_POSITION_MAX_Y).Get(), 400.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_PRE_POSITION_MAX).Get(), Vector2(300.0f, 400.0f), TEST_LOCATION ); + + // Test "overshootX" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("overshootX") == ScrollView::Property::OVERSHOOT_X ); + scrollView.SetProperty( ScrollView::Property::OVERSHOOT_X, 0.8f ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::OVERSHOOT_X).Get(), 0.8f, TEST_LOCATION ); + + // Test "overshootY" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("overshootY") == ScrollView::Property::OVERSHOOT_Y ); + scrollView.SetProperty( ScrollView::Property::OVERSHOOT_Y, 0.8f ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::OVERSHOOT_Y).Get(), 0.8f, TEST_LOCATION ); + + // Test "scrollFinal", "scrollFinalX" and "scrollFinalY" properties + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollFinal") == ScrollView::Property::SCROLL_FINAL ); + scrollView.SetProperty( ScrollView::Property::SCROLL_FINAL, Vector2(200.0f, 300.0f) ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_FINAL).Get(), Vector2(200.0f, 300.0f), TEST_LOCATION ); + + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollFinalX") == ScrollView::Property::SCROLL_FINAL_X ); + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollFinalY") == ScrollView::Property::SCROLL_FINAL_Y ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_FINAL_X).Get(), 200.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_FINAL_Y).Get(), 300.0f, TEST_LOCATION ); + scrollView.SetProperty( ScrollView::Property::SCROLL_FINAL_X, 500.0f ); + scrollView.SetProperty( ScrollView::Property::SCROLL_FINAL_Y, 600.0f ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_FINAL_X).Get(), 500.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_FINAL_Y).Get(), 600.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_FINAL).Get(), Vector2(500.0f, 600.0f), TEST_LOCATION ); + + // Test "wrap" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("wrap") == ScrollView::Property::WRAP ); + scrollView.SetProperty( ScrollView::Property::WRAP, false ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::WRAP).Get(), false, TEST_LOCATION ); + + // Test "panning" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("panning") == ScrollView::Property::PANNING ); + scrollView.SetProperty( ScrollView::Property::PANNING, true ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::PANNING).Get(), true, TEST_LOCATION ); + + // Test "scrolling" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrolling") == ScrollView::Property::SCROLLING ); + scrollView.SetProperty( ScrollView::Property::SCROLLING, false ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLLING).Get(), false, TEST_LOCATION ); + + // Test "scrollDomainSize", "scrollDomainSizeX" and "scrollDomainSizeY" properties + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollDomainSize") == ScrollView::Property::SCROLL_DOMAIN_SIZE ); + scrollView.SetProperty( ScrollView::Property::SCROLL_DOMAIN_SIZE, Vector2(1200.0f, 1300.0f) ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_DOMAIN_SIZE).Get(), Vector2(1200.0f, 1300.0f), TEST_LOCATION ); + + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollDomainSizeX") == ScrollView::Property::SCROLL_DOMAIN_SIZE_X ); + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollDomainSizeY") == ScrollView::Property::SCROLL_DOMAIN_SIZE_Y ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_DOMAIN_SIZE_X).Get(), 1200.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_DOMAIN_SIZE_Y).Get(), 1300.0f, TEST_LOCATION ); + scrollView.SetProperty( ScrollView::Property::SCROLL_DOMAIN_SIZE_X, 1500.0f ); + scrollView.SetProperty( ScrollView::Property::SCROLL_DOMAIN_SIZE_Y, 1600.0f ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_DOMAIN_SIZE_X).Get(), 1500.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_DOMAIN_SIZE_Y).Get(), 1600.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_DOMAIN_SIZE).Get(), Vector2(1500.0f, 1600.0f), TEST_LOCATION ); + + // Test "scrollDomainOffset" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollDomainOffset") == ScrollView::Property::SCROLL_DOMAIN_OFFSET ); + scrollView.SetProperty( ScrollView::Property::SCROLL_DOMAIN_OFFSET, Vector2(500.0f, 200.0f) ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_DOMAIN_OFFSET).Get(), Vector2(500.0f, 200.0f), TEST_LOCATION ); + + // Test "scrollPositionDelta" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("scrollPositionDelta") == ScrollView::Property::SCROLL_POSITION_DELTA ); + scrollView.SetProperty( ScrollView::Property::SCROLL_POSITION_DELTA, Vector2(10.0f, 30.0f) ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::SCROLL_POSITION_DELTA).Get(), Vector2(10.0f, 30.0f), TEST_LOCATION ); + + // Test "startPagePosition" property + DALI_TEST_CHECK( scrollView.GetPropertyIndex("startPagePosition") == ScrollView::Property::START_PAGE_POSITION ); + scrollView.SetProperty( ScrollView::Property::START_PAGE_POSITION, Vector3(50.0f, 100.0f, 20.0f) ); + Wait(application); + DALI_TEST_EQUALS( scrollView.GetProperty(ScrollView::Property::START_PAGE_POSITION).Get(), Vector3(50.0f, 100.0f, 20.0f), TEST_LOCATION ); + END_TEST; }