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-Visual.cpp;h=ff64e24b559998d3e65bdb200031854e77bde437;hp=35c224edebafa6b08ff294eb2972b8f07a1ec20d;hb=d2265be3cc2e43a7464b27a6d611a5548313fb8e;hpb=bf8ef7cb5b533057ad73140803e59acd3c0b0914 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp index 35c224e..ff64e24 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include #include "dummy-control.h" @@ -31,7 +33,7 @@ using namespace Dali::Toolkit; namespace { -const char* TEST_IMAGE_FILE_NAME = "gallery_image_01.jpg"; +const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg"; const char* TEST_NPATCH_FILE_NAME = "gallery_image_01.9.jpg"; const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg"; const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj"; @@ -39,8 +41,37 @@ const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl"; const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/"; const std::string DEFAULT_FONT_DIR( "/resources/fonts" ); + +bool DaliTestCheckMaps( const Property::Map& fontStyleMapGet, const Property::Map& fontStyleMapSet ) +{ + if( fontStyleMapGet.Count() == fontStyleMapSet.Count() ) + { + for( unsigned int index = 0u; index < fontStyleMapGet.Count(); ++index ) + { + const KeyValuePair& valueGet = fontStyleMapGet.GetKeyValue( index ); + + Property::Value* valueSet = fontStyleMapSet.Find( valueGet.first.stringKey ); + if( NULL != valueSet ) + { + if( valueGet.second.Get() != valueSet->Get() ) + { + tet_printf( " Value got : [%s], expected : [%s]", valueGet.second.Get().c_str(), valueSet->Get().c_str() ); + return false; + } + } + else + { + tet_printf( " The key %s doesn't exist.", valueGet.first.stringKey.c_str() ); + return false; + } + } + } + + return true; } +} //namespace + void dali_visual_startup(void) { test_return_value = TET_UNDEF; @@ -160,16 +191,7 @@ int UtcDaliVisualSize(void) imageVisual.GetNaturalSize(naturalSize); DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION ); - // n patch visual - TestPlatformAbstraction& platform = application.GetPlatform(); - Vector2 testSize(80.f, 160.f); - platform.SetClosestImageSize(testSize); - image = ResourceImage::New(TEST_NPATCH_FILE_NAME); - Visual::Base nPatchVisual = factory.CreateVisual( image ); - nPatchVisual.SetSize( visualSize ); - DALI_TEST_EQUALS( nPatchVisual.GetSize(), visualSize, TEST_LOCATION ); - nPatchVisual.GetNaturalSize(naturalSize); - DALI_TEST_EQUALS( naturalSize, testSize, TEST_LOCATION ); + // n patch visual is tested in the utc-Dali-VisualFactory.cpp // border visual float borderSize = 5.f; @@ -219,6 +241,9 @@ int UtcDaliVisualSize(void) DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION ); // Natural size should still be 100, 100 // Batch Image visual + TestPlatformAbstraction& platform = application.GetPlatform(); + Vector2 testSize(80.f, 160.f); + platform.SetClosestImageSize(testSize); propertyMap.Clear(); propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE ); propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); @@ -676,10 +701,6 @@ int UtcDaliVisualGetPropertyMap5(void) DALI_TEST_CHECK( value ); DALI_TEST_CHECK( value->Get() == false ); - // Test the properties. TODO: to be completed. - imageVisual.SetProperty( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); - Property::Value imageValue = imageVisual.GetProperty( ImageVisual::Property::URL ); - END_TEST; } @@ -711,9 +732,6 @@ int UtcDaliVisualGetPropertyMap6(void) DALI_TEST_CHECK( value ); DALI_TEST_CHECK( value->Get() ); - // Test the properties. TODO: to be completed. - nPatchVisual.SetProperty( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME ); - Property::Value nPatchValue = nPatchVisual.GetProperty( ImageVisual::Property::URL ); END_TEST; } @@ -961,7 +979,11 @@ int UtcDaliVisualGetPropertyMap10(void) propertyMap.Insert( "renderingBackend", static_cast( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) ); propertyMap.Insert( "text", "Hello world" ); propertyMap.Insert( "fontFamily", "TizenSans" ); - propertyMap.Insert( "fontStyle", "{\"weight\":\"bold\"}" ); + + Property::Map fontStyleMapSet; + fontStyleMapSet.Insert( "weight", "bold" ); + propertyMap.Insert( "fontStyle", fontStyleMapSet ); + propertyMap.Insert( "pointSize", 12.f ); propertyMap.Insert( "multiLine", true ); propertyMap.Insert( "horizontalAlignment", "CENTER" ); @@ -993,9 +1015,12 @@ int UtcDaliVisualGetPropertyMap10(void) DALI_TEST_CHECK( value ); DALI_TEST_EQUALS( value->Get(), "TizenSans", TEST_LOCATION ); - value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::STRING ); + value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::MAP ); DALI_TEST_CHECK( value ); - DALI_TEST_EQUALS( value->Get(), "{\"weight\":\"bold\"}", TEST_LOCATION ); + + Property::Map fontStyleMapGet = value->Get(); + DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION ); + DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION ); value = resultMap.Find( TextVisual::Property::POINT_SIZE, Property::FLOAT ); DALI_TEST_CHECK( value ); @@ -1022,8 +1047,7 @@ int UtcDaliVisualGetPropertyMap10(void) DALI_TEST_CHECK( !value->Get() ); value = resultMap.Find( TextVisual::Property::ENABLE_AUTO_SCROLL, Property::BOOLEAN ); - DALI_TEST_CHECK( value ); - DALI_TEST_CHECK( !value->Get() ); + DALI_TEST_CHECK( !value ); value = resultMap.Find( TextVisual::Property::LINE_SPACING, Property::FLOAT ); DALI_TEST_CHECK( value ); @@ -1274,3 +1298,358 @@ int UtcDaliVisualWireframeVisual(void) END_TEST; } + +int UtcDaliVisualGetTransform(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualGetTransform: ColorVisual" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR); + propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE); + Visual::Base colorVisual = factory.CreateVisual( propertyMap ); + + Dali::Property::Map map; + Dali::Property::Value transformProperty = colorVisual.GetProperty( Dali::Toolkit::Visual::DevelProperty::TRANSFORM ); + transformProperty.Get(map); + + //Test default values + { + Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_CHECK( typeValue->Get() == Vector2(0.0f,0.0f) ); + } + { + Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::SIZE ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_CHECK( typeValue->Get() == Vector2(1.0f,1.0f) ); + } + { + Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_CHECK( typeValue->Get() == Vector4(0.0f,0.0f,0.0f,0.0f) ); + } + { + Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::ORIGIN ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get() == Toolkit::Align::CENTER ); + } + { + Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::ANCHOR_POINT ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get() == Toolkit::Align::CENTER ); + } + + END_TEST; +} + +static void TestTransform( ToolkitTestApplication& application, Visual::Base visual ) +{ + Property::Map transform; + transform.Insert( Visual::DevelProperty::Transform::Property::OFFSET, Vector2(10.0f, 10.0f) ); + transform.Insert( Visual::DevelProperty::Transform::Property::SIZE, Vector2(0.2f, 0.2f) ); + transform.Insert( Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE, Vector4(1.0f, 1.0f, 0.0f,0.0f) ); + transform.Insert( Visual::DevelProperty::Transform::Property::ORIGIN, "TOP_BEGIN" ); + transform.Insert( Visual::DevelProperty::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END ); + + visual.SetProperty( Dali::Toolkit::Visual::DevelProperty::TRANSFORM, transform ); + + Dali::Property::Map map; + Dali::Property::Value transformProperty = visual.GetProperty( Dali::Toolkit::Visual::DevelProperty::TRANSFORM ); + transformProperty.Get(map); + + { + Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_EQUALS( typeValue->Get(),Vector2(10.0f,10.0f), TEST_LOCATION ); + } + { + Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::SIZE ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_EQUALS( typeValue->Get(), Vector2(0.2f,0.2f), TEST_LOCATION ); + } + { + Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_EQUALS( typeValue->Get(), Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION ); + } + { + Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::ORIGIN ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get(), Toolkit::Align::TOP_BEGIN, TEST_LOCATION ); + } + { + Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::ANCHOR_POINT ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get(), Toolkit::Align::BOTTOM_END, TEST_LOCATION ); + } + + //Put the visual on the stage + Actor actor = Actor::New(); + actor.SetSize(200.f, 200.f); + Stage::GetCurrent().Add( actor ); + visual.SetOnStage( actor ); + application.SendNotification(); + application.Render(0); + Renderer renderer( actor.GetRendererAt(0) ); + + //Check that the properties have been registered on the Renderer + Vector2 offset = renderer.GetProperty( renderer.GetPropertyIndex( "offset" ) ); + DALI_TEST_EQUALS( offset, Vector2(10.0f,10.0f), TEST_LOCATION ); + + Vector2 size = renderer.GetProperty( renderer.GetPropertyIndex( "size" ) ); + DALI_TEST_EQUALS( size, Vector2(0.2f,0.2f), TEST_LOCATION ); + + Vector4 offsetSizeMode = renderer.GetProperty( renderer.GetPropertyIndex( "offsetSizeMode" ) ); + DALI_TEST_EQUALS( offsetSizeMode, Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION ); + + Vector2 parentOrigin = renderer.GetProperty( renderer.GetPropertyIndex( "origin" ) ); + DALI_TEST_EQUALS( parentOrigin, Vector2(-0.5f,-0.5f), TEST_LOCATION ); + + Vector2 anchorPoint = renderer.GetProperty( renderer.GetPropertyIndex( "anchorPoint" ) ); + DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION ); + + //Set a new transform + transform.Clear(); + transform.Insert( Visual::DevelProperty::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) ); + transform.Insert( Visual::DevelProperty::Transform::Property::SIZE, Vector2(100.0f, 100.0f) ); + transform.Insert( Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE, Vector4(0.0f, 0.0f, 1.0f,1.0f) ); + visual.SetProperty( Dali::Toolkit::Visual::DevelProperty::TRANSFORM, transform ); + application.SendNotification(); + application.Render(0); + + //Check that the values have changed in the renderer + offset = renderer.GetProperty( renderer.GetPropertyIndex( "offset" ) ); + DALI_TEST_EQUALS( offset, Vector2(20.0f,20.0f), TEST_LOCATION ); + + size = renderer.GetProperty( renderer.GetPropertyIndex( "size" ) ); + DALI_TEST_EQUALS( size, Vector2(100.0f,100.0f), TEST_LOCATION ); + + offsetSizeMode = renderer.GetProperty( renderer.GetPropertyIndex( "offsetSizeMode" ) ); + DALI_TEST_EQUALS( offsetSizeMode, Vector4(0.0f,0.0f,1.0f,1.0f), TEST_LOCATION ); + + //Parent origin and anchor point should have default values + parentOrigin = renderer.GetProperty( renderer.GetPropertyIndex( "origin" ) ); + DALI_TEST_EQUALS( parentOrigin, Vector2(0.0f,0.0f), TEST_LOCATION ); + + anchorPoint = renderer.GetProperty( renderer.GetPropertyIndex( "anchorPoint" ) ); + DALI_TEST_EQUALS( anchorPoint, Vector2(0.0f,0.0f), TEST_LOCATION ); +} + +int UtcDaliVisualSetTransform0(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR); + propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE); + Visual::Base visual = factory.CreateVisual( propertyMap ); + TestTransform( application, visual ); + + END_TEST; +} + +int UtcDaliVisualSetTransform1(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: PrimitiveVisual" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap[ Visual::Property::TYPE ] = Visual::PRIMITIVE; + propertyMap[ PrimitiveVisual::Property::MIX_COLOR ] = Vector4(1.0f,1.0f,1.0f,1.0f); + propertyMap[ PrimitiveVisual::Property::SHAPE ] = PrimitiveVisual::Shape::SPHERE; + propertyMap[ PrimitiveVisual::Property::SLICES ] = 10; + propertyMap[ PrimitiveVisual::Property::STACKS ] = 10; + Visual::Base visual = factory.CreateVisual( propertyMap ); + TestTransform( application, visual ); + + END_TEST; +} + +int UtcDaliVisualSetTransform2(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: GradientVisual" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::GRADIENT ); + Property::Array stopOffsets; + stopOffsets.PushBack( 0.0f ); + stopOffsets.PushBack( 0.3f ); + stopOffsets.PushBack( 0.6f ); + stopOffsets.PushBack( 0.8f ); + stopOffsets.PushBack( 1.0f ); + propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, stopOffsets ); + + Property::Array stopColors; + stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f ); + stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f ); + stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f ); + stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f ); + stopColors.PushBack( Color::YELLOW ); + propertyMap.Insert( GradientVisual::Property::STOP_COLOR, stopColors ); + propertyMap.Insert( GradientVisual::Property::CENTER, Vector2( 0.5f, 0.5f ) ); + propertyMap.Insert( GradientVisual::Property::RADIUS, 1.414f ); + Visual::Base visual = factory.CreateVisual( propertyMap ); + TestTransform( application, visual ); + + END_TEST; +} + +int UtcDaliVisualSetTransform3(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: BorderVisual" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::BORDER ); + propertyMap.Insert( BorderVisual::Property::COLOR, Vector4(0.f, 1.f, 0.f, 0.6f) ); + propertyMap.Insert( BorderVisual::Property::SIZE, 3.0f ); + Visual::Base visual = factory.CreateVisual( propertyMap ); + TestTransform( application, visual ); + + END_TEST; +} + +int UtcDaliVisualSetTransform4(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: MeshVisual" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::MESH ); + propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME ); + propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME ); + propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION ); + propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING ); + propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) ); + Visual::Base visual = factory.CreateVisual( propertyMap ); + TestTransform( application, visual ); + + END_TEST; +} + +int UtcDaliVisualSetTransform5(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: ImageVisual from Image" ); + + VisualFactory factory = VisualFactory::Get(); + Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200)); + Visual::Base visual = factory.CreateVisual(image); + TestTransform( application, visual ); + + END_TEST; +} + +int UtcDaliVisualSetTransform6(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: ImageVisual for URL " ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE; + propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME; + propertyMap[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f; + propertyMap[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 100.0f; + propertyMap[Toolkit::ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL; + propertyMap[Toolkit::ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR; + propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true; + Visual::Base visual = factory.CreateVisual(propertyMap); + TestTransform( application, visual ); + + END_TEST; +} + +int UtcDaliVisualSetTransform7(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: NPatch visual" ); + + VisualFactory factory = VisualFactory::Get(); + Image image = ResourceImage::New(TEST_NPATCH_FILE_NAME, ImageDimensions(100, 200)); + Visual::Base visual = factory.CreateVisual(image); + TestTransform( application, visual ); + + END_TEST; +} + +int UtcDaliNPatchVisualCustomShader(void) +{ + ToolkitTestApplication application; + tet_infoline( "NPatchVisual with custom shader" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map properties; + Property::Map shader; + const std::string fragmentShader = "Foobar"; + shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader; + properties[Dali::Toolkit::Visual::Property::TYPE] = Dali::Toolkit::Visual::IMAGE; + properties[Dali::Toolkit::Visual::Property::SHADER]=shader; + properties[Dali::Toolkit::ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME; + + Visual::Base visual = factory.CreateVisual( properties ); + Actor dummy = Actor::New(); + // trigger creation through setting on stage + visual.SetOnStage( dummy ); + + Renderer renderer = dummy.GetRendererAt( 0 ); + Shader shader2 = renderer.GetShader(); + Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM ); + Property::Map* map = value.GetMap(); + DALI_TEST_CHECK( map ); + + Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp + // *map["vertex"]; is default here so not verifying it + + DALI_TEST_EQUALS( fragmentShader, fragment->Get(), TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliGradientVisualBlendMode(void) +{ + ToolkitTestApplication application; + + VisualFactory factory = VisualFactory::Get(); + + Visual::Base opaqueGradientVisual = factory.CreateVisual( + Property::Map().Add( Visual::Property::TYPE, Visual::GRADIENT ) + .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) ) + .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) ) + .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED ) + .Add( Color::GREEN ) ) ); + + Visual::Base alphaGradientVisual = factory.CreateVisual( + Property::Map().Add( Visual::Property::TYPE, Visual::GRADIENT ) + .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) ) + .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) ) + .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED ) + .Add( Vector4( 1.0f, 1.0f, 1.0f, 0.5f ) ) ) ); + + DummyControl control = DummyControl::New(); + control.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); + Stage::GetCurrent().Add( control ); + + DummyControlImpl& dummyImpl = static_cast( control.GetImplementation() ); + dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, opaqueGradientVisual ); + dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 2, alphaGradientVisual ); + + application.SendNotification(); + application.Render(); + + // Control should have two renderers, the first one is opaque so our blending mode should be off, the second one has some alpha so should be set to automatic + DALI_TEST_EQUALS( 2u, control.GetRendererCount(), TEST_LOCATION ); + DALI_TEST_EQUALS( control.GetRendererAt( 0 ).GetProperty( Renderer::Property::BLEND_MODE ).Get(), (int)BlendMode::OFF, TEST_LOCATION ); + DALI_TEST_EQUALS( control.GetRendererAt( 1 ).GetProperty( Renderer::Property::BLEND_MODE ).Get(), (int)BlendMode::AUTO, TEST_LOCATION ); + + END_TEST; +}