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-RendererFactory.cpp;h=94a369fc6915872e9bd6d66f803c3387165dee45;hp=8da2c94d44ef8b67f5b22d15e23cfb6408e0af74;hb=c125573992c196f15ece50589ae80efed63c8870;hpb=c560f95435d40fd3980cd5f92da65c9f28f440e7 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-RendererFactory.cpp b/automated-tests/src/dali-toolkit/utc-Dali-RendererFactory.cpp index 8da2c94..94a369f 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-RendererFactory.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-RendererFactory.cpp @@ -17,14 +17,209 @@ #include #include #include +#include #include -#include +#include #include #include using namespace Dali; using namespace Dali::Toolkit; +namespace +{ +typedef NinePatchImage::StretchRanges StretchRanges; + +const char* TEST_IMAGE_FILE_NAME = "gallery_image_01.jpg"; +const char* TEST_NPATCH_FILE_NAME = "gallery_image_01.9.png"; + +const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg"; +const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj"; +const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl"; +const char* TEST_SIMPLE_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal-Simple.mtl"; + +Integration::Bitmap* CreateBitmap( unsigned int imageWidth, unsigned int imageHeight, unsigned int initialColor, Pixel::Format pixelFormat ) +{ + Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_RETAIN ); + Integration::PixelBuffer* pixbuffer = bitmap->GetPackedPixelsProfile()->ReserveBuffer( pixelFormat, imageWidth, imageHeight, imageWidth, imageHeight ); + unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat ); + + memset( pixbuffer, initialColor, imageHeight * imageWidth * bytesPerPixel ); + + return bitmap; +} + +void InitialiseRegionsToZeroAlpha( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, Pixel::Format pixelFormat ) +{ + PixelBuffer* pixbuffer = image->GetBuffer(); + unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat ); + + for( unsigned int row = 0; row < imageWidth; ++row ) + { + unsigned int pixelOffset = row * bytesPerPixel; + pixbuffer[ pixelOffset + 3 ] = 0x00; + pixelOffset += ( imageHeight - 1 ) * imageWidth * bytesPerPixel; + pixbuffer[ pixelOffset + 3 ] = 0x00; + } + + for ( unsigned int column = 0; column < imageHeight; ++column ) + { + unsigned int pixelOffset = column * imageWidth * bytesPerPixel; + pixbuffer[ pixelOffset + 3 ] = 0x00; + pixelOffset += ( imageWidth -1 ) * bytesPerPixel; + pixbuffer[ pixelOffset + 3 ] = 0x00; + } +} + +void AddStretchRegionsToImage( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, const StretchRanges& stretchRangesX, const StretchRanges& stretchRangesY, Pixel::Format pixelFormat ) +{ + PixelBuffer* pixbuffer = image->GetBuffer(); + unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat ); + + for(StretchRanges::ConstIterator it = stretchRangesX.Begin(); it != stretchRangesX.End(); ++it) + { + const Uint16Pair& range = *it; + //since the stretch range is in the cropped image space, we need to offset by 1 to get it to the uncropped image space + for( unsigned int column = range.GetX() + 1u; column < range.GetY() + 1u; ++column ) + { + unsigned int pixelOffset = column * bytesPerPixel; + pixbuffer[ pixelOffset ] = 0x00; + pixbuffer[ pixelOffset + 1 ] = 0x00; + pixbuffer[ pixelOffset + 2 ] = 0x00; + pixbuffer[ pixelOffset + 3 ] = 0xFF; + } + } + + + for(StretchRanges::ConstIterator it = stretchRangesY.Begin(); it != stretchRangesY.End(); ++it) + { + const Uint16Pair& range = *it; + //since the stretch range is in the cropped image space, we need to offset by 1 to get it to the uncropped image space + for( unsigned int row = range.GetX() + 1u; row < range.GetY() + 1u; ++row ) + { + unsigned int pixelOffset = row * imageWidth * bytesPerPixel; + pixbuffer[ pixelOffset ] = 0x00; + pixbuffer[ pixelOffset + 1 ] = 0x00; + pixbuffer[ pixelOffset + 2 ] = 0x00; + pixbuffer[ pixelOffset + 3 ] = 0xFF; + } + } +} + +void AddChildRegionsToImage( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, const Vector4& requiredChildRegion, Pixel::Format pixelFormat ) +{ + PixelBuffer* pixbuffer = image->GetBuffer(); + unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat ); + + Integration::Bitmap::PackedPixelsProfile* srcProfile = image->GetPackedPixelsProfile(); + unsigned int bufferStride = srcProfile->GetBufferStride(); + + // Add bottom child region + for( unsigned int column = requiredChildRegion.x; column < imageWidth - requiredChildRegion.z; ++column ) + { + unsigned int pixelOffset = column * bytesPerPixel; + pixelOffset += ( imageHeight - 1 ) * bufferStride; + pixbuffer[ pixelOffset ] = 0x00; + pixbuffer[ pixelOffset + 1 ] = 0x00; + pixbuffer[ pixelOffset + 2 ] = 0x00; + pixbuffer[ pixelOffset + 3 ] = 0xFF; + } + + // Add right child region + for ( unsigned int row = requiredChildRegion.y; row < imageHeight - requiredChildRegion.w; ++row ) + { + unsigned int pixelOffset = row * bufferStride + ( imageWidth - 1 ) * bytesPerPixel; + pixbuffer[ pixelOffset ] = 0x00; + pixbuffer[ pixelOffset + 1 ] = 0x00; + pixbuffer[ pixelOffset + 2 ] = 0x00; + pixbuffer[ pixelOffset + 3 ] = 0xFF; + } +} + +Integration::ResourcePointer CustomizeNinePatch( TestApplication& application, + unsigned int ninePatchImageWidth, + unsigned int ninePatchImageHeight, + const StretchRanges& stretchRangesX, + const StretchRanges& stretchRangesY, + bool addChildRegion = false, + Vector4 requiredChildRegion = Vector4::ZERO ) +{ + TestPlatformAbstraction& platform = application.GetPlatform(); + + Pixel::Format pixelFormat = Pixel::RGBA8888; + + tet_infoline("Create Bitmap"); + platform.SetClosestImageSize(Vector2( ninePatchImageWidth, ninePatchImageHeight)); + Integration::Bitmap* bitmap = CreateBitmap( ninePatchImageWidth, ninePatchImageHeight, 0xFF, pixelFormat ); + + tet_infoline("Clear border regions"); + InitialiseRegionsToZeroAlpha( bitmap, ninePatchImageWidth, ninePatchImageHeight, pixelFormat ); + + tet_infoline("Add Stretch regions to Bitmap"); + AddStretchRegionsToImage( bitmap, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY, pixelFormat ); + + if( addChildRegion ) + { + tet_infoline("Add Child regions to Bitmap"); + AddChildRegionsToImage( bitmap, ninePatchImageWidth, ninePatchImageHeight, requiredChildRegion, pixelFormat ); + } + + tet_infoline("Getting resource"); + Integration::ResourcePointer resourcePtr(bitmap); + //platform.SetResourceLoaded( 0, Dali::Integration::ResourceBitmap, resourcePtr ); + platform.SetSynchronouslyLoadedResource( resourcePtr); + + return resourcePtr; +} + +void TestControlRendererRender( ToolkitTestApplication& application, + Actor& actor, + ControlRenderer& controlRenderer, + std::size_t expectedSamplers = 0, + ImageDimensions imageDimensions = ImageDimensions(), + Integration::ResourcePointer resourcePtr = Integration::ResourcePointer()) +{ + if( resourcePtr ) + { + // set the image size, for test case, this needs to be set before loading started + application.GetPlatform().SetClosestImageSize( Vector2(imageDimensions.GetWidth(), imageDimensions.GetHeight()) ); + } + + actor.SetSize( 200.f, 200.f ); + Stage::GetCurrent().Add( actor ); + controlRenderer.SetSize( Vector2(200.f, 200.f) ); + controlRenderer.SetOnStage( actor ); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + application.SendNotification(); + application.Render(); + + if( resourcePtr ) + { + Integration::ResourceRequest* request = application.GetPlatform().GetRequest(); + if(request) + { + application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resourcePtr ); + } + } + + application.Render(); + application.SendNotification(); + + if( resourcePtr ) + { + DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) || + application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceSynchronouslyFunc )); + } + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + +} + +} // namespace + + void dali_renderer_factory_startup(void) { test_return_value = TET_UNDEF; @@ -57,24 +252,104 @@ int UtcDaliRendererFactoryGet(void) // Check that renderer factory is a singleton DALI_TEST_CHECK(factory == newFactory); - RendererFactory newFactory2(factory); - DALI_TEST_CHECK(factory == newFactory2); + END_TEST; +} + +int UtcDaliRendererFactoryCopyAndAssignment(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryCopyAndAssignment" ); + RendererFactory factory = RendererFactory::Get(); + + RendererFactory factoryCopy( factory ); + DALI_TEST_CHECK(factory == factoryCopy); + + RendererFactory emptyFactory; + RendererFactory emptyFactoryCopy( emptyFactory ); + DALI_TEST_CHECK(emptyFactory == emptyFactoryCopy); + + RendererFactory factoryEquals; + factoryEquals = factory; + DALI_TEST_CHECK(factory == factoryEquals); + + RendererFactory emptyFactoryEquals; + emptyFactoryEquals = emptyFactory; + DALI_TEST_CHECK( emptyFactory == emptyFactoryEquals ); + + //self assignment + factory = factory; + DALI_TEST_CHECK( factory = factoryCopy ); + + END_TEST; +} + +int UtcDaliRendererFactoryGetColorRenderer1(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetColorRenderer1: Request color renderer with a Property::Map" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + Property::Map propertyMap; + Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f ); + propertyMap.Insert("rendererType", "color"); + propertyMap.Insert("mixColor", testColor); + + ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap); + DALI_TEST_CHECK( controlRenderer ); + + Actor actor = Actor::New(); + TestControlRendererRender( application, actor, controlRenderer ); + + Vector4 actualValue(Vector4::ZERO); + TestGlAbstraction& gl = application.GetGlAbstraction(); + DALI_TEST_CHECK( gl.GetUniformValue( "mixColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliRendererFactoryGetColorRenderer2(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetColorRenderer2: Request color renderer with a Vector4" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f ); + ControlRenderer controlRenderer = factory.GetControlRenderer(testColor); + DALI_TEST_CHECK( controlRenderer ); + + Actor actor = Actor::New(); + TestControlRendererRender( application, actor, controlRenderer ); + + Vector4 actualValue(Vector4::ZERO); + TestGlAbstraction& gl = application.GetGlAbstraction(); + DALI_TEST_CHECK( gl.GetUniformValue( "mixColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION ); + + controlRenderer.SetOffStage( actor ); + DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); END_TEST; } -int UtcDaliRendererFactoryGetColorRenderer(void) +int UtcDaliRendererFactoryGetBorderRenderer1(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliRendererFactoryGetColorRenderer" ); + tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer1: Request border renderer with a Property::Map" ); RendererFactory factory = RendererFactory::Get(); DALI_TEST_CHECK( factory ); Property::Map propertyMap; Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f ); - propertyMap.Insert("renderer-type", "color-renderer"); - propertyMap.Insert("blend-color", testColor); + float testSize = 5.f; + propertyMap.Insert("rendererType", "border"); + propertyMap.Insert("borderColor", testColor); + propertyMap.Insert("borderSize", testSize); ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap); DALI_TEST_CHECK( controlRenderer ); @@ -86,23 +361,80 @@ int UtcDaliRendererFactoryGetColorRenderer(void) controlRenderer.SetOnStage( actor ); DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + int blendMode = actor.GetRendererAt(0u).GetProperty( Renderer::Property::BLEND_MODE ); + DALI_TEST_EQUALS( static_cast(blendMode), BlendingMode::ON, TEST_LOCATION ); TestGlAbstraction& gl = application.GetGlAbstraction(); application.SendNotification(); application.Render(0); - Vector4 actualValue(Vector4::ZERO); - DALI_TEST_CHECK( gl.GetUniformValue( "uBlendColor", actualValue ) ); - DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION ); + Vector4 actualColor(Vector4::ZERO); + DALI_TEST_CHECK( gl.GetUniformValue( "borderColor", actualColor ) ); + DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION ); + + float actualSize = 0.f; + DALI_TEST_CHECK( gl.GetUniformValue( "borderSize", actualSize ) ); + DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION ); - Stage::GetCurrent().Remove( actor ); controlRenderer.SetOffStage( actor ); DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); END_TEST; } +int UtcDaliRendererFactoryGetBorderRenderer2(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer2: Request border renderer with a borderSize and a borderColor" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + Vector4 testColor( 1.f, 0.5f, 0.3f, 1.f ); + float testSize = 5.f; + + ControlRenderer controlRenderer = factory.GetControlRenderer(testSize, testColor ); + DALI_TEST_CHECK( controlRenderer ); + + Actor actor = Actor::New(); + actor.SetSize(200.f, 200.f); + Stage::GetCurrent().Add( actor ); + controlRenderer.SetSize(Vector2(200.f, 200.f)); + controlRenderer.SetOnStage( actor ); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + + application.SendNotification(); + application.Render(0); + + int blendMode = actor.GetRendererAt(0u).GetProperty( Renderer::Property::BLEND_MODE ); + DALI_TEST_EQUALS( static_cast(blendMode), BlendingMode::AUTO, TEST_LOCATION ); + + Vector4 actualColor(Vector4::ZERO); + DALI_TEST_CHECK( gl.GetUniformValue( "borderColor", actualColor ) ); + DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION ); + + float actualSize = 0.f; + DALI_TEST_CHECK( gl.GetUniformValue( "borderSize", actualSize ) ); + DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION ); + + controlRenderer.SetOffStage( actor ); + + // enable the anti-aliasing + controlRenderer = factory.GetControlRenderer(testSize, testColor, true ); + controlRenderer.SetOnStage( actor ); + + application.SendNotification(); + application.Render(0); + blendMode = actor.GetRendererAt(0u).GetProperty( Renderer::Property::BLEND_MODE ); + DALI_TEST_EQUALS( static_cast(blendMode), BlendingMode::ON, TEST_LOCATION ); + + END_TEST; +} + int UtcDaliRendererFactoryGetLinearGradientRenderer(void) { ToolkitTestApplication application; @@ -112,43 +444,31 @@ int UtcDaliRendererFactoryGetLinearGradientRenderer(void) DALI_TEST_CHECK( factory ); Property::Map propertyMap; - propertyMap.Insert("renderer-type", "gradient-renderer"); + propertyMap.Insert("rendererType", "gradient"); Vector2 start(-1.f, -1.f); Vector2 end(1.f, 1.f); - propertyMap.Insert("gradient-start-position", start); - propertyMap.Insert("gradient-end-position", end); - propertyMap.Insert("gradient-spread-method", "repeat"); + propertyMap.Insert("startPosition", start); + propertyMap.Insert("endPosition", end); + propertyMap.Insert("spreadMethod", "repeat"); Property::Array stopOffsets; stopOffsets.PushBack( 0.2f ); stopOffsets.PushBack( 0.8f ); - propertyMap.Insert("gradient-stop-offset", stopOffsets); + propertyMap.Insert("stopOffset", stopOffsets); Property::Array stopColors; stopColors.PushBack( Color::RED ); stopColors.PushBack( Color::GREEN ); - propertyMap.Insert("gradient-stop-color", stopColors); + propertyMap.Insert("stopColor", stopColors); ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap); DALI_TEST_CHECK( controlRenderer ); - Actor actor = Actor::New(); - Vector2 size(200.f, 200.f); - actor.SetSize(size); - Stage::GetCurrent().Add( actor ); - controlRenderer.SetOnStage( actor ); - controlRenderer.SetSize(size); - - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); - // A lookup texture is generated and pass to shader as sampler - DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u ); - - application.SendNotification(); - application.Render(0); + Actor actor = Actor::New(); + TestControlRendererRender( application, actor, controlRenderer, 1u ); - Stage::GetCurrent().Remove( actor ); controlRenderer.SetOffStage( actor ); DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); @@ -164,53 +484,1031 @@ int UtcDaliRendererFactoryGetRadialGradientRenderer(void) DALI_TEST_CHECK( factory ); Property::Map propertyMap; - propertyMap.Insert("renderer-type", "gradient-renderer"); + propertyMap.Insert("rendererType", "gradient"); Vector2 center(100.f, 100.f); float radius = 100.f; - propertyMap.Insert("gradient-units", "user-space"); - propertyMap.Insert("gradient-center", center); - propertyMap.Insert("gradient-radius", radius); + propertyMap.Insert("units", "userSpace"); + propertyMap.Insert("center", center); + propertyMap.Insert("radius", radius); Property::Array stopOffsets; stopOffsets.PushBack( 0.0f ); stopOffsets.PushBack( 1.f ); - propertyMap.Insert("gradient-stop-offset", stopOffsets); + propertyMap.Insert("stopOffset", stopOffsets); Property::Array stopColors; stopColors.PushBack( Color::RED ); stopColors.PushBack( Color::GREEN ); - propertyMap.Insert("gradient-stop-color", stopColors); + propertyMap.Insert("stopColor", stopColors); ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap); DALI_TEST_CHECK( controlRenderer ); - Actor actor = Actor::New(); - Vector2 size(200.f, 200.f); - actor.SetSize(size); - Stage::GetCurrent().Add( actor ); - controlRenderer.SetSize(size); - controlRenderer.SetOnStage( actor ); - - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); - // A lookup texture is generated and pass to shader as sampler - DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u ); - - TestGlAbstraction& gl = application.GetGlAbstraction(); - application.SendNotification(); - application.Render(0); + Actor actor = Actor::New(); + TestControlRendererRender( application, actor, controlRenderer, 1u ); Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f ); alignMatrix.Invert(); Matrix3 actualValue( Matrix3::IDENTITY ); + TestGlAbstraction& gl = application.GetGlAbstraction(); DALI_TEST_CHECK( gl.GetUniformValue( "uAlignmentMatrix", actualValue ) ); DALI_TEST_EQUALS( actualValue, alignMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION ); - Stage::GetCurrent().Remove( actor ); + END_TEST; +} + +int UtcDaliRendererFactoryDefaultOffsetsGradientRenderer(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer"); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + Property::Map propertyMap; + propertyMap.Insert("rendererType", "gradient"); + + Vector2 start(-1.f, -1.f); + Vector2 end(1.f, 1.f); + propertyMap.Insert("startPosition", start); + propertyMap.Insert("endPosition", end); + propertyMap.Insert("spreadMethod", "repeat"); + + Property::Array stopColors; + stopColors.PushBack( Color::RED ); + stopColors.PushBack( Color::GREEN ); + propertyMap.Insert("stopColor", stopColors); + + ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap); + DALI_TEST_CHECK( controlRenderer ); + + // A lookup texture is generated and pass to shader as sampler + Actor actor = Actor::New(); + TestControlRendererRender( application, actor, controlRenderer, 1u ); + + controlRenderer.SetOffStage( actor ); + DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + + END_TEST; +} + +int UtcDaliRendererFactoryGetImageRenderer1(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetImageRenderer1: Request image renderer with a Property::Map" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + Property::Map propertyMap; + propertyMap.Insert( "rendererType", "image" ); + propertyMap.Insert( "url", TEST_IMAGE_FILE_NAME ); + + ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + DALI_TEST_CHECK( controlRenderer ); + + Actor actor = Actor::New(); + // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. + // Image with a size smaller than 512*512 will be uploaded as a part of the atlas. + + const int width=512; + const int height=513; + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD ); + bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, width, height,width, height ); + + TestControlRendererRender( application, actor, controlRenderer, 1u, + ImageDimensions(width, height), + Integration::ResourcePointer( bitmap ) ); + + DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + controlRenderer.SetOffStage( actor ); DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); END_TEST; } + +int UtcDaliRendererFactoryGetImageRenderer2(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetImageRenderer2: Request image renderer with an image handle" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME); + ControlRenderer controlRenderer = factory.GetControlRenderer( image ); + + Actor actor = Actor::New(); + // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. + // Image with a size smaller than 512*512 will be uploaded as a part of the atlas. + + const int width=512; + const int height=513; + + Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD ); + bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, width, height,width, height ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + TestControlRendererRender( application, actor, controlRenderer, 1u, + ImageDimensions(width, height), + Integration::ResourcePointer(bitmap) ); + + DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliRendererFactoryGetNPatchRenderer1(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer1: Request 9-patch renderer with a Property::Map" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + const unsigned int ninePatchImageHeight = 18; + const unsigned int ninePatchImageWidth = 28; + StretchRanges stretchRangesX; + stretchRangesX.PushBack( Uint16Pair( 2, 3 ) ); + StretchRanges stretchRangesY; + stretchRangesY.PushBack( Uint16Pair( 4, 5 ) ); + Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY ); + + Property::Map propertyMap; + propertyMap.Insert( "rendererType", "image" ); + propertyMap.Insert( "url", TEST_NPATCH_FILE_NAME ); + { + tet_infoline( "whole grid" ); + ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + DALI_TEST_CHECK( controlRenderer ); + + Actor actor = Actor::New(); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + TestControlRendererRender( application, actor, controlRenderer, 1u, + ImageDimensions(ninePatchImageWidth, ninePatchImageHeight), + ninePatchResource ); + + DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + } + + propertyMap.Insert( "borderOnly", true ); + { + tet_infoline( "border only" ); + ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + DALI_TEST_CHECK( controlRenderer ); + + Actor actor = Actor::New(); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + TestControlRendererRender( application, actor, controlRenderer, 1u, + ImageDimensions(ninePatchImageWidth, ninePatchImageHeight), + ninePatchResource ); + + DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + } + + END_TEST; +} + +int UtcDaliRendererFactoryGetNPatchRenderer2(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer2: Request n-patch renderer with a Property::Map" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + const unsigned int ninePatchImageWidth = 18; + const unsigned int ninePatchImageHeight = 28; + StretchRanges stretchRangesX; + stretchRangesX.PushBack( Uint16Pair( 2, 3 ) ); + stretchRangesX.PushBack( Uint16Pair( 5, 7 ) ); + stretchRangesX.PushBack( Uint16Pair( 12, 15 ) ); + StretchRanges stretchRangesY; + stretchRangesY.PushBack( Uint16Pair( 4, 5 ) ); + stretchRangesY.PushBack( Uint16Pair( 8, 12 ) ); + stretchRangesY.PushBack( Uint16Pair( 15, 16 ) ); + stretchRangesY.PushBack( Uint16Pair( 25, 27 ) ); + Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY ); + + Property::Map propertyMap; + propertyMap.Insert( "rendererType", "image" ); + propertyMap.Insert( "url", TEST_NPATCH_FILE_NAME ); + { + ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + DALI_TEST_CHECK( controlRenderer ); + + Actor actor = Actor::New(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + TestControlRendererRender( application, actor, controlRenderer, 1u, + ImageDimensions(ninePatchImageWidth, ninePatchImageHeight), + ninePatchResource ); + + + DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + + controlRenderer.SetOffStage( actor ); + DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + } + + propertyMap.Insert( "borderOnly", true ); + { + tet_infoline( "border only" ); + ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + DALI_TEST_CHECK( controlRenderer ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + Actor actor = Actor::New(); + TestControlRendererRender( application, actor, controlRenderer, 1u, + ImageDimensions(ninePatchImageWidth, ninePatchImageHeight), + ninePatchResource ); + + + DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + + controlRenderer.SetOffStage( actor ); + DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + } + + END_TEST; +} + +int UtcDaliRendererFactoryGetNPatchRenderer3(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer3: Request 9-patch renderer with an image url" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + const unsigned int ninePatchImageHeight = 18; + const unsigned int ninePatchImageWidth = 28; + StretchRanges stretchRangesX; + stretchRangesX.PushBack( Uint16Pair( 2, 3 ) ); + StretchRanges stretchRangesY; + stretchRangesY.PushBack( Uint16Pair( 4, 5 ) ); + Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY ); + + ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME ); + DALI_TEST_CHECK( controlRenderer ); + + Actor actor = Actor::New(); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + TestControlRendererRender( application, actor, controlRenderer, 1u, + ImageDimensions(ninePatchImageWidth, ninePatchImageHeight), + ninePatchResource ); + + DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliRendererFactoryGetNPatchRenderer4(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer4: Request n-patch renderer with an image url" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + const unsigned int ninePatchImageHeight = 18; + const unsigned int ninePatchImageWidth = 28; + StretchRanges stretchRangesX; + stretchRangesX.PushBack( Uint16Pair( 2, 3 ) ); + stretchRangesX.PushBack( Uint16Pair( 5, 7 ) ); + stretchRangesX.PushBack( Uint16Pair( 12, 15 ) ); + StretchRanges stretchRangesY; + stretchRangesY.PushBack( Uint16Pair( 4, 5 ) ); + stretchRangesY.PushBack( Uint16Pair( 8, 12 ) ); + stretchRangesY.PushBack( Uint16Pair( 15, 16 ) ); + stretchRangesY.PushBack( Uint16Pair( 25, 27 ) ); + Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY ); + + ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME ); + DALI_TEST_CHECK( controlRenderer ); + + Actor actor = Actor::New(); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + TestControlRendererRender( application, actor, controlRenderer, 1u, + ImageDimensions(ninePatchImageWidth, ninePatchImageHeight), + ninePatchResource ); + + DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliRendererFactoryGetNPatchRendererN1(void) +{ + //This should still load but display an error image + + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid image url" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + ControlRenderer controlRenderer = factory.GetControlRenderer( "ERROR.9.jpg" ); + DALI_TEST_CHECK( controlRenderer ); + + Actor actor = Actor::New(); + + //The testkit still has to load a bitmap for the broken renderer image + Integration::Bitmap* bitmap = Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD); + bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, 100, 100, 100, 100 ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + TestControlRendererRender( application, actor, controlRenderer, 1u, + ImageDimensions(), + Integration::ResourcePointer(bitmap) ); + + DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliRendererFactoryGetNPatchRendererN2(void) +{ + //This should still load but display an error image + + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid Property::Map" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + Property::Map propertyMap; + propertyMap.Insert( "rendererType", 111 ); + propertyMap.Insert( "url", "ERROR.9.jpg" ); + + ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + DALI_TEST_CHECK( controlRenderer ); + + Actor actor = Actor::New(); + + //The testkit still has to load a bitmap for the broken renderer image + Integration::Bitmap* bitmap = Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD); + bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, 100, 100, 100, 100 ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + TestControlRendererRender( application, actor, controlRenderer, 1u, + ImageDimensions(), + Integration::ResourcePointer(bitmap) ); + + DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliRendererFactoryGetSvgRenderer(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetSvgRenderer: Request svg renderer with a svg url" ); + + RendererFactory factory = RendererFactory::Get(); + ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_SVG_FILE_NAME ); + DALI_TEST_CHECK( controlRenderer ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + Actor actor = Actor::New(); + actor.SetSize( 200.f, 200.f ); + Stage::GetCurrent().Add( actor ); + controlRenderer.SetSize( Vector2(200.f, 200.f) ); + controlRenderer.SetOnStage( actor ); + application.SendNotification(); + application.Render(); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + EventThreadCallback* eventTrigger = EventThreadCallback::Get(); + CallbackBase* callback = eventTrigger->GetCallback(); + + eventTrigger->WaitingForTrigger( 1 );// waiting until the svg image is rasterized. + CallbackBase::Execute( *callback ); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + // waiting for the resource uploading + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + + END_TEST; +} + +//Test if mesh loads correctly when supplied with only the bare minimum requirements, an object file. +int UtcDaliRendererFactoryGetMeshRenderer1(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer1: Request mesh renderer with a valid object file only" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + //Set up renderer properties. + Property::Map propertyMap; + propertyMap.Insert( "rendererType", "mesh" ); + propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME ); + + ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + DALI_TEST_CHECK( controlRenderer ); + + Actor actor = Actor::New(); + actor.SetSize( 200.f, 200.f ); + Stage::GetCurrent().Add( actor ); + controlRenderer.SetSize( Vector2( 200.f, 200.f ) ); + controlRenderer.SetOnStage( actor ); + + application.SendNotification(); + application.Render( 0 ); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + //Tell the platform abstraction that the required resources have been loaded. + TestPlatformAbstraction& platform = application.GetPlatform(); + platform.SetAllResourceRequestsAsLoaded(); + + //Render again to upload the now-loaded textures. + application.SendNotification(); + application.Render( 0 ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + + Matrix testScaleMatrix; + testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) ); + Matrix actualScaleMatrix; + + //Test to see if the object has been successfully loaded. + DALI_TEST_CHECK( gl.GetUniformValue( "uObjectMatrix", actualScaleMatrix ) ); + DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION ); + + controlRenderer.SetOffStage( actor ); + DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + + END_TEST; +} + +//Test if mesh loads correctly when supplied with an object file as well as a blank material file and images directory. +int UtcDaliRendererFactoryGetMeshRenderer2(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer2: Request mesh renderer with blank material file and images directory" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + //Set up renderer properties. + Property::Map propertyMap; + propertyMap.Insert( "rendererType", "mesh" ); + propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME ); + propertyMap.Insert( "materialUrl", "" ); + propertyMap.Insert( "texturesPath", "" ); + + ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + DALI_TEST_CHECK( controlRenderer ); + + //Add renderer to an actor on stage. + Actor actor = Actor::New(); + actor.SetSize( 200.f, 200.f ); + Stage::GetCurrent().Add( actor ); + controlRenderer.SetSize( Vector2( 200.f, 200.f ) ); + controlRenderer.SetOnStage( actor ); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + //Attempt to render to queue resource load requests. + application.SendNotification(); + application.Render( 0 ); + + //Tell the platform abstraction that the required resources have been loaded. + TestPlatformAbstraction& platform = application.GetPlatform(); + platform.SetAllResourceRequestsAsLoaded(); + + //Render again to upload the now-loaded textures. + application.SendNotification(); + application.Render( 0 ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + + Matrix testScaleMatrix; + testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) ); + Matrix actualScaleMatrix; + + //Test to see if the object has been successfully loaded. + DALI_TEST_CHECK( gl.GetUniformValue( "uObjectMatrix", actualScaleMatrix ) ); + DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION ); + + controlRenderer.SetOffStage( actor ); + DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + + END_TEST; +} + +//Test if mesh loads correctly when supplied with all parameters, an object file, a material file and a directory location. +int UtcDaliRendererFactoryGetMeshRenderer3(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer3: Request mesh renderer with all parameters correct" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + //Set up renderer properties. + Property::Map propertyMap; + propertyMap.Insert( "rendererType", "mesh" ); + propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME ); + propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME ); + propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" ); + + ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + DALI_TEST_CHECK( controlRenderer ); + + //Add renderer to an actor on stage. + Actor actor = Actor::New(); + actor.SetSize( 200.f, 200.f ); + Stage::GetCurrent().Add( actor ); + controlRenderer.SetSize( Vector2( 200.f, 200.f ) ); + controlRenderer.SetOnStage( actor ); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + //Attempt to render to queue resource load requests. + application.SendNotification(); + application.Render( 0 ); + + //Tell the platform abstraction that the required resources have been loaded. + TestPlatformAbstraction& platform = application.GetPlatform(); + platform.SetAllResourceRequestsAsLoaded(); + + //Render again to upload the now-loaded textures. + application.SendNotification(); + application.Render( 0 ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + + Matrix testScaleMatrix; + testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) ); + Matrix actualScaleMatrix; + + //Test to see if the object has been successfully loaded. + DALI_TEST_CHECK( gl.GetUniformValue( "uObjectMatrix", actualScaleMatrix ) ); + DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION ); + + controlRenderer.SetOffStage( actor ); + DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + + END_TEST; +} + +//Test if mesh renderer can load a correctly supplied mesh without a normal map or gloss map in the material file. +int UtcDaliRendererFactoryGetMeshRenderer4(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer4: Request mesh renderer with diffuse texture but not normal or gloss." ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + //Set up renderer properties. + Property::Map propertyMap; + propertyMap.Insert( "rendererType", "mesh" ); + propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME ); + propertyMap.Insert( "materialUrl", TEST_SIMPLE_MTL_FILE_NAME ); + propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" ); + + ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + DALI_TEST_CHECK( controlRenderer ); + + //Add renderer to an actor on stage. + Actor actor = Actor::New(); + actor.SetSize( 200.f, 200.f ); + Stage::GetCurrent().Add( actor ); + controlRenderer.SetSize( Vector2( 200.f, 200.f ) ); + controlRenderer.SetOnStage( actor ); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + //Attempt to render to queue resource load requests. + application.SendNotification(); + application.Render( 0 ); + + //Tell the platform abstraction that the required resources have been loaded. + TestPlatformAbstraction& platform = application.GetPlatform(); + platform.SetAllResourceRequestsAsLoaded(); + + //Render again to upload the now-loaded textures. + application.SendNotification(); + application.Render( 0 ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + + Matrix testScaleMatrix; + testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) ); + Matrix actualScaleMatrix; + + //Test to see if the object has been successfully loaded. + DALI_TEST_CHECK( gl.GetUniformValue( "uObjectMatrix", actualScaleMatrix ) ); + DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION ); + + controlRenderer.SetOffStage( actor ); + DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + + END_TEST; +} + +//Test if mesh renderer handles the case of lacking an object file. +int UtcDaliRendererFactoryGetMeshRendererN1(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetMeshRendererN1: Request mesh renderer without object file" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + //Set up renderer properties. + Property::Map propertyMap; + propertyMap.Insert( "rendererType", "mesh" ); + propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME ); + propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" ); + + ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + DALI_TEST_CHECK( controlRenderer ); + + //Add renderer to an actor on stage. + Actor actor = Actor::New(); + actor.SetSize( 200.f, 200.f ); + Stage::GetCurrent().Add( actor ); + controlRenderer.SetSize( Vector2( 200.f, 200.f ) ); + controlRenderer.SetOnStage( actor ); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + //Attempt to render to queue resource load requests. + application.SendNotification(); + application.Render( 0 ); + + //Tell the platform abstraction that the required resources have been loaded. + TestPlatformAbstraction& platform = application.GetPlatform(); + platform.SetAllResourceRequestsAsLoaded(); + + //Render again to upload the now-loaded textures. + application.SendNotification(); + application.Render( 0 ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + + //Test to see if the object has not been loaded, as expected. + Matrix scaleMatrix; + DALI_TEST_CHECK( ! gl.GetUniformValue( "uObjectMatrix", scaleMatrix ) ); + + controlRenderer.SetOffStage( actor ); + DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + + END_TEST; +} + +//Test if mesh renderer handles the case of being passed invalid material and images urls. +int UtcDaliRendererFactoryGetMeshRendererN2(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetMeshRendererN2: Request mesh renderer with invalid material and images urls" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + //Set up renderer properties. + Property::Map propertyMap; + propertyMap.Insert( "rendererType", "mesh" ); + propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME ); + propertyMap.Insert( "materialUrl", "invalid" ); + propertyMap.Insert( "texturesPath", "also invalid" ); + + ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + DALI_TEST_CHECK( controlRenderer ); + + //Add renderer to an actor on stage. + Actor actor = Actor::New(); + actor.SetSize( 200.f, 200.f ); + Stage::GetCurrent().Add( actor ); + controlRenderer.SetSize( Vector2( 200.f, 200.f ) ); + controlRenderer.SetOnStage( actor ); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + //Attempt to render to queue resource load requests. + application.SendNotification(); + application.Render( 0 ); + + //Tell the platform abstraction that the required resources have been loaded. + TestPlatformAbstraction& platform = application.GetPlatform(); + platform.SetAllResourceRequestsAsLoaded(); + + //Render again to upload the now-loaded textures. + application.SendNotification(); + application.Render( 0 ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + + //Test to see if the object has not been loaded, as expected. + Matrix scaleMatrix; + DALI_TEST_CHECK( ! gl.GetUniformValue( "uObjectMatrix", scaleMatrix ) ); + + controlRenderer.SetOffStage( actor ); + DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + + END_TEST; +} + +//Test if mesh renderer handles the case of being passed an invalid object url +int UtcDaliRendererFactoryGetMeshRendererN3(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryGetMeshRendererN3: Request mesh renderer with invalid object url" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + //Set up renderer properties. + Property::Map propertyMap; + propertyMap.Insert( "rendererType", "mesh" ); + propertyMap.Insert( "objectUrl", "invalid" ); + propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME ); + propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" ); + + ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + DALI_TEST_CHECK( controlRenderer ); + + //Add renderer to an actor on stage. + Actor actor = Actor::New(); + actor.SetSize( 200.f, 200.f ); + Stage::GetCurrent().Add( actor ); + controlRenderer.SetSize( Vector2( 200.f, 200.f ) ); + controlRenderer.SetOnStage( actor ); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + //Attempt to render to queue resource load requests. + application.SendNotification(); + application.Render( 0 ); + + //Tell the platform abstraction that the required resources have been loaded. + TestPlatformAbstraction& platform = application.GetPlatform(); + platform.SetAllResourceRequestsAsLoaded(); + + //Render again to upload the now-loaded textures. + application.SendNotification(); + application.Render( 0 ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + + //Test to see if the object has not been loaded, as expected. + Matrix scaleMatrix; + DALI_TEST_CHECK( ! gl.GetUniformValue( "uObjectMatrix", scaleMatrix ) ); + + controlRenderer.SetOffStage( actor ); + DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + + END_TEST; +} + +int UtcDaliRendererFactoryResetRenderer1(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryResetRenderer1" ); + + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED ); + DALI_TEST_CHECK( controlRenderer ); + + Actor actor = Actor::New(); + TestControlRendererRender( application, actor, controlRenderer ); + + Vector4 actualValue(Vector4::ZERO); + TestGlAbstraction& gl = application.GetGlAbstraction(); + DALI_TEST_CHECK( gl.GetUniformValue( "mixColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION ); + + factory.ResetRenderer( controlRenderer, actor, Color::GREEN ); + application.SendNotification(); + application.Render(0); + DALI_TEST_CHECK( gl.GetUniformValue( "mixColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION ); + + Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) ); + factory.ResetRenderer( controlRenderer, actor, bufferImage ); + + Actor actor2 = Actor::New(); + actor2.SetSize(200.f, 200.f); + Stage::GetCurrent().Add( actor2 ); + controlRenderer.SetSize(Vector2(200.f, 200.f)); + controlRenderer.SetOnStage( actor2 ); + application.SendNotification(); + application.Render(0); + + END_TEST; +} + +int UtcDaliRendererFactoryResetRenderer2(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryResetRenderer2" ); + + Actor actor = Actor::New(); + actor.SetSize(200.f, 200.f); + Stage::GetCurrent().Add( actor ); + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + Image resourceImage = ResourceImage::New(TEST_IMAGE_FILE_NAME); + ControlRenderer controlRenderer = factory.GetControlRenderer( resourceImage ); + DALI_TEST_CHECK( controlRenderer ); + controlRenderer.SetSize(Vector2(200.f, 200.f)); + controlRenderer.SetOnStage( actor ); + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + application.SendNotification(); + application.Render(0); + + Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) ); + factory.ResetRenderer( controlRenderer, actor, bufferImage ); + application.SendNotification(); + application.Render(0); + + factory.ResetRenderer( controlRenderer, actor, Color::RED ); + + Actor actor2 = Actor::New(); + actor2.SetSize(200.f, 200.f); + Stage::GetCurrent().Add( actor2 ); + controlRenderer.SetSize(Vector2(200.f, 200.f)); + controlRenderer.SetOnStage( actor2 ); + TestGlAbstraction& gl = application.GetGlAbstraction(); + application.SendNotification(); + application.Render(0); + Vector4 actualValue(Vector4::ZERO); + DALI_TEST_CHECK( gl.GetUniformValue( "mixColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliRendererFactoryResetRenderer3(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryResetRenderer3" ); + + Actor actor = Actor::New(); + actor.SetSize(200.f, 200.f); + Stage::GetCurrent().Add( actor ); + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + // Get renderer for rendering a resource image + Image resourceImage = ResourceImage::New(TEST_IMAGE_FILE_NAME); + ControlRenderer controlRenderer = factory.GetControlRenderer( resourceImage ); + DALI_TEST_CHECK( controlRenderer ); + controlRenderer.SetSize(Vector2(200.f, 200.f)); + controlRenderer.SetOnStage( actor ); + application.SendNotification(); + application.Render(); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + // reset the renderer to renderer a svg image + factory.ResetRenderer( controlRenderer, actor, TEST_SVG_FILE_NAME, ImageDimensions( 100, 100 ) ); + application.SendNotification(); + application.Render(); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + EventThreadCallback* eventTrigger = EventThreadCallback::Get(); + CallbackBase* callback = eventTrigger->GetCallback(); + + eventTrigger->WaitingForTrigger( 1 );// waiting until the svg image is rasterized. + CallbackBase::Execute( *callback ); + + END_TEST; +} + +//Test resetting mesh and primitive shape renderers +int UtcDaliRendererFactoryResetRenderer4(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliRendererFactoryResetRenderer4: Mesh and primitive renderers" ); + + Actor actor = Actor::New(); + actor.SetSize( 200.f, 200.f ); + Stage::GetCurrent().Add( actor ); + RendererFactory factory = RendererFactory::Get(); + DALI_TEST_CHECK( factory ); + + Property::Map map; + + //****** + + //Start with basic color renderer + ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED ); + DALI_TEST_CHECK( controlRenderer ); + + TestControlRendererRender( application, actor, controlRenderer ); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + //Ensure set correctly. + Vector4 actualValue( Vector4::ZERO ); + TestGlAbstraction& gl = application.GetGlAbstraction(); + DALI_TEST_CHECK( gl.GetUniformValue( "mixColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION ); + + //****** + + //Reset to mesh renderer + map.Insert( "rendererType", "mesh" ); + map.Insert( "objectUrl", TEST_OBJ_FILE_NAME ); + map.Insert( "materialUrl", TEST_MTL_FILE_NAME ); + map.Insert( "texturesPath", TEST_RESOURCE_DIR "/" ); + factory.ResetRenderer( controlRenderer, actor, map ); + application.SendNotification(); + application.Render( 0 ); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + //Tell the platform abstraction that the required resources have been loaded. + TestPlatformAbstraction& platform = application.GetPlatform(); + platform.SetAllResourceRequestsAsLoaded(); + + //Render again to upload the now-loaded textures. + application.SendNotification(); + application.Render( 0 ); + + //Ensure set correctly. + controlRenderer.CreatePropertyMap( map ); + DALI_TEST_EQUALS( map.Find( "objectUrl", Property::STRING )->Get(), TEST_OBJ_FILE_NAME, TEST_LOCATION ); + + Matrix testScaleMatrix; + testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) ); + Matrix actualScaleMatrix; + + //Test to see if the object has been successfully loaded. + DALI_TEST_CHECK( gl.GetUniformValue( "uObjectMatrix", actualScaleMatrix ) ); + DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION ); + + //****** + + //Reset back to color renderer + factory.ResetRenderer( controlRenderer, actor, Color::GREEN ); + application.SendNotification(); + application.Render( 0 ); + + DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + + //Ensure set correctly. + DALI_TEST_CHECK( gl.GetUniformValue( "mixColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION ); + + //****** + + END_TEST; +}