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-ImageVisual.cpp;h=679721cb005ced2ab58f917cc1cfe1eee1749933;hp=1bd6203a5f7171cf2b1b0b618035b3d7034d3e7c;hb=refs%2Fchanges%2F38%2F159238%2F9;hpb=93833d2c76d1cab9da6fce404739e95e093da911 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ImageVisual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ImageVisual.cpp index 1bd6203..679721c 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ImageVisual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ImageVisual.cpp @@ -49,6 +49,7 @@ const char* TEST_REMOTE_IMAGE_FILE_NAME = "https://www.tizen.org/sites/all/theme const char* TEST_INVALID_FILE_NAME = TEST_RESOURCE_DIR "/invalid.jpg"; const char* TEST_REMOTE_INVALID_FILE_NAME = "https://www.tizen.org/invalid.png"; const char* TEST_MASK_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/mask.png"; +const char* TEST_ROTATED_IMAGE = TEST_RESOURCE_DIR "/keyboard-Landscape.jpg"; bool gResourceReadySignalFired = false; @@ -58,7 +59,6 @@ void ResourceReadySignal( Control control ) gResourceReadySignalFired = true; } - Actor CreateActorWithImageVisual(const Property::Map& map) { VisualFactory factory = VisualFactory::Get(); @@ -1683,40 +1683,199 @@ int UtcDaliImageVisualLoadPolicy02(void) int UtcDaliImageVisualLoadPolicy03(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualLoadPolicy03 Load a visual image before attaching to stage and receive ResourceReady signal" ); + tet_infoline( "UtcDaliImageVisualLoadPolicy03 Load a visual image and receive ResourceReady Signal when loaded" ); + + const bool VISUAL_NOT_ENABLED( false ); // Instead of just passing 'false' into an API. // Set up trace debug TestGlAbstraction& gl = application.GetGlAbstraction(); TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); + tet_infoline( "Create a control and connect to resource ready signal without adding to stage" ); + DummyControl actor = DummyControl::New(true); + actor.ResourceReadySignal().Connect( &ResourceReadySignal); + Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + actor.SetSize(200.f, 200.f); + tet_infoline( "Create visual with IMMEDIATE load policy" ); Visual::Base imageVisual = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, DevelImageVisual::Property::LOAD_POLICY, DevelImageVisual::LoadPolicy::IMMEDIATE ); - // Wait for image to load, ResourceReady signal will not be emitted until Visual is registered with a control and on stage. + tet_infoline( "Registering visual allows control to get a signal once loaded even if visual not enabled( not staged )" ); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual, VISUAL_NOT_ENABLED ); + imageVisual.Reset(); // reduce ref count so only the control keeps the visual alive. + + tet_infoline( "Allow image time to load resource" ); DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + application.SendNotification(); + application.Render(); // Ensure texture has been uploaded + DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); + DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliImageVisualLoadPolicy04(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliImageVisualLoadPolicy04 First part Load a visual image before attaching to stage"); + tet_infoline( "Second part, Reuse the same image in aonther control and check resource ready signal fired" ); + + const bool VISUAL_NOT_ENABLED( false ); // Instead of just passing false into an API. + + // Set up trace debug + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + tet_infoline( "Create a control and connect to resource ready signal" ); + DummyControl actor = DummyControl::New(true); + actor.ResourceReadySignal().Connect( &ResourceReadySignal); + Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + actor.SetSize(200.f, 200.f); + + tet_infoline( "Create visual with IMMEDIATE load policy" ); + Visual::Base imageVisual = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, DevelImageVisual::Property::LOAD_POLICY, DevelImageVisual::LoadPolicy::IMMEDIATE ); + + tet_infoline( "Registering visual allows control to get a signal once loaded even if visual not enabled( staged )" ); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual, VISUAL_NOT_ENABLED ); + imageVisual.Reset(); // reduce ref count so only the control keeps the visual alive. + + tet_infoline( "Allow image time to load" ); + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); application.SendNotification(); application.Render(); - tet_infoline( "Ensure texture loading starts after visual created" ); + tet_infoline( "Testing texture is loaded and resource ready signal fired" ); DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); - textureTrace.Reset(); + DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); - tet_infoline( "Register visuals with control and ensure it has the only handles" ); + tet_infoline( "Original control correctly signalled, now testing for signal with new Control reusing the image" ); + + gResourceReadySignalFired = false; // Reset signal check ready for testing next Control + Visual::Base imageVisual2 = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, DevelImageVisual::Property::LOAD_POLICY, DevelImageVisual::LoadPolicy::IMMEDIATE ); + DummyControl actor2 = DummyControl::New(true); + Impl::DummyControl& dummyImpl2 = static_cast(actor.GetImplementation()); + actor2.ResourceReadySignal().Connect( &ResourceReadySignal); + + tet_infoline( "Registering visual this should trigger the loading signal as is already image loaded for previous control" ); + dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual2 ); + imageVisual2.Reset(); // reduce ref count so only the control keeps the visual alive. + actor2.SetSize(200.f, 200.f); + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 0 ), true, TEST_LOCATION ); // Not expecting any further loading as texture is being reused. + DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliImageVisualLoadPolicy05(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliImageVisualLoadPolicy05 LoadPolicy::ATTACHED (default) First part Load a visual image before attaching to stage"); + tet_infoline( "Second part, Reuse the same image in aonther control and check resource ready signal fired" ); + // Set up trace debug + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + tet_infoline( "Create a control and connect to resource ready signal" ); DummyControl actor = DummyControl::New(true); actor.ResourceReadySignal().Connect( &ResourceReadySignal); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + actor.SetSize(200.f, 200.f); + Stage::GetCurrent().Add( actor ); - tet_infoline( "Registering visual attaches it to stage and trigger the loading signal if Image loaded" ); + tet_infoline( "Create visual with ATTACHED load policy" ); + Visual::Base imageVisual = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, DevelImageVisual::Property::LOAD_POLICY, DevelImageVisual::LoadPolicy::ATTACHED ); + + tet_infoline( "Registering visual allows control to get a signal once loaded" ); dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual ); imageVisual.Reset(); // reduce ref count so only the control keeps the visual alive. - actor.SetSize(200.f, 200.f); - // Adding the Control hence Visual to stage will cause the Visual to trigger ResourceReadySignal if the image is already loaded. - Stage::GetCurrent().Add( actor ); // If LoadPolicy was not IMMEDIATE then as this point (after attached to stage) the test would need to wait for Loading + tet_infoline( "Allow image time to load" ); + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + application.SendNotification(); + application.Render(); + + tet_infoline( "Testing texture is loaded and resource ready signal fired" ); + DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + tet_infoline( "Original control correctly signalled, now testing for signal with new Control reusing the image" ); + + gResourceReadySignalFired = false; // Reset signal check ready for testing next Control + Visual::Base imageVisual2 = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, DevelImageVisual::Property::LOAD_POLICY, DevelImageVisual::LoadPolicy::ATTACHED ); + DummyControl actor2 = DummyControl::New(true); + Impl::DummyControl& dummyImpl2 = static_cast(actor.GetImplementation()); + actor2.ResourceReadySignal().Connect( &ResourceReadySignal); + + tet_infoline( "Registering visual this should trigger the loading signal as is already image loaded for previous control" ); + dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual2 ); + imageVisual2.Reset(); // reduce ref count so only the control keeps the visual alive. + actor2.SetSize(200.f, 200.f); + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 0 ), true, TEST_LOCATION ); // Not expecting any further loading as texture is being reused. + DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + + END_TEST; +} + + +int UtcDaliImageVisualOrientationCorrection(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliImageVisualOrientationCorrection Enabling OrientationCorrection should rotate an image with exif (90deg) orientation data with requested" ); + + VisualFactory factory = VisualFactory::Get(); + tet_infoline( "Create visual with Orientation correction set OFF" ); + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE ); + propertyMap.Insert( ImageVisual::Property::URL, TEST_ROTATED_IMAGE ); + propertyMap.Insert( DevelImageVisual::Property::ORIENTATION_CORRECTION, false ); + Visual::Base imageVisual = factory.CreateVisual( propertyMap ); + + tet_infoline( "Create control for visual, need to loaded it" ); + DummyControl actor = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + Stage::GetCurrent().Add( actor ); + + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual ); + // Wait for image to load + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + Vector2 originalImageSize; + tet_infoline( "Get size of original visual to compare later with rotated image" ); + imageVisual.GetNaturalSize( originalImageSize ); + DALI_TEST_GREATER( originalImageSize.width, originalImageSize.height, TEST_LOCATION ); // Width and Height must be different for this test. + imageVisual.Reset(); // remove handle so can unregister it and remove from cache + dummyImpl.UnregisterVisual( DummyControl::Property::TEST_VISUAL ); + application.SendNotification(); + application.Render(); + + tet_infoline( "Create visual with Orientation correction set ON " ); + propertyMap.Clear(); + propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE ); + propertyMap.Insert( ImageVisual::Property::URL, TEST_ROTATED_IMAGE ); + propertyMap.Insert( DevelImageVisual::Property::ORIENTATION_CORRECTION, true ); + imageVisual = factory.CreateVisual( propertyMap ); + + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual ); + // Wait for image to load + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + Vector2 rotatedImageSize; + imageVisual.GetNaturalSize( rotatedImageSize ); + tet_infoline( "Confirm that visual has rotated" ); + DALI_TEST_EQUALS( originalImageSize.width, rotatedImageSize.height , TEST_LOCATION ); + DALI_TEST_EQUALS( originalImageSize.height, rotatedImageSize.width , TEST_LOCATION ); + + Property::Map resultMap; + imageVisual.CreatePropertyMap( resultMap ); + + // check the Property::ORIENTATION_CORRECTION value from the returned map + Property::Value* typeValue = resultMap.Find( DevelImageVisual::Property::ORIENTATION_CORRECTION, Property::BOOLEAN ); + DALI_TEST_EQUALS( typeValue->Get(), true, TEST_LOCATION ); + END_TEST; }