[3.0] Remove/move experimental features
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-Image.cpp
index cf192fd..a686651 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -18,7 +18,8 @@
 #include <iostream>
 #include <algorithm>
 #include <stdlib.h>
-#include <dali/dali.h>
+#include <dali/public-api/dali-core.h>
+#include <dali/integration-api/bitmap.h>
 #include <dali-test-suite-utils.h>
 #include <test-native-image.h>
 
@@ -36,659 +37,29 @@ void utc_dali_image_cleanup(void)
 
 static const char* gTestImageFilename = "icon_wrt.png";
 
-
-// 1.1
-int UtcDaliImageNew01(void)
-{
-  TestApplication application;
-
-  tet_infoline("UtcDaliImageNew01 - Image::New(const std::string&)");
-
-  // invoke default handle constructor
-  Image image;
-
-  DALI_TEST_CHECK( !image );
-
-  // initialise handle
-  image = Image::New(gTestImageFilename);
-
-  DALI_TEST_CHECK( image );
-  END_TEST;
-}
-
-// 1.2
-int UtcDaliImageNew02(void)
-{
-  TestApplication application;
-
-  tet_infoline("UtcDaliImageNew02 - Image::New(const std::string&, const ImageAttributes&)");
-
-  // invoke default handle constructor
-  Image image;
-
-  DALI_TEST_CHECK( !image );
-
-  // initialise handle
-  Dali::ImageAttributes imageAttributes;
-  imageAttributes.SetSize(128, 256);
-  imageAttributes.SetScalingMode(Dali::ImageAttributes::FitHeight);
-  image = Image::New(gTestImageFilename, imageAttributes);
-
-  DALI_TEST_CHECK( image );
-  END_TEST;
-}
-
-// 1.3
-int UtcDaliImageNew03(void)
-{
-  TestApplication application;
-
-  tet_infoline("UtcDaliImageNew03 - Image::New(NativeImage&)");
-
-  // invoke default handle constructor
-  Image image;
-  TestNativeImagePointer nativeImage = TestNativeImage::New(16, 16);
-
-  DALI_TEST_CHECK( !image );
-
-  // initialise handle
-  image = Image::New(*(nativeImage.Get()));
-
-  DALI_TEST_CHECK( image );
-  END_TEST;
-}
-
-// 1.4
-int UtcDaliImageNewWithPolicies01(void)
-{
-  TestApplication application;
-
-  // testing delayed loading
-  tet_infoline("UtcDaliImageNewWithPolicies01 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Never");
-  DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-  Image image = Image::New(gTestImageFilename, Image::OnDemand, Image::Never);
-
-  DALI_TEST_CHECK( image );
-
-  application.SendNotification();
-  application.Render(16);
-
-  // request file loading only when actor added to stage
-  DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  ImageActor actor = ImageActor::New(image);
-
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render(16);
-
-  DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  // testing ReleasePolicy::Never
-  // fake loading image
-  std::vector<GLuint> ids;
-  ids.push_back( 23 );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
-  Integration::ResourcePointer resource(bitmap);
-  bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
-
-  if(request)
-  {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
-  }
-  application.Render(16);
-  application.SendNotification();
-
-  DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
-
-  // never discard texture
-  Stage::GetCurrent().Remove(actor);
-  application.Render(16);
-  application.SendNotification();
-  application.Render(16);
-  application.SendNotification();
-  DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
-  END_TEST;
-}
-
-// 1.5
-int UtcDaliImageNewWithPolicies02(void)
-{
-  TestApplication application;
-
-  // testing resource deletion when taken off stage
-  tet_infoline("UtcDaliImageNewWithPolicies02 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Unused");
-
-  Image image = Image::New(gTestImageFilename, Image::OnDemand, Image::Unused);
-
-  DALI_TEST_CHECK( image );
-
-  application.SendNotification();
-  application.Render(16);
-
-  // request file loading only when actor added to stage
-  DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  ImageActor actor = ImageActor::New(image);
-
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render(16);
-
-  DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  // testing ReleasePolicy::Unused
-  // fake loading image
-  std::vector<GLuint> ids;
-  ids.push_back( 23 );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
-  Integration::ResourcePointer resource(bitmap);
-  bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
-
-  if(request)
-  {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
-  }
-  application.Render(16);
-  application.SendNotification();
-
-  DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
-
-  // discard texture when actor comes off stage
-  Stage::GetCurrent().Remove(actor);
-  application.Render(16);
-  application.SendNotification();
-  application.Render(16);
-  application.SendNotification();
-  DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
-  END_TEST;
-}
-
-// 1.6
-int UtcDaliImageNewWithPolicies03(void)
-{
-  TestApplication application;
-
-  // load immediately -> resource deletion when taken off stage -> put actor back on stage -> load resource again
-  tet_infoline("UtcDaliImageNewWithPolicies03 - Load image with LoadPolicy::Immediate, ReleasePolicy::Unused");
-
-  Image image = Image::New(gTestImageFilename, Image::Immediate, Image::Unused);
-
-  DALI_TEST_CHECK( image );
-
-  application.SendNotification();
-  application.Render(16);
-
-  // request file loading immediately
-  DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  ImageActor actor = ImageActor::New(image);
-
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render(16);
-
-  // testing ReleasePolicy::Unused
-  // fake loading image
-  std::vector<GLuint> ids;
-  ids.push_back( 23 );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
-  Integration::ResourcePointer resource(bitmap);
-  bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
-
-  if(request)
-  {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
-  }
-  application.Render(16);
-  application.SendNotification();
-
-  DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
-
-  // discard texture when actor comes off stage
-  Stage::GetCurrent().Remove(actor);
-  application.Render(16);
-  application.SendNotification();
-  application.Render(16);
-  application.SendNotification();
-  DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
-
-  // check load request when actor added back to stage
-  application.GetPlatform().ResetTrace();
-
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render(16);
-  application.SendNotification();
-  application.Render(16);
-
-  DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-  END_TEST;
-}
-
-// 1.7
-int UtcDaliImageNewWithPolicies04(void)
-{
-  TestApplication application;
-
-  // load immediately, don't release texture when off stage
-  tet_infoline("UtcDaliImageNewWithPolicies03 - Load image with LoadPolicy::Immediate, ReleasePolicy::Never");
-
-  Image image = Image::New(gTestImageFilename, Image::Immediate, Image::Never);
-
-  DALI_TEST_CHECK( image );
-
-  application.SendNotification();
-  application.Render(16);
-
-  // request file loading immediately
-  DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  ImageActor actor = ImageActor::New(image);
-
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render(16);
-
-  // testing ReleasePolicy::Never
-  // fake loading image
-  std::vector<GLuint> ids;
-  ids.push_back( 23 );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
-  Integration::ResourcePointer resource(bitmap);
-  bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
-
-  if(request)
-  {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
-  }
-  application.Render(16);
-  application.SendNotification();
-
-  DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
-
-  // texture is not discarded
-  Stage::GetCurrent().Remove(actor);
-  application.Render(16);
-  application.SendNotification();
-  application.Render(16);
-  application.SendNotification();
-  DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
-
-  // no load request when actor added back to stage
-  application.GetPlatform().ResetTrace();
-
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render(16);
-  application.SendNotification();
-  application.Render(16);
-
-  DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-  END_TEST;
-}
-
-// 1.8
-int UtcDaliImageNewDistanceField(void)
-{
-  TestApplication application;
-
-  tet_infoline("UtcDaliImageNewDistanceField - Image::NewDistanceField(const std::string&)");
-
-  // invoke default handle constructor
-  Image image;
-
-  DALI_TEST_CHECK( !image );
-
-  // initialise handle
-  image = Image::NewDistanceField(gTestImageFilename);
-
-  DALI_TEST_CHECK( image );
-  END_TEST;
-}
-
-// 1.9
-int UtcDaliImageNewDistanceFieldWithPolicies01(void)
-{
-  TestApplication application;
-
-  // testing delayed loading
-  tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies01 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Never");
-  DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-  Image image = Image::NewDistanceField(gTestImageFilename, Image::OnDemand, Image::Never);
-
-  DALI_TEST_CHECK( image );
-
-  application.SendNotification();
-  application.Render(16);
-
-  // request file loading only when actor added to stage
-  DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  ImageActor actor = ImageActor::New(image);
-
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render(16);
-
-  DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  // testing ReleasePolicy::Never
-  // fake loading image
-  std::vector<GLuint> ids;
-  ids.push_back( 23 );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
-  Integration::ResourcePointer resource(bitmap);
-  bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
-
-  if(request)
-  {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
-  }
-  application.Render(16);
-  application.SendNotification();
-
-  DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
-
-  // never discard texture
-  Stage::GetCurrent().Remove(actor);
-  application.Render(16);
-  application.SendNotification();
-  application.Render(16);
-  application.SendNotification();
-  DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
-  END_TEST;
-}
-
-// 1.10
-int UtcDaliImageNewDistanceFieldWithPolicies02(void)
-{
-  TestApplication application;
-
-  // testing resource deletion when taken off stage
-  tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies02 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Unused");
-
-  Image image = Image::NewDistanceField(gTestImageFilename, Image::OnDemand, Image::Unused);
-
-  DALI_TEST_CHECK( image );
-
-  application.SendNotification();
-  application.Render(16);
-
-  // request file loading only when actor added to stage
-  DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  ImageActor actor = ImageActor::New(image);
-
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render(16);
-
-  DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  // testing ReleasePolicy::Unused
-  // fake loading image
-  std::vector<GLuint> ids;
-  ids.push_back( 23 );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
-  Integration::ResourcePointer resource(bitmap);
-  bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
-
-  if(request)
-  {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
-  }
-  application.Render(16);
-  application.SendNotification();
-
-  DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
-
-  // discard texture when actor comes off stage
-  Stage::GetCurrent().Remove(actor);
-  application.Render(16);
-  application.SendNotification();
-  application.Render(16);
-  application.SendNotification();
-  DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
-  END_TEST;
-}
-
-// 1.11
-int UtcDaliImageNewDistanceFieldWithPolicies03(void)
-{
-  TestApplication application;
-
-  // load immediately -> resource deletion when taken off stage -> put actor back on stage -> load resource again
-  tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies03 - Load image with LoadPolicy::Immediate, ReleasePolicy::Unused");
-
-  Image image = Image::NewDistanceField(gTestImageFilename, Image::Immediate, Image::Unused);
-
-  DALI_TEST_CHECK( image );
-
-  application.SendNotification();
-  application.Render(16);
-
-  // request file loading immediately
-  DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  ImageActor actor = ImageActor::New(image);
-
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render(16);
-
-  // testing ReleasePolicy::Unused
-  // fake loading image
-  std::vector<GLuint> ids;
-  ids.push_back( 23 );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
-  Integration::ResourcePointer resource(bitmap);
-  bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
-
-  if(request)
-  {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
-  }
-  application.Render(16);
-  application.SendNotification();
-
-  DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
-
-  // discard texture when actor comes off stage
-  Stage::GetCurrent().Remove(actor);
-  application.Render(16);
-  application.SendNotification();
-  application.Render(16);
-  application.SendNotification();
-  DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
-
-  // check load request when actor added back to stage
-  application.GetPlatform().ResetTrace();
-
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render(16);
-  application.SendNotification();
-  application.Render(16);
-
-  DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-  END_TEST;
-}
-
-// 1.12
-int UtcDaliImageNewDistanceFieldWithPolicies04(void)
-{
-  TestApplication application;
-
-  // load immediately, don't release texture when off stage
-  tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies04 - Load image with LoadPolicy::Immediate, ReleasePolicy::Never");
-
-  Image image = Image::NewDistanceField(gTestImageFilename, Image::Immediate, Image::Never);
-
-  DALI_TEST_CHECK( image );
-
-  application.SendNotification();
-  application.Render(16);
-
-  // request file loading immediately
-  DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  ImageActor actor = ImageActor::New(image);
-
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render(16);
-
-  // testing ReleasePolicy::Never
-  // fake loading image
-  std::vector<GLuint> ids;
-  ids.push_back( 23 );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
-  Integration::ResourcePointer resource(bitmap);
-  bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
-
-  if(request)
-  {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
-  }
-  application.Render(16);
-  application.SendNotification();
-
-  DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
-
-  // texture is not discarded
-  Stage::GetCurrent().Remove(actor);
-  application.Render(16);
-  application.SendNotification();
-  application.Render(16);
-  application.SendNotification();
-  DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
-
-  // no load request when actor added back to stage
-  application.GetPlatform().ResetTrace();
-
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render(16);
-  application.SendNotification();
-  application.Render(16);
-
-  DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-  END_TEST;
-}
-
-// 1.13
-int UtcDaliImageNewDistanceFieldWithAttributes(void)
+namespace
 {
-  TestApplication application;
-
-  tet_infoline("UtcDaliImageNewDistanceFieldWithAttributes - Image::NewDistanceField(const std::string&, const ImageAttributes& attributes)");
-
-  // invoke default handle constructor
-  Image image;
-  Dali::ImageAttributes imageAttributes = Dali::ImageAttributes::NewDistanceField(6.0f, 12);
-
-  DALI_TEST_CHECK( !image );
-
-  // initialise handle
-  image = Image::NewDistanceField(gTestImageFilename, imageAttributes);
-
-  DALI_TEST_CHECK( image );
-  END_TEST;
-}
-
-// 1.14
-int UtcDaliImageNewDistanceFieldWithAttrandPol(void)
+void LoadBitmapResource(TestPlatformAbstraction& platform)
 {
-  TestApplication application;
-
-  tet_infoline("UtcDaliImageNewDistanceFieldWithAttrandPol - Load image with LoadPolicy::OnDemand, ReleasePolicy::Unused");
-
-  Dali::ImageAttributes imageAttributes = Dali::ImageAttributes::NewDistanceField(6.0f, 12);
-
-  Image image = Image::NewDistanceField(gTestImageFilename, imageAttributes, Image::OnDemand, Image::Unused);
-
-  DALI_TEST_CHECK( image );
-
-  application.SendNotification();
-  application.Render(16);
-
-  // request file loading only when actor added to stage
-  DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  ImageActor actor = ImageActor::New(image);
-
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render(16);
-
-  DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
-
-  // testing ReleasePolicy::Unused
-  // fake loading image
-  std::vector<GLuint> ids;
-  ids.push_back( 23 );
-  application.GetGlAbstraction().SetNextTextureIds( ids );
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
+  Integration::ResourceRequest* request = platform.GetRequest();
+  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD );
   Integration::ResourcePointer resource(bitmap);
   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
 
   if(request)
   {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
+    platform.SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
   }
-  application.Render(16);
-  application.SendNotification();
-
-  DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
+}
 
-  // discard texture when actor comes off stage
-  Stage::GetCurrent().Remove(actor);
-  application.Render(16);
-  application.SendNotification();
-  application.Render(16);
-  application.SendNotification();
-  DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
-  END_TEST;
 }
 
-// 1.15
 int UtcDaliImageDownCast(void)
 {
   TestApplication application;
   tet_infoline("Testing Dali::Image::DownCast()");
 
-  Image image = Image::New(gTestImageFilename);
+  Image image = ResourceImage::New(gTestImageFilename);
 
   BaseHandle object(image);
 
@@ -707,146 +78,34 @@ int UtcDaliImageDownCast(void)
   END_TEST;
 }
 
-// 1.16
-int UtcDaliImageGetImageSize(void)
+int UtcDaliImageGetWidthHeight(void)
 {
   TestApplication application;
-  TestPlatformAbstraction& platform = application.GetPlatform();
 
-  tet_infoline("UtcDaliImageGetImageSize - Image::GetImageSize()");
+  tet_infoline("UtcDaliImageGetWidthHeight - Image::GetWidth() & Image::GetHeight");
 
   Vector2 testSize(8.0f, 16.0f);
-  platform.SetClosestImageSize(testSize);
-
-  Vector2 size = Image::GetImageSize(gTestImageFilename);
-
-  DALI_TEST_CHECK( application.GetPlatform().GetTrace().FindMethod("GetClosestImageSize"));
-  DALI_TEST_EQUALS( size, testSize, TEST_LOCATION);
-  END_TEST;
-}
-
-// 1.17
-int UtcDaliImageGetFilename(void)
-{
-  TestApplication application;
-
-  tet_infoline("UtcDaliImageGetFilename");
-
-  // invoke default handle constructor
-  Image image;
-
-  DALI_TEST_CHECK( !image );
-
-  // initialise handle
-  image = Image::New(gTestImageFilename);
-
-  DALI_TEST_EQUALS( image.GetFilename(), gTestImageFilename, TEST_LOCATION);
-  END_TEST;
-}
-
-// 1.18
-int UtcDaliImageGetLoadingState01(void)
-{
-  TestApplication application;
-  tet_infoline("UtcDaliImageGetLoadingState01");
-
-  Image image = Image::New(gTestImageFilename);
-  DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoading);
-  application.SendNotification();
-  application.Render(16);
-
-  // simulate load success
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
-  Integration::ResourcePointer resource(bitmap);
-  bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
-
-  if(request)
-  {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
-  }
-  application.Render(16);
-  application.SendNotification();
-
-  // Test state == ResourceLoadingSucceeded
-  DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoadingSucceeded);
-  END_TEST;
-}
-
-// 1.19
-int UtcDaliImageGetLoadingState02(void)
-{
-  TestApplication application;
-
-  tet_infoline("UtcDaliImageGetLoadingState02");
-
-  // invoke default handle constructor
-  Image image;
-
-  DALI_TEST_CHECK( !image );
-
-  // initialise handle
-  image = Image::New(gTestImageFilename);
-
-  // Test state == ResourceLoading
-  DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoading);
-  application.SendNotification();
-  application.Render(16);
-
-  // simulate load failure
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  if(request)
-  {
-    application.GetPlatform().SetResourceLoadFailed(request->GetId(), Integration::FailureUnknown);
-  }
-  application.Render(16);
-  application.SendNotification();
-
-  // Test state == ResourceLoadingFailed
-  DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoadingFailed);
-  END_TEST;
-}
-
-// 1.20
-int UtcDaliImageGetReleasePolicy(void)
-{
-  TestApplication application;
-
-  tet_infoline("UtcDaliImageGetReleasePolicy");
-
-  Image image = Image::New(gTestImageFilename, Image::Immediate, Image::Unused);
-
-  DALI_TEST_CHECK( image );
-
-  DALI_TEST_CHECK( Image::Unused == image.GetReleasePolicy() );
-
-  END_TEST;
-}
-
-// 1.21
-int UtcDaliImageGetLoadPolicy(void)
-{
-  TestApplication application;
+  application.GetPlatform().SetClosestImageSize(testSize);
+  Image image1 = ResourceImage::New(gTestImageFilename);
+  DALI_TEST_EQUALS( image1.GetWidth(), testSize.width, TEST_LOCATION );
+  DALI_TEST_EQUALS( image1.GetHeight(), testSize.height, TEST_LOCATION );
 
-  tet_infoline("UtcDaliImageGetLoadPolicy");
+  Image image2 = ResourceImage::New( gTestImageFilename, ImageDimensions(128, 256), FittingMode::SCALE_TO_FILL, SamplingMode::DEFAULT );
+  DALI_TEST_EQUALS( image2.GetWidth(), 128u, TEST_LOCATION );
+  DALI_TEST_EQUALS( image2.GetHeight(), 256u, TEST_LOCATION );
 
-  Image image = Image::New(gTestImageFilename, Image::OnDemand, Image::Never);
+  Image image3 = FrameBufferImage::New(16, 32);
+  DALI_TEST_EQUALS(image3.GetWidth(), 16u, TEST_LOCATION);
+  DALI_TEST_EQUALS(image3.GetHeight(), 32u, TEST_LOCATION);
 
-  DALI_TEST_CHECK( image );
+  TestNativeImagePointer nativeImage = TestNativeImage::New(32, 64);
+  Image image4 = NativeImage::New(*(nativeImage.Get()));
+  DALI_TEST_EQUALS(image4.GetWidth(), 32u, TEST_LOCATION);
+  DALI_TEST_EQUALS(image4.GetHeight(), 64u, TEST_LOCATION);
 
-  DALI_TEST_CHECK( Image::OnDemand == image.GetLoadPolicy());
   END_TEST;
 }
 
-static bool SignalLoadFlag = false;
-
-static void SignalLoadHandler(Image image)
-{
-  tet_infoline("Received image load finished signal");
-
-  SignalLoadFlag = true;
-}
-
 static bool SignalUploadedFlag = false;
 
 static void SignalUploadedHandler(Image image)
@@ -856,46 +115,17 @@ static void SignalUploadedHandler(Image image)
   SignalUploadedFlag = true;
 }
 
-// 1.22
-int UtcDaliImageSignalLoadingFinished(void)
-{
-  TestApplication application;
-
-  tet_infoline("UtcDaliImageSignalLoadingFinished");
-
-  SignalLoadFlag = false;
-
-  Image image = Image::New(gTestImageFilename);
-
-  image.LoadingFinishedSignal().Connect( SignalLoadHandler );
-  application.SendNotification();
-  application.Render(16);
-
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  if(request)
-  {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true)));
-  }
-
-  application.Render(16);
-  application.SendNotification();
-
-  DALI_TEST_CHECK( SignalLoadFlag == true );
-  END_TEST;
-}
-
-// 1.23
 int UtcDaliImageSignalUploaded(void)
 {
   TestApplication application;
+  TestPlatformAbstraction& platform = application.GetPlatform();
   tet_infoline("UtcDaliImageSignalUploaded - Image::SignalUploaded()");
 
   // set up image in fake platform abstraction
   Vector2 testSize(80.0f, 80.0f);
-  application.GetPlatform().SetClosestImageSize(testSize);
+  platform.SetClosestImageSize(testSize);
 
-  Image image = Image::New(gTestImageFilename);
-  image.LoadingFinishedSignal().Connect( SignalLoadHandler );
+  ResourceImage image = ResourceImage::New(gTestImageFilename);
 
   // Load image
   application.SendNotification();
@@ -903,23 +133,24 @@ int UtcDaliImageSignalUploaded(void)
   std::vector<GLuint> ids;
   ids.push_back( 23 );
   application.GetGlAbstraction().SetNextTextureIds( ids );
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
+  Integration::ResourceRequest* request = platform.GetRequest();
+  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD );
   Integration::ResourcePointer resource(bitmap);
   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
+
   if(request)
   {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
+    platform.SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
   }
   application.Render(16);
   application.SendNotification();
 
   image.UploadedSignal().Connect( SignalUploadedHandler );
 
-  Dali::ImageActor imageActor = ImageActor::New(image);
-  Stage::GetCurrent().Add(imageActor);
-  imageActor.SetSize(80, 80);
-  imageActor.SetVisible(true);
+  Dali::Actor actor = CreateRenderableActor( image );
+  Stage::GetCurrent().Add( actor );
+  actor.SetSize(80, 80);
+  actor.SetVisible(true);
 
   application.SendNotification();
   application.Render(0);
@@ -932,20 +163,25 @@ int UtcDaliImageSignalUploaded(void)
   application.Render(16);
   application.SendNotification();
 
-  DALI_TEST_CHECK( SignalLoadFlag == true );
   DALI_TEST_CHECK( SignalUploadedFlag == true );
-  SignalLoadFlag = false;
   SignalUploadedFlag = false;
 
   image.Reload();
   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 160, 160, 160, 160);
 
+  // image loading
   application.SendNotification();
   application.Render(16);
   application.Render(16);
   application.SendNotification();
-  DALI_TEST_CHECK( SignalLoadFlag == true );
 
+  request = platform.GetRequest();
+  if(request)
+  {
+    platform.SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
+  }
+
+  //upload
   application.Render(16);
   application.SendNotification();
   application.Render(16);
@@ -954,15 +190,13 @@ int UtcDaliImageSignalUploaded(void)
   END_TEST;
 }
 
-
-// 1.24
 int UtcDaliImageDiscard01(void)
 {
   TestApplication application;
   tet_infoline("UtcDaliImageDiscard01 - no actors");
 
   {
-    Image image = Image::New(gTestImageFilename);
+    Image image = ResourceImage::New(gTestImageFilename);
 
     // Load image
     application.SendNotification();
@@ -970,14 +204,8 @@ int UtcDaliImageDiscard01(void)
     std::vector<GLuint> ids;
     ids.push_back( 23 );
     application.GetGlAbstraction().SetNextTextureIds( ids );
-    Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-    Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
-    Integration::ResourcePointer resource(bitmap);
-    bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
-    if(request)
-    {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
-    }
+    TestPlatformAbstraction& platform = application.GetPlatform();
+    LoadBitmapResource( platform );
     application.Render(16);
     application.SendNotification();
   } // Drop image handle
@@ -994,18 +222,18 @@ int UtcDaliImageDiscard01(void)
   END_TEST;
 }
 
-// 1.25
 int UtcDaliImageDiscard02(void)
 {
   TestApplication application;
+  application.GetGlAbstraction().EnableTextureCallTrace( true );
   tet_infoline("UtcDaliImageDiscard02 - one actor, tests TextureCache::DiscardTexture");
 
   {
     {
-      ImageActor actor;
+      Actor actor;
       {
-        Image image = Image::New(gTestImageFilename);
-        actor = ImageActor::New(image);
+        Image image = ResourceImage::New(gTestImageFilename, ImageDimensions( 40, 30 ) );
+        actor = CreateRenderableActor(image);
         Stage::GetCurrent().Add(actor);
 
         application.SendNotification();
@@ -1015,16 +243,11 @@ int UtcDaliImageDiscard02(void)
         ids.push_back( 23 );
         application.GetGlAbstraction().SetNextTextureIds( ids );
 
-        Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-        Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
-        Integration::ResourcePointer resource(bitmap);
-        bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
-        if(request)
-        {
-          application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
-        }
+        TestPlatformAbstraction& platform = application.GetPlatform();
+        LoadBitmapResource( platform );
         application.Render(16);
         application.SendNotification();
+        DALI_TEST_CHECK( application.GetGlAbstraction().GetTextureTrace().FindMethod("BindTexture") );
       } // lose image handle, actor should still keep one
       application.SendNotification();
       application.Render(16);
@@ -1048,14 +271,16 @@ int UtcDaliImageDiscard02(void)
   END_TEST;
 }
 
-// 1.26
 int UtcDaliImageDiscard03(void)
 {
   TestApplication application;
   tet_infoline("UtcDaliImageDiscard03 - one actor, tests TextureCache::RemoveObserver");
 
-  Image image = Image::New(gTestImageFilename);
-  ImageActor actor = ImageActor::New(image);
+  const Vector2 closestImageSize( 1, 1);
+  application.GetPlatform().SetClosestImageSize(closestImageSize);
+
+  Image image = ResourceImage::New(gTestImageFilename);
+  Actor actor = CreateRenderableActor(image);
   Stage::GetCurrent().Add(actor);
 
   application.SendNotification();
@@ -1065,14 +290,8 @@ int UtcDaliImageDiscard03(void)
   ids.push_back( 23 );
   application.GetGlAbstraction().SetNextTextureIds( ids );
 
-  Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
-  Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
-  Integration::ResourcePointer resource(bitmap);
-  bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
-  if(request)
-  {
-    application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
-  }
+  TestPlatformAbstraction& platform = application.GetPlatform();
+  LoadBitmapResource( platform );
   application.Render(16);
   application.SendNotification();
   application.SendNotification();
@@ -1093,3 +312,79 @@ int UtcDaliImageDiscard03(void)
 
   END_TEST;
 }
+
+int UtcDaliImageContextLoss(void)
+{
+  TestApplication application; // Default config: DALI_DISCARDS_ALL_DATA
+
+  const Vector2 closestImageSize( 80, 80 );
+  TestPlatformAbstraction& platform = application.GetPlatform();
+  TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
+
+  platform.SetClosestImageSize(closestImageSize);
+
+  tet_infoline("UtcDaliImageContextLoss - Load image with LoadPolicy::Immediate, bitmap discard. Check that the image is re-requested on context regain\n");
+
+  Image image = ResourceImage::New("image.png");
+
+  DALI_TEST_CHECK( image );
+
+  application.SendNotification();
+  application.Render(16);
+
+  // request file loading immediately
+
+  DALI_TEST_CHECK( platform.WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
+  Actor actor = CreateRenderableActor(image);
+  Stage::GetCurrent().Add(actor);
+
+  application.SendNotification();
+  application.Render(16);
+
+  TraceCallStack& textureTrace = glAbstraction.GetTextureTrace();
+  textureTrace.Enable(true);
+
+  std::vector<GLuint> ids;
+  ids.push_back( 23 );
+  glAbstraction.SetNextTextureIds( ids );
+
+  LoadBitmapResource(platform);
+
+  application.Render(16);
+  application.SendNotification();
+
+  DALI_TEST_CHECK( textureTrace.FindMethod("GenTextures") );
+
+  textureTrace.Reset();
+  textureTrace.Enable(true);
+  platform.ResetTrace();
+  platform.EnableTrace(true);
+
+  // Lose & regain context (in render 'thread')
+  application.ResetContext();
+
+  application.GetCore().RecoverFromContextLoss(); // start the recovery process
+  application.SendNotification();
+
+  // Run update/render loop
+  application.Render(16);
+  application.SendNotification();
+
+  // Expect new load request
+  DALI_TEST_CHECK( platform.WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
+
+  // Finish loading image
+  LoadBitmapResource(platform);
+  ids.clear();
+  ids.push_back( 57 );
+  glAbstraction.SetNextTextureIds(ids);
+
+  // Run update/render loop
+  application.Render(16);
+  application.SendNotification();
+
+  // Expect new GenTextures
+  DALI_TEST_CHECK( textureTrace.FindMethod("GenTextures") );
+
+  END_TEST;
+}