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-ItemView.cpp;h=da5ce83797ba1f559585c25e05794b7d8f0769f9;hp=6b8fdef3978de0eec8b02b2d1da3399927bb8ee5;hb=be93fd772a1b1b09425ac0aaec1ea1b64e9a9e60;hpb=680c5587a1478717393d3a03cf6a17801edd00e0 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ItemView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ItemView.cpp index 6b8fdef..da5ce83 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ItemView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ItemView.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 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. @@ -22,8 +22,9 @@ // Need to override adaptor classes for toolkit test harness, so include // test harness headers before dali headers. #include - #include +#include +#include using namespace Dali; using namespace Toolkit; @@ -40,16 +41,74 @@ void utc_dali_toolkit_item_view_cleanup(void) namespace { -const unsigned int TOTAL_ITEM_NUMBER = 100; + +const unsigned int TOTAL_ITEM_NUMBER = 400; const char* TEST_IMAGE_FILE_NAME = "gallery_image_01.jpg"; +const int RENDER_FRAME_INTERVAL = 16; ///< Duration of each frame in ms. (at approx 60FPS) + static bool gObjectCreatedCallBackCalled; +static bool gOnLayoutActivatedCalled; ///< Whether the LayoutActivated signal was invoked. +static bool gOnScrollUpdateCalled; +static bool gOnWheelEventCalled; ///< Whether the WheelEventSignal signal was invoked. static void TestCallback(BaseHandle handle) { gObjectCreatedCallBackCalled = true; } +static void OnLayoutActivated() +{ + gOnLayoutActivatedCalled = true; +} + +static void OnScrollUpdate( const Vector2& position ) +{ + gOnScrollUpdateCalled = true; +} + +static bool OnWheelEvent( Actor actor, const Dali::WheelEvent& wheelEvent ) +{ + gOnWheelEventCalled = true; + return false; +} + +Integration::TouchEvent GenerateSingleTouch( PointState::Type state, const Vector2& screenPosition, uint32_t time ) +{ + Integration::TouchEvent touchEvent; + Integration::Point point; + point.SetState( state ); + point.SetDeviceId(4); + point.SetScreenPosition( screenPosition ); + point.SetDeviceClass( Device::Class::TOUCH ); + point.SetDeviceSubclass( Device::Subclass::NONE ); + touchEvent.points.push_back( point ); + touchEvent.time = time; + return touchEvent; +} + +/* + * Simulate time passed by. + * + * @note this will always process at least 1 frame (1/60 sec) + * + * @param application Test application instance + * @param duration Time to pass in milliseconds. + * @return The actual time passed in milliseconds + */ +int Wait(ToolkitTestApplication& application, int duration = 0) +{ + int time = 0; + + for(int i = 0; i <= ( duration / RENDER_FRAME_INTERVAL); i++) + { + application.SendNotification(); + application.Render(RENDER_FRAME_INTERVAL); + time += RENDER_FRAME_INTERVAL; + } + + return time; +} // Implementation of ItemFactory for providing actors to ItemView class TestItemFactory : public ItemFactory @@ -82,11 +141,8 @@ public: // From ItemFactory */ virtual Actor NewItem(unsigned int itemId) { - // Create an image actor for this item - Image image = Image::New( TEST_IMAGE_FILE_NAME ); - Actor actor = ImageActor::New(image); - - return actor; + // Create a renderable actor for this item + return ImageView::New( TEST_IMAGE_FILE_NAME ); } }; @@ -104,7 +160,7 @@ int UtcDaliItemViewNew(void) DALI_TEST_CHECK(view); //Additional check to ensure object is created by checking if it's registered - ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry(); + ObjectRegistry registry = application.GetCore().GetObjectRegistry(); DALI_TEST_CHECK( registry ); gObjectCreatedCallBackCalled = false; @@ -117,6 +173,75 @@ int UtcDaliItemViewNew(void) END_TEST; } +int UtcDaliItemViewCopyConstructor(void) +{ + ToolkitTestApplication application; + + TestItemFactory factory; + ItemView itemView = ItemView::New( factory ); + DALI_TEST_CHECK( itemView ); + + ItemView copy( itemView ); + DALI_TEST_CHECK( copy ); + + END_TEST; +} + +int UtcDaliItemViewCopyAssignment(void) +{ + ToolkitTestApplication application; + + TestItemFactory factory; + ItemView itemView = ItemView::New( factory ); + DALI_TEST_CHECK( itemView ); + + ItemView copy; + copy = itemView; + DALI_TEST_CHECK( copy ); + DALI_TEST_EQUALS( itemView, copy, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliItemViewMoveConstructor(void) +{ + ToolkitTestApplication application; + + TestItemFactory factory; + ItemView itemView = ItemView::New( factory ); + DALI_TEST_EQUALS( 1, itemView.GetBaseObject().ReferenceCount(), TEST_LOCATION ); + itemView.SetProperty( Actor::Property::SENSITIVE, false ); + DALI_TEST_CHECK( false == itemView.GetProperty< bool >( Actor::Property::SENSITIVE ) ); + + ItemView moved = std::move( itemView ); + DALI_TEST_CHECK( moved ); + DALI_TEST_EQUALS( 1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION ); + DALI_TEST_CHECK( false == moved.GetProperty< bool >( Actor::Property::SENSITIVE ) ); + DALI_TEST_CHECK( !itemView ); + + END_TEST; +} + +int UtcDaliItemViewMoveAssignment(void) +{ + ToolkitTestApplication application; + + TestItemFactory factory; + ItemView itemView = ItemView::New( factory ); + DALI_TEST_EQUALS( 1, itemView.GetBaseObject().ReferenceCount(), TEST_LOCATION ); + itemView.SetProperty( Actor::Property::SENSITIVE, false ); + DALI_TEST_CHECK( false == itemView.GetProperty< bool >( Actor::Property::SENSITIVE ) ); + + ItemView moved; + moved = std::move( itemView ); + DALI_TEST_CHECK( moved ); + DALI_TEST_EQUALS( 1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION ); + DALI_TEST_CHECK( false == moved.GetProperty< bool >( Actor::Property::SENSITIVE ) ); + DALI_TEST_CHECK( !itemView ); + + END_TEST; +} + int UtcDaliItemViewDownCast(void) { ToolkitTestApplication application; @@ -143,15 +268,30 @@ int UtcDaliItemViewAddAndGetLayout(void) ItemView view = ItemView::New(factory); // Create a grid layout and add it to ItemView - GridLayoutPtr gridLayout = GridLayout::New(); + ItemLayoutPtr gridLayout = DefaultItemLayout::New( DefaultItemLayout::GRID ); view.AddLayout(*gridLayout); // As we have added one layout, check the number of layout is now 1 DALI_TEST_CHECK(view.GetLayoutCount() == 1); + // Create a depth layout and add it to ItemView + ItemLayoutPtr depthLayout = DefaultItemLayout::New( DefaultItemLayout::DEPTH ); + view.AddLayout(*depthLayout); + + // As we have added another layout, check the number of layout is now 2 + DALI_TEST_CHECK(view.GetLayoutCount() == 2); + + // Create a spiral layout and add it to ItemView + ItemLayoutPtr spiralLayout = DefaultItemLayout::New( DefaultItemLayout::SPIRAL ); + view.AddLayout(*spiralLayout); + + // As we have added another layout, check the number of layout is now 3 + DALI_TEST_CHECK(view.GetLayoutCount() == 3); // Check we are getting the correct layout from ItemView DALI_TEST_CHECK(view.GetLayout(0) == gridLayout); + DALI_TEST_CHECK(view.GetLayout(1) == depthLayout); + DALI_TEST_CHECK(view.GetLayout(2) == spiralLayout); END_TEST; } @@ -164,21 +304,37 @@ int UtcDaliItemViewAddAndRemoveLayout(void) ItemView view = ItemView::New(factory); // Create a grid layout and add it to ItemView - GridLayoutPtr gridLayout = GridLayout::New(); + ItemLayoutPtr gridLayout = DefaultItemLayout::New( DefaultItemLayout::GRID ); view.AddLayout(*gridLayout); // As we have added one layout, check the number of layout is now 1 DALI_TEST_CHECK(view.GetLayoutCount() == 1); + // Create a depth layout and add it to ItemView + ItemLayoutPtr depthLayout = DefaultItemLayout::New( DefaultItemLayout::DEPTH ); + view.AddLayout(*depthLayout); + + // As we have added another layout, check the number of layout is now 2 + DALI_TEST_CHECK(view.GetLayoutCount() == 2); + // Check we are getting the correct layout from ItemView DALI_TEST_CHECK(view.GetLayout(0) == gridLayout); + DALI_TEST_CHECK(view.GetLayout(1) == depthLayout); // Remove the grid layout view.RemoveLayout(0); - // As we have removed the grid layout, check the number of layout is now 0 - DALI_TEST_CHECK(view.GetLayoutCount() == 0); + // As we have removed the grid layout, check the number of layout is now 1 + DALI_TEST_CHECK(view.GetLayoutCount() == 1); + + // Check we are getting the correct layout from ItemView + DALI_TEST_CHECK(view.GetLayout(0) == depthLayout); + // Remove the depth layout + view.RemoveLayout(0); + + // As we also removed the depth layout, check the number of layout is now 0 + DALI_TEST_CHECK(view.GetLayoutCount() == 0); END_TEST; } @@ -191,21 +347,41 @@ int UtcDaliItemViewActivateLayoutAndGetActiveLayout(void) ItemView view = ItemView::New(factory); // Create a grid layout and add it to ItemView - GridLayoutPtr gridLayout = GridLayout::New(); + ItemLayoutPtr gridLayout = DefaultItemLayout::New( DefaultItemLayout::GRID ); view.AddLayout(*gridLayout); - DALI_TEST_CHECK(view.GetLayoutCount() == 1); + // Create a depth layout and add it to ItemView + ItemLayoutPtr depthLayout = DefaultItemLayout::New( DefaultItemLayout::DEPTH ); + view.AddLayout(*depthLayout); + + // Create a spiral layout and add it to ItemView + ItemLayoutPtr spiralLayout = DefaultItemLayout::New( DefaultItemLayout::SPIRAL ); + view.AddLayout(*spiralLayout); + + // As we have added three layouts, check the number of layout is now 3 + DALI_TEST_CHECK(view.GetLayoutCount() == 3); // Check there is no active layout at the moment DALI_TEST_CHECK(view.GetActiveLayout() == NULL); + // Activate the depth layout + Vector3 stageSize(application.GetScene().GetSize()); + view.ActivateLayout(1, stageSize, 0.5f); + + // Check the current active layout is the depth layout + DALI_TEST_CHECK(view.GetActiveLayout() == depthLayout); + // Activate the grid layout - Vector3 stageSize(Dali::Stage::GetCurrent().GetSize()); view.ActivateLayout(0, stageSize, 0.5f); // Check the current active layout is the grid layout DALI_TEST_CHECK(view.GetActiveLayout() == gridLayout); + // Activate the spiral layout + view.ActivateLayout(2, stageSize, 0.5f); + + // Check the current active layout is the spiral layout + DALI_TEST_CHECK(view.GetActiveLayout() == spiralLayout); END_TEST; } @@ -218,14 +394,15 @@ int UtcDaliItemViewDeactivateCurrentLayout(void) ItemView view = ItemView::New(factory); // Create a grid layout and add it to ItemView - GridLayoutPtr gridLayout = GridLayout::New(); + ItemLayoutPtr gridLayout = DefaultItemLayout::New( DefaultItemLayout::GRID ); + gridLayout->SetOrientation(ControlOrientation::Down); view.AddLayout(*gridLayout); // Check there is no active layout at the moment DALI_TEST_CHECK(view.GetActiveLayout() == NULL); // Activate the grid layout - Vector3 stageSize(Dali::Stage::GetCurrent().GetSize()); + Vector3 stageSize(application.GetScene().GetSize()); view.ActivateLayout(0, stageSize, 0.5f); // Check the current active layout is the grid layout @@ -248,11 +425,12 @@ int UtcDaliItemViewGetItemAndGetItemId(void) ItemView view = ItemView::New(factory); // Create a grid layout and add it to ItemView - GridLayoutPtr gridLayout = GridLayout::New(); + ItemLayoutPtr gridLayout = DefaultItemLayout::New( DefaultItemLayout::GRID ); + gridLayout->SetOrientation(ControlOrientation::Left); view.AddLayout(*gridLayout); // Activate the grid layout so that the items will be created and added to ItemView - Vector3 stageSize(Dali::Stage::GetCurrent().GetSize()); + Vector3 stageSize(application.GetScene().GetSize()); view.ActivateLayout(0, stageSize, 0.5f); // Get the item given the item ID @@ -272,11 +450,12 @@ int UtcDaliItemViewRemoveItem(void) ItemView view = ItemView::New(factory); // Create a grid layout and add it to ItemView - GridLayoutPtr gridLayout = GridLayout::New(); + ItemLayoutPtr gridLayout = DefaultItemLayout::New( DefaultItemLayout::GRID ); + gridLayout->SetOrientation(ControlOrientation::Right); view.AddLayout(*gridLayout); // Activate the grid layout so that the items will be created and added to ItemView - Vector3 stageSize(Dali::Stage::GetCurrent().GetSize()); + Vector3 stageSize(application.GetScene().GetSize()); view.ActivateLayout(0, stageSize, 0.5f); // Get the item given the item ID 2 and 3 @@ -286,13 +465,34 @@ int UtcDaliItemViewRemoveItem(void) // Remove the item with ID 2 view.RemoveItem(2, 0.0f); - // Get the new item given the item ID 2 + // Get the new item given the item ID 2 and 3 Actor newItemActorID2 = view.GetItem(2); + Actor newItemActorID3 = view.GetItem(3); // Check the original item with item ID 2 was deleted and now item ID 2 represents the original item with ID 3 DALI_TEST_CHECK(view.GetItemId(newItemActorID2) == 2); DALI_TEST_CHECK(oldItemActorID2 != newItemActorID2); - DALI_TEST_CHECK(newItemActorID2 = oldItemActorID3); + DALI_TEST_CHECK(newItemActorID2 == oldItemActorID3); + + // scroll to the end of item view + view.ScrollToItem(TOTAL_ITEM_NUMBER - 1, 0.00f); + + application.SendNotification(); + application.Render(0); + + // Refresh the item view + view.Refresh(); + + Actor itemActorID390 = view.GetItem(390); + DALI_TEST_CHECK(view.GetItemId(itemActorID390) == 390); + + // Remove the item with ID 2 (which is now before the current item range) + view.RemoveItem(2, 0.0f); + + // Check the original item with item ID 2 was deleted and now item ID 389 represents the original item with ID 390 + DALI_TEST_CHECK(view.GetItemId(itemActorID390) == 389); + DALI_TEST_CHECK(view.GetItem(389) == itemActorID390); + END_TEST; } @@ -304,12 +504,13 @@ int UtcDaliItemViewGetCurrentLayoutPosition(void) TestItemFactory factory; ItemView view = ItemView::New(factory); - // Create a grid layout and add it to ItemView - GridLayoutPtr gridLayout = GridLayout::New(); - view.AddLayout(*gridLayout); + // Create a depth layout and add it to ItemView + ItemLayoutPtr depthLayout = DefaultItemLayout::New( DefaultItemLayout::DEPTH ); + depthLayout->SetOrientation(ControlOrientation::Up); + view.AddLayout(*depthLayout); // Activate the grid layout so that the items will be created and added to ItemView - Vector3 stageSize(Dali::Stage::GetCurrent().GetSize()); + Vector3 stageSize(application.GetScene().GetSize()); view.ActivateLayout(0, stageSize, 0.0f); // Check the current layout position for the 10th items is 9.0f @@ -392,6 +593,8 @@ int UtcDaliItemViewSetAndGetRefreshInterval(void) // Set the interval between refreshes to be 20 view.SetRefreshInterval(20); + view.Refresh(); + // Check the interval between refreshes is 20 DALI_TEST_CHECK(view.GetRefreshInterval() == 20); END_TEST; @@ -405,14 +608,14 @@ int UtcDaliItemViewScrollToItem(void) TestItemFactory factory; ItemView view = ItemView::New(factory); Vector3 vec(480.0f, 800.0f, 0.0f); - GridLayoutPtr layout = GridLayout::New(); + ItemLayoutPtr layout = DefaultItemLayout::New( DefaultItemLayout::DEPTH ); - view.SetName("view actor"); + view.SetProperty( Dali::Actor::Property::NAME,"view actor"); view.AddLayout(*layout); - view.SetSize(vec); + view.SetProperty( Actor::Property::SIZE, vec ); - Stage::GetCurrent().Add(view); - layout->SetOrientation(ControlOrientation::Up); + application.GetScene().Add(view); + layout->SetOrientation(ControlOrientation::Down); view.ActivateLayout(0, vec, 0.0f); application.SendNotification(); @@ -468,11 +671,11 @@ int UtcDaliItemViewScrollToItem(void) tet_result(TET_FAIL); } - Stage::GetCurrent().Remove(view); + application.GetScene().Remove(view); END_TEST; } -int UtcDaliItemViewSetAndGetMouseWheelScrollDistanceStep(void) +int UtcDaliItemViewSetAndGetWheelScrollDistanceStep(void) { ToolkitTestApplication application; @@ -480,10 +683,687 @@ int UtcDaliItemViewSetAndGetMouseWheelScrollDistanceStep(void) TestItemFactory factory; ItemView view = ItemView::New(factory); - // Set the scroll distance step for the mouse wheel event to be 100.0f - view.SetMouseWheelScrollDistanceStep(100.0f); + // Set the scroll distance step for the wheel event to be 100.0f + view.SetWheelScrollDistanceStep(100.0f); // Check the scroll distance step is 100.0f - DALI_TEST_EQUALS(view.GetMouseWheelScrollDistanceStep(), 100.0f, TEST_LOCATION ); + DALI_TEST_EQUALS(view.GetWheelScrollDistanceStep(), 100.0f, TEST_LOCATION ); + END_TEST; +} + +int UtcDaliItemViewInsertItemP(void) +{ + ToolkitTestApplication application; + + // Create the ItemView actor + TestItemFactory factory; + ItemView view = ItemView::New(factory); + + // Create a grid layout and add it to ItemView + ItemLayoutPtr gridLayout = DefaultItemLayout::New( DefaultItemLayout::GRID); + gridLayout->SetOrientation(ControlOrientation::Left); + view.AddLayout(*gridLayout); + + // Activate the grid layout so that the items will be created and added to ItemView + Vector3 stageSize(application.GetScene().GetSize()); + view.ActivateLayout(0, stageSize, 0.0f); + + // Get the specified item where new item to be inserted before that + Actor itemActor = view.GetItem(2); + + ItemId id = view.GetItemId( itemActor ); + + // Check we are getting the correct Item ID given the specified actor + DALI_TEST_CHECK(view.GetItemId(itemActor) == 2); + + Actor newActor = Actor::New(); + + view.InsertItem(Item(id, newActor), 0.0f); + + DALI_TEST_CHECK(view.GetItem(2) == newActor); + + DALI_TEST_CHECK(view.GetItemId(itemActor) == 3); + DALI_TEST_CHECK(view.GetItem(3) == itemActor); + + // scroll to the end of item view + view.ScrollToItem(TOTAL_ITEM_NUMBER - 1, 0.00f); + + application.SendNotification(); + application.Render(0); + + // Refresh the item view + view.Refresh(); + + Actor itemActorID390 = view.GetItem(390); + DALI_TEST_CHECK(view.GetItemId(itemActorID390) == 390); + + // Insert the item with ID 2 (which is now before the current item range) + Actor anotherNewActor = Actor::New(); + view.InsertItem(Item(id, anotherNewActor), 0.0f); + + // Check that item ID 391 now represents the original item with ID 390 + DALI_TEST_CHECK(view.GetItemId(itemActorID390) == 391); + DALI_TEST_CHECK(view.GetItem(391) == itemActorID390); + + END_TEST; +} + +int UtcDaliItemViewInsertItemsP(void) +{ + ToolkitTestApplication application; + + // Create the ItemView actor + TestItemFactory factory; + ItemView view = ItemView::New(factory); + + // Create a depth layout and add it to ItemView + ItemLayoutPtr depthLayout = DefaultItemLayout::New( DefaultItemLayout::DEPTH); + depthLayout->SetOrientation(ControlOrientation::Right); + view.AddLayout(*depthLayout); + + // Activate the grid layout so that the items will be created and added to ItemView + Vector3 stageSize(application.GetScene().GetSize()); + view.ActivateLayout(0, stageSize, 0.5f); + + unsigned int itemCount = view.GetChildCount(); + + // Get the specified item where new items to be inserted before that + Actor itemActor = view.GetItem(1); + + // Check we are getting the correct Item ID given the specified item + DALI_TEST_CHECK(view.GetItemId(itemActor) == 1); + + ItemContainer insertList; + + for( unsigned int i = 1u; i < 11; ++i ) + { + Actor child = view.GetChildAt( i ); + Actor newActor = Actor::New(); + newActor.SetProperty( Dali::Actor::Property::NAME,"Inserted"); + insertList.push_back( Item( view.GetItemId(child), newActor ) ); + } + + if( !insertList.empty() ) + { + view.InsertItems( insertList, 0.5f ); + } + + DALI_TEST_CHECK(view.GetChildCount() == itemCount + 10); + + // Check that new items are inserted in the correct positions + DALI_TEST_CHECK(view.GetItemId(itemActor) == 11); + DALI_TEST_CHECK(view.GetItem(11) == itemActor); + + ItemIdContainer removeList; + + for( unsigned int i = 0u; i < view.GetChildCount(); ++i ) + { + Actor child = view.GetChildAt( i ); + + if( child.GetProperty< std::string >( Dali::Actor::Property::NAME ) == "Inserted" ) + { + removeList.push_back( view.GetItemId(child) ); + } + } + + if( ! removeList.empty() ) + { + view.RemoveItems( removeList, 0.5f ); + } + + DALI_TEST_CHECK(view.GetChildCount() == itemCount); + + // Check that new items are removed correctly so that we are getting the correct Item ID given the specified item + DALI_TEST_CHECK(view.GetItemId(itemActor) == 1); + DALI_TEST_CHECK(view.GetItem(1) == itemActor); + + END_TEST; +} + +int UtcDaliItemViewReplaceItemP(void) +{ + ToolkitTestApplication application; + + // Create the ItemView actor + TestItemFactory factory; + ItemView view = ItemView::New(factory); + + // Create a spiral layout and add it to ItemView + ItemLayoutPtr spiralLayout = DefaultItemLayout::New( DefaultItemLayout::SPIRAL ); + view.AddLayout(*spiralLayout); + + // Activate the grid layout so that the items will be created and added to ItemView + Vector3 stageSize(application.GetScene().GetSize()); + view.ActivateLayout(0, stageSize, 0.5f); + + Actor newActor = Actor::New(); + + view.ReplaceItem( Item( 5, newActor ), 0.5f ); + + DALI_TEST_CHECK(view.GetItem(5) == newActor); + + END_TEST; +} + +int UtcDaliItemViewReplaceItemsP(void) +{ + ToolkitTestApplication application; + + // Create the ItemView actor + TestItemFactory factory; + ItemView view = ItemView::New(factory); + + // Create a spiral layout and add it to ItemView + ItemLayoutPtr spiralLayout = DefaultItemLayout::New( DefaultItemLayout::SPIRAL ); + spiralLayout->SetOrientation( ControlOrientation::Down ); + view.AddLayout(*spiralLayout); + + // Activate the grid layout so that the items will be created and added to ItemView + Vector3 stageSize(application.GetScene().GetSize()); + view.ActivateLayout(0, stageSize, 0.5f); + + ItemContainer replaceList; + + for( unsigned int i = 0u; i < 10; ++i ) + { + Actor child = view.GetItem( i ); + Actor newActor = Actor::New(); + newActor.SetProperty( Dali::Actor::Property::NAME,"Replaced"); + + replaceList.push_back( Item( i, newActor ) ); + } + + if( !replaceList.empty() ) + { + view.ReplaceItems( replaceList, 0.5f ); + } + + DALI_TEST_CHECK(view.GetItem(0).GetProperty< std::string >( Dali::Actor::Property::NAME ) == "Replaced"); + DALI_TEST_CHECK(view.GetItem(8).GetProperty< std::string >( Dali::Actor::Property::NAME ) == "Replaced"); + END_TEST; +} + +int UtcDaliItemViewGetItemsRangeP(void) +{ + ToolkitTestApplication application; + + // Create the ItemView actor + TestItemFactory factory; + ItemView view = ItemView::New(factory); + + // Create a spiral layout and add it to ItemView + ItemLayoutPtr spiralLayout = DefaultItemLayout::New( DefaultItemLayout::SPIRAL ); + spiralLayout->SetOrientation( ControlOrientation::Left ); + view.AddLayout(*spiralLayout); + + // Activate the grid layout so that the items will be created and added to ItemView + Vector3 stageSize(application.GetScene().GetSize()); + view.ActivateLayout(0, stageSize, 0.5f); + + ItemRange itemRange(0, 0); + + view.GetItemsRange(itemRange); + + DALI_TEST_CHECK(itemRange.Within(0)); + END_TEST; +} + +int UtcDaliItemViewSetItemsAnchorPointP(void) +{ + ToolkitTestApplication application; + + // Create the ItemView actor + TestItemFactory factory; + ItemView view = ItemView::New(factory); + + // Create a spiral layout and add it to ItemView + ItemLayoutPtr spiralLayout = DefaultItemLayout::New( DefaultItemLayout::SPIRAL ); + spiralLayout->SetOrientation( ControlOrientation::Right ); + view.AddLayout(*spiralLayout); + + // Activate the grid layout so that the items will be created and added to ItemView + Vector3 stageSize(application.GetScene().GetSize()); + view.ActivateLayout(0, stageSize, 0.5f); + + Vector3 anchorPoint(10.0f, 10.0f, 0.0f); + + view.SetItemsAnchorPoint(anchorPoint); + + DALI_TEST_CHECK(view.GetItemsAnchorPoint() == anchorPoint); + DALI_TEST_CHECK(view.GetItem(0).GetCurrentProperty< Vector3 >( Actor::Property::ANCHOR_POINT ) == anchorPoint); + END_TEST; +} + +int UtcDaliItemViewSetItemsParentOriginP(void) +{ + ToolkitTestApplication application; + + // Create the ItemView actor + TestItemFactory factory; + ItemView view = ItemView::New(factory); + + // Create a grid layout and add it to ItemView + ItemLayoutPtr gridLayout = DefaultItemLayout::New( DefaultItemLayout::GRID ); + view.AddLayout(*gridLayout); + + // Activate the grid layout so that the items will be created and added to ItemView + Vector3 stageSize(application.GetScene().GetSize()); + view.ActivateLayout(0, stageSize, 0.5f); + + Vector3 parentOrigin(10.0f, 10.0f, 0.0f); + + view.SetItemsParentOrigin(parentOrigin); + + DALI_TEST_CHECK(view.GetItemsParentOrigin() == parentOrigin); + DALI_TEST_CHECK(view.GetItem(0).GetCurrentProperty< Vector3 >( Actor::Property::PARENT_ORIGIN ) == parentOrigin); + END_TEST; +} + +int UtcDaliItemFactoryGetExtention(void) +{ + ToolkitTestApplication application; + TestItemFactory factory; + DALI_TEST_CHECK( factory.GetExtension() == NULL ); + END_TEST; +} + +int UtcDaliItemViewLayoutActivatedSignalP(void) +{ + ToolkitTestApplication application; + + // Create the ItemView actor + TestItemFactory factory; + ItemView view = ItemView::New(factory); + + // Create a grid layout and add it to ItemView + ItemLayoutPtr gridLayout = DefaultItemLayout::New( DefaultItemLayout::GRID ); + view.AddLayout(*gridLayout); + + application.GetScene().Add( view ); + + // Connect the layout activated signal + view.LayoutActivatedSignal().Connect( &OnLayoutActivated ); + + gOnLayoutActivatedCalled = false; + + // Render and notify + application.SendNotification(); + application.Render(); + + // Activate the grid layout so that the items will be created and added to ItemView + Vector3 stageSize(application.GetScene().GetSize()); + view.ActivateLayout(0, stageSize, 0.1f); + + // Wait for 0.1 second + Wait(application, 100); + + DALI_TEST_EQUALS( gOnLayoutActivatedCalled, true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliItemViewSetGetProperty(void) +{ + ToolkitTestApplication application; + + // Create the ItemView actor + TestItemFactory factory; + ItemView view = ItemView::New(factory); + DALI_TEST_CHECK(view); + + // Event side properties + + // Test "minimumSwipeSpeed" property + DALI_TEST_CHECK( view.GetPropertyIndex("minimumSwipeSpeed") == ItemView::Property::MINIMUM_SWIPE_SPEED ); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::MINIMUM_SWIPE_SPEED).Get(), view.GetMinimumSwipeSpeed(), TEST_LOCATION ); + view.SetProperty( ItemView::Property::MINIMUM_SWIPE_SPEED, 2.5f ); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::MINIMUM_SWIPE_SPEED).Get(), 2.5f, TEST_LOCATION ); + + // Test "minimumSwipeDistance" property + DALI_TEST_CHECK( view.GetPropertyIndex("minimumSwipeDistance") == ItemView::Property::MINIMUM_SWIPE_DISTANCE ); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::MINIMUM_SWIPE_DISTANCE).Get(), view.GetMinimumSwipeDistance(), TEST_LOCATION ); + view.SetProperty( ItemView::Property::MINIMUM_SWIPE_DISTANCE, 8.725f ); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::MINIMUM_SWIPE_DISTANCE).Get(), 8.725f, TEST_LOCATION ); + + // Test "wheelScrollDistanceStep" property + DALI_TEST_CHECK( view.GetPropertyIndex("wheelScrollDistanceStep") == ItemView::Property::WHEEL_SCROLL_DISTANCE_STEP ); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::WHEEL_SCROLL_DISTANCE_STEP).Get(), view.GetWheelScrollDistanceStep(), TEST_LOCATION ); + view.SetProperty( ItemView::Property::WHEEL_SCROLL_DISTANCE_STEP, 5.0f ); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::WHEEL_SCROLL_DISTANCE_STEP).Get(), 5.0f, TEST_LOCATION ); + + // Test "snapToItemEnabled" property + DALI_TEST_CHECK( view.GetPropertyIndex("snapToItemEnabled") == ItemView::Property::SNAP_TO_ITEM_ENABLED ); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::SNAP_TO_ITEM_ENABLED).Get(), view.GetAnchoring(), TEST_LOCATION ); + view.SetProperty( ItemView::Property::SNAP_TO_ITEM_ENABLED, true ); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::SNAP_TO_ITEM_ENABLED).Get(), true, TEST_LOCATION ); + + // Test "refreshInterval" property + DALI_TEST_CHECK( view.GetPropertyIndex("refreshInterval") == ItemView::Property::REFRESH_INTERVAL ); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::REFRESH_INTERVAL).Get(), view.GetRefreshInterval(), TEST_LOCATION ); + view.SetProperty( ItemView::Property::REFRESH_INTERVAL, 11.0f ); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::REFRESH_INTERVAL).Get(), 11.0f, TEST_LOCATION ); + + // Test "layout" property + DALI_TEST_CHECK( view.GetPropertyIndex("layout") == ItemView::Property::LAYOUT ); + Property::Map gridLayoutProperty; + gridLayoutProperty.Insert( DefaultItemLayoutProperty::TYPE, Dali::Property::Value((int)DefaultItemLayout::GRID) ); + gridLayoutProperty.Insert( DefaultItemLayoutProperty::ITEM_SIZE, Dali::Property::Value(Vector3(200, 200,50)) ); + gridLayoutProperty.Insert( DefaultItemLayoutProperty::GRID_ROW_SPACING, Dali::Property::Value(50.0f) ); + gridLayoutProperty.Insert( DefaultItemLayoutProperty::GRID_COLUMN_NUMBER, Dali::Property::Value(4) ); + + Property::Map depthLayoutProperty; + depthLayoutProperty.Insert( DefaultItemLayoutProperty::TYPE, Dali::Property::Value((int)DefaultItemLayout::DEPTH) ); + depthLayoutProperty.Insert( DefaultItemLayoutProperty::DEPTH_COLUMN_NUMBER, Dali::Property::Value(3) ); + depthLayoutProperty.Insert( DefaultItemLayoutProperty::DEPTH_ROW_NUMBER, Dali::Property::Value(26.0f) ); + + Property::Map spiralLayoutPrperty; + spiralLayoutPrperty.Insert( DefaultItemLayoutProperty::TYPE, Dali::Property::Value((int)DefaultItemLayout::SPIRAL) ); + spiralLayoutPrperty.Insert( DefaultItemLayoutProperty::SPIRAL_ITEM_SPACING, Dali::Property::Value((Math::PI*2.0f)/9.5f) ); + spiralLayoutPrperty.Insert( DefaultItemLayoutProperty::SPIRAL_TOP_ITEM_ALIGNMENT, Dali::Property::Value(-0.125f) ); + + Property::Map listLayoutPrperty; + listLayoutPrperty.Insert( DefaultItemLayoutProperty::TYPE, Dali::Property::Value((int)DefaultItemLayout::LIST) ); + listLayoutPrperty.Insert( DefaultItemLayoutProperty::ITEM_SIZE, Dali::Property::Value(Vector3(100, 100,50)) ); + + + Property::Array layoutArray; + layoutArray.PushBack(gridLayoutProperty); + layoutArray.PushBack(depthLayoutProperty); + layoutArray.PushBack(spiralLayoutPrperty); + layoutArray.PushBack(listLayoutPrperty); + + view.SetProperty( ItemView::Property::LAYOUT, layoutArray); + + Property::Array getLayoutArray; + DALI_TEST_CHECK( view.GetProperty( ItemView::Property::LAYOUT ).Get( getLayoutArray ) ); + + //Check that the result is the same as + DALI_TEST_EQUALS( layoutArray.Count(), getLayoutArray.Count(), TEST_LOCATION ); + Property::Map firstLayout = *((getLayoutArray.GetElementAt( 0 )).GetMap()); + + for( unsigned int mapIdx = 0, mapCount = firstLayout.Count(); mapIdx < mapCount; ++mapIdx ) + { + KeyValuePair propertyPair( firstLayout.GetKeyValue( mapIdx ) ); + if(propertyPair.first == DefaultItemLayoutProperty::TYPE) + { + int layoutType = propertyPair.second.Get(); + DALI_TEST_EQUALS( layoutType, (int)DefaultItemLayout::GRID, TEST_LOCATION ); + } + else if(propertyPair.first == DefaultItemLayoutProperty::ITEM_SIZE) + { + Vector3 size = propertyPair.second.Get(); + DALI_TEST_EQUALS( size, Vector3(200, 200,50), TEST_LOCATION ); + } + else if(propertyPair.first == DefaultItemLayoutProperty::GRID_ROW_SPACING) + { + float spacing = propertyPair.second.Get(); + DALI_TEST_EQUALS( spacing, 50.0f, TEST_LOCATION ); + } + else if(propertyPair.first == DefaultItemLayoutProperty::GRID_COLUMN_NUMBER) + { + int number = propertyPair.second.Get(); + DALI_TEST_EQUALS(number, 4, TEST_LOCATION ); + } + } + view.SetProperty( ItemView::Property::LAYOUT, layoutArray); + + + // Test "overshootEnabled" property + DALI_TEST_CHECK( view.GetPropertyIndex("overshootEnabled") == Scrollable::Property::OVERSHOOT_ENABLED ); + DALI_TEST_EQUALS( view.GetProperty(Scrollable::Property::OVERSHOOT_ENABLED).Get(), view.IsOvershootEnabled(), TEST_LOCATION ); + view.SetProperty( Scrollable::Property::OVERSHOOT_ENABLED, false ); + DALI_TEST_EQUALS( view.GetProperty(Scrollable::Property::OVERSHOOT_ENABLED).Get(), false, TEST_LOCATION ); + + // Test "overshootSize" property + DALI_TEST_CHECK( view.GetPropertyIndex("overshootSize") == Scrollable::Property::OVERSHOOT_SIZE ); + Vector2 overshootSize = Vector2(100.0f,100.0f); + view.SetProperty( Scrollable::Property::OVERSHOOT_SIZE, overshootSize ); + DALI_TEST_EQUALS( view.GetProperty(Scrollable::Property::OVERSHOOT_SIZE).Get(), overshootSize, TEST_LOCATION ); + + // Animatable properties + + // Test "layoutPosition" property + DALI_TEST_CHECK( view.GetPropertyIndex("layoutPosition") == ItemView::Property::LAYOUT_POSITION ); + view.SetProperty( ItemView::Property::LAYOUT_POSITION, 20.5f ); + Wait(application); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::LAYOUT_POSITION).Get(), 20.5f, TEST_LOCATION ); + + // Test "scrollSpeed" property + DALI_TEST_CHECK( view.GetPropertyIndex("scrollSpeed") == ItemView::Property::SCROLL_SPEED ); + view.SetProperty( ItemView::Property::SCROLL_SPEED, 3.35f ); + Wait(application); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::SCROLL_SPEED).Get(), 3.35f, TEST_LOCATION ); + + // Test "overshoot" property + DALI_TEST_CHECK( view.GetPropertyIndex("overshoot") == ItemView::Property::OVERSHOOT ); + view.SetProperty( ItemView::Property::OVERSHOOT, 0.15f ); + Wait(application); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::OVERSHOOT).Get(), 0.15f, TEST_LOCATION ); + + // Test "scrollDirection" property + DALI_TEST_CHECK( view.GetPropertyIndex("scrollDirection") == ItemView::Property::SCROLL_DIRECTION ); + view.SetProperty( ItemView::Property::SCROLL_DIRECTION, Vector2(0.85f, 0.5f) ); + Wait(application); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::SCROLL_DIRECTION).Get(), Vector2(0.85f, 0.5f), TEST_LOCATION ); + + // Test "layoutOrientation" property + DALI_TEST_CHECK( view.GetPropertyIndex("layoutOrientation") == ItemView::Property::LAYOUT_ORIENTATION ); + view.SetProperty( ItemView::Property::LAYOUT_ORIENTATION, 2 ); + Wait(application); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::LAYOUT_ORIENTATION).Get(), 2, TEST_LOCATION ); + + // Test "scrollContentSize" property + DALI_TEST_CHECK( view.GetPropertyIndex("scrollContentSize") == ItemView::Property::SCROLL_CONTENT_SIZE ); + view.SetProperty( ItemView::Property::SCROLL_CONTENT_SIZE, 250.0f ); + Wait(application); + DALI_TEST_EQUALS( view.GetProperty(ItemView::Property::SCROLL_CONTENT_SIZE).Get(), 250.0f, TEST_LOCATION ); + + END_TEST; +} + + +int UtcDaliItemViewOvershootVertical(void) +{ + ToolkitTestApplication application; + Dali::Integration::Scene stage = application.GetScene(); + + // Create the ItemView actor + TestItemFactory factory; + ItemView view = ItemView::New(factory); + + // Create a grid layout and add it to ItemView + ItemLayoutPtr gridLayout = DefaultItemLayout::New( DefaultItemLayout::GRID ); + view.AddLayout(*gridLayout); + stage.Add(view); + + // Activate the grid layout so that the items will be created and added to ItemView + Vector3 stageSize(stage.GetSize()); + view.ActivateLayout(0, stageSize, 0.5f); + + view.SetProperty( Scrollable::Property::OVERSHOOT_ENABLED, true ); + DALI_TEST_EQUALS( view.GetProperty(Scrollable::Property::OVERSHOOT_ENABLED).Get(), true, TEST_LOCATION ); + + view.SetProperty( Scrollable::Property::OVERSHOOT_SIZE, Vector2(30, 30) ); + + Wait(application); + + // Do a pan starting from 100,100 and moving down + Vector2 pos(100.0f, 100.0f); + + application.ProcessEvent( GenerateSingleTouch(PointState::DOWN, pos, 100 ) ); + application.ProcessEvent( GenerateSingleTouch(PointState::MOTION, pos, 100 ) ); + + pos.y += 5.0f; + Wait(application, 100); + + for(int i = 0;i<200;i++) + { + application.ProcessEvent( GenerateSingleTouch(PointState::MOTION, pos, 100 ) ); + pos.y += 5.0f; + Wait(application); + } + + application.ProcessEvent( GenerateSingleTouch(PointState::UP, pos, 100 ) ); + + Wait(application, 100); + + // Do a pan starting from 100,100 and moving up + pos = Vector2(100.0f, 300.0f); + + application.ProcessEvent( GenerateSingleTouch(PointState::DOWN, pos, 100 ) ); + application.ProcessEvent( GenerateSingleTouch(PointState::MOTION, pos, 100 ) ); + + pos.y -= 5.0f; + Wait(application, 100); + + for(int i = 0;i<200;i++) + { + application.ProcessEvent( GenerateSingleTouch(PointState::MOTION, pos, 100 ) ); + pos.y -= 5.0f; + Wait(application); + } + + application.ProcessEvent( GenerateSingleTouch(PointState::UP, pos, 100 ) ); + Wait(application, 100); + END_TEST; +} + +int UtcDaliItemViewOvershootHorizontal(void) +{ + ToolkitTestApplication application; + Dali::Integration::Scene stage = application.GetScene(); + + // Create the ItemView actor + TestItemFactory factory; + ItemView view = ItemView::New(factory); + + // Create a grid layout and add it to ItemView + ItemLayoutPtr gridLayout = DefaultItemLayout::New( DefaultItemLayout::SPIRAL ); + view.AddLayout(*gridLayout); + stage.Add(view); + + // Activate the grid layout so that the items will be created and added to ItemView + Vector3 stageSize(stage.GetSize()); + view.ActivateLayout(0, stageSize, 0.5f); + + view.SetProperty( Scrollable::Property::OVERSHOOT_ENABLED, true ); + DALI_TEST_EQUALS( view.GetProperty(Scrollable::Property::OVERSHOOT_ENABLED).Get(), true, TEST_LOCATION ); + + view.SetProperty( Scrollable::Property::OVERSHOOT_SIZE, Vector2(30, 30) ); + + Wait(application); + + // Do a pan starting from 100,100 and moving left + Vector2 pos(100.0f, 100.0f); + application.ProcessEvent( GenerateSingleTouch(PointState::DOWN, pos, 100 )); + application.ProcessEvent( GenerateSingleTouch(PointState::MOTION, pos, 100 )); + pos.x -= 5.0f; + Wait(application, 100); + + for(int i = 0;i<200;i++) + { + application.ProcessEvent( GenerateSingleTouch(PointState::MOTION, pos, 100 ) ); + pos.x -= 5.0f; + Wait(application); + } + + application.ProcessEvent( GenerateSingleTouch(PointState::UP, pos, 100 ) ); + Wait(application, 100); + + // Do a pan starting from 100,100 and moving right + pos = Vector2(100.0f, 100.0f); + application.ProcessEvent( GenerateSingleTouch(PointState::DOWN, pos, 100 ) ); + application.ProcessEvent( GenerateSingleTouch(PointState::MOTION, pos, 100 ) ); + pos.x += 5.0f; + Wait(application, 100); + + for(int i = 0;i<200;i++) + { + application.ProcessEvent( GenerateSingleTouch(PointState::MOTION, pos, 100 ) ); + pos.x += 5.0f; + Wait(application); + } + + application.ProcessEvent( GenerateSingleTouch(PointState::UP, pos, 100 ) ); + Wait(application, 100); + + END_TEST; +} + +int UtcDaliItemEnableDisableRefresh(void) +{ + ToolkitTestApplication application; + Dali::Integration::Scene stage = application.GetScene(); + + // Create the ItemView actor + TestItemFactory factory; + ItemView view = ItemView::New(factory); + + // Create a grid layout and add it to ItemView + ItemLayoutPtr gridLayout = DefaultItemLayout::New( DefaultItemLayout::GRID ); + view.AddLayout(*gridLayout); + stage.Add(view); + + // Activate the grid layout so that the items will be created and added to ItemView + Vector3 stageSize(stage.GetSize()); + view.ActivateLayout(0, stageSize, 0.5f); + + //Connect to signal scroll updated + view.ScrollUpdatedSignal().Connect( &OnScrollUpdate ); + + Property::Map attributes; + view.DoAction("enableRefresh", attributes ); + gOnScrollUpdateCalled = true; + view.SetProperty( ItemView::Property::LAYOUT_POSITION, 100.0f ); + application.SendNotification(); + application.Render(1000); + DALI_TEST_EQUALS( gOnScrollUpdateCalled, true, TEST_LOCATION ); + + + view.DoAction("disableRefresh", attributes ); + gOnScrollUpdateCalled = false; + view.SetProperty( ItemView::Property::LAYOUT_POSITION, 100.0f ); + application.SendNotification(); + application.Render(1000); + + DALI_TEST_EQUALS( gOnScrollUpdateCalled, false, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliItemViewWheelEvent(void) +{ + ToolkitTestApplication application; + Dali::Integration::Scene stage = application.GetScene(); + + // Create the ItemView actor + TestItemFactory factory; + ItemView view = ItemView::New( factory ); + + // Create a grid layout and add it to ItemView + ItemLayoutPtr gridLayout = DefaultItemLayout::New( DefaultItemLayout::GRID ); + view.AddLayout( *gridLayout ); + stage.Add( view ); + + // Activate the grid layout so that the items will be created and added to ItemView + Vector3 stageSize( stage.GetSize() ); + view.ActivateLayout (0, stageSize, 0.5f ); + + //Connect to wheel event signal + view.WheelEventSignal().Connect( &OnWheelEvent ); + + DALI_TEST_CHECK( !gOnWheelEventCalled ); + + // Render and notify + application.Render(); + application.SendNotification(); + application.Render(); + application.SendNotification(); + + // Perform a wheel event + Dali::Integration::WheelEvent wheelEvent( Dali::Integration::WheelEvent::MOUSE_WHEEL, 0, 0u, Vector2( 10.0f, 10.0f ), 1, 1000u ); + application.ProcessEvent( wheelEvent ); + DALI_TEST_CHECK( gOnWheelEventCalled ); + END_TEST; }