[dali_2.3.19] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-BubbleEmitter.cpp
index 412dd3f..41e8236 100644 (file)
@@ -1,28 +1,31 @@
-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Flora License, Version 1.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://floralicense.org/license/
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an AS IS BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
+/*
+ * Copyright (c) 2023 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
 
-#include <iostream>
 #include <stdlib.h>
+#include <iostream>
 
 // Need to override adaptor classes for toolkit test harness, so include
 // test harness headers before dali headers.
 #include <dali-toolkit-test-suite-utils.h>
 
-#include <dali.h>
 #include <dali-toolkit/dali-toolkit.h>
+#include <dali-toolkit/devel-api/controls/bubble-effect/bubble-emitter.h>
+#include <dali.h>
+#include <dali/public-api/rendering/renderer.h>
 
 using namespace Dali;
 using namespace Dali::Toolkit;
@@ -37,10 +40,8 @@ void utc_dali_toolkit_bubble_emitter_cleanup(void)
   test_return_value = TET_PASS;
 }
 
-
 namespace
 {
-
 const int RENDER_FRAME_INTERVAL = 16;
 
 static bool gObjectCreatedCallBackCalled;
@@ -62,7 +63,7 @@ static int Wait(ToolkitTestApplication& application, int duration = 0)
 {
   int time = 0;
 
-  for(int i = 0; i <= ( duration / RENDER_FRAME_INTERVAL); i++)
+  for(int i = 0; i <= (duration / RENDER_FRAME_INTERVAL); i++)
   {
     application.SendNotification();
     application.Render(RENDER_FRAME_INTERVAL);
@@ -72,33 +73,27 @@ static int Wait(ToolkitTestApplication& application, int duration = 0)
   return time;
 }
 
-static Image CreateSolidColorImage( ToolkitTestApplication& application, const Vector4& color, unsigned int width, unsigned int height )
+static Texture CreateSolidColorTexture(ToolkitTestApplication& application, const Vector4& color, unsigned int width, unsigned int height)
 {
-  BitmapImage imageData = BitmapImage::New( width, height, Pixel::RGBA8888 );
+  Texture texture = Texture::New(TextureType::TEXTURE_2D, Pixel::RGBA8888, width, height);
 
-  // Create the image
-  PixelBuffer* pixbuf = imageData.GetBuffer();
-  unsigned int size = width * height;
+  int      bufferSize = width * height * GetBytesPerPixel(Pixel::RGBA8888);
+  uint8_t* buffer     = reinterpret_cast<uint8_t*>(malloc(bufferSize));
 
-  for( size_t i = 0; i < size; i++ )
-    {
-      pixbuf[i*4+0] = 0xFF * color.r;
-      pixbuf[i*4+1] = 0xFF * color.g;
-      pixbuf[i*4+2] = 0xFF * color.b;
-      pixbuf[i*4+3] = 0xFF * color.a;
-    }
-  imageData.Update();
-
-  application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
-  application.SendNotification();
-  application.Render(RENDER_FRAME_INTERVAL);
-  application.Render(RENDER_FRAME_INTERVAL);
-  application.SendNotification();
+  for(uint32_t i = 0; i < width * height; ++i)
+  {
+    buffer[i * 4 + 0] = static_cast<uint8_t>(color.r * 255.0f);
+    buffer[i * 4 + 1] = static_cast<uint8_t>(color.g * 255.0f);
+    buffer[i * 4 + 2] = static_cast<uint8_t>(color.b * 255.0f);
+    buffer[i * 4 + 3] = static_cast<uint8_t>(color.a * 255.0f);
+  }
 
-  return imageData;
-}
-}//namespace
+  PixelData pixelData = PixelData::New(buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE);
+  texture.Upload(pixelData, 0u, 0u, 0u, 0u, width, height);
 
+  return texture;
+}
+} //namespace
 
 int UtcDaliBubbleEmitterNew(void)
 {
@@ -108,140 +103,163 @@ int UtcDaliBubbleEmitterNew(void)
 
   // Test default constructor
   BubbleEmitter emitter;
-  DALI_TEST_CHECK( !emitter );
+  DALI_TEST_CHECK(!emitter);
 
   // Test object creation
-  Image shapeImage = CreateSolidColorImage( application, Color::GREEN, 5, 5 );
-  emitter = BubbleEmitter::New( Vector2(50.f,50.f),shapeImage, 200, Vector2( 5.f, 10.f ));
-  DALI_TEST_CHECK( emitter );
+  Texture shapeImage = CreateSolidColorTexture(application, Color::GREEN, 5, 5);
+  emitter            = BubbleEmitter::New(Vector2(50.f, 50.f), shapeImage, 200, Vector2(5.f, 10.f));
+  DALI_TEST_CHECK(emitter);
 
   // Additional check to ensure object is created by checking if it's registered
-  ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
-  DALI_TEST_CHECK( registry );
+  ObjectRegistry registry = application.GetCore().GetObjectRegistry();
+  DALI_TEST_CHECK(registry);
   gObjectCreatedCallBackCalled = false;
-  registry.ObjectCreatedSignal().Connect( &TestCallback );
+  registry.ObjectCreatedSignal().Connect(&TestCallback);
   {
-    BubbleEmitter emitter = BubbleEmitter::New( Vector2(50.f,50.f),shapeImage, 200, Vector2( 5.f, 10.f ));
+    BubbleEmitter emitter = BubbleEmitter::New(Vector2(50.f, 50.f), shapeImage, 200, Vector2(5.f, 10.f));
   }
-  DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
+  DALI_TEST_CHECK(gObjectCreatedCallBackCalled);
 
   // Test copy constructor
-  BubbleEmitter emitterCopy( emitter );
-  DALI_TEST_CHECK( emitterCopy );
+  BubbleEmitter emitterCopy(emitter);
+  DALI_TEST_CHECK(emitterCopy);
 
   // Test down cast
   Handle handleEmitter;
-  handleEmitter = emitter;
-  BubbleEmitter downCastEmitter = BubbleEmitter::DownCast( handleEmitter );
-  DALI_TEST_CHECK( downCastEmitter );
+  handleEmitter                 = emitter;
+  BubbleEmitter downCastEmitter = BubbleEmitter::DownCast(handleEmitter);
+  DALI_TEST_CHECK(downCastEmitter);
   END_TEST;
 }
 
-int UtcDaliBubbleEmitterGetRootActor(void)
+int UtcDaliBubbleEmitterDownCast01(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( " UtcDaliBubbleEmitterGetRootActor " );
 
-  Image shapeImage = CreateSolidColorImage( application, Color::GREEN, 5, 5 );
-  BubbleEmitter emitter = BubbleEmitter::New( Vector2(50.f,50.f),shapeImage, 200, Vector2( 5.f, 10.f ));
+  tet_infoline(" UtcDaliBubbleEmitterDownCast01 ");
 
-  Actor root = emitter.GetRootActor();
-  DALI_TEST_CHECK( root );
-  DALI_TEST_CHECK( root.GetChildCount() == 3 );
+  Texture       shapeImage = CreateSolidColorTexture(application, Color::GREEN, 5, 5);
+  BubbleEmitter emitter    = BubbleEmitter::New(Vector2(50.f, 50.f), shapeImage, 200, Vector2(5.f, 10.f));
+
+  BaseHandle    handle(emitter);
+  BubbleEmitter emitter2 = BubbleEmitter::DownCast(handle);
+  DALI_TEST_EQUALS((bool)emitter2, true, TEST_LOCATION);
   END_TEST;
 }
 
-int UtcDaliBubbleEmitterSetBackground(void)
+int UtcDaliBubbleEmitterDownCast02(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( " UtcDaliBubbleEmitterSetBackground " );
 
-  Image shapeImage = CreateSolidColorImage( application, Color::GREEN, 5, 5 );
-  BubbleEmitter emitter = BubbleEmitter::New( Vector2(50.f,50.f),shapeImage, 200, Vector2( 5.f, 10.f ));
+  tet_infoline(" UtcDaliBubbleEmitterDownCast02 ");
 
-  RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
-  unsigned int taskCount = taskList.GetTaskCount();
+  Handle        handle  = Handle::New(); // Create a custom object
+  BubbleEmitter emitter = BubbleEmitter::DownCast(handle);
+  DALI_TEST_EQUALS((bool)emitter, false, TEST_LOCATION);
+  END_TEST;
+}
 
-  Image bgImage = CreateSolidColorImage( application, Color::RED, 50, 50 );
-  emitter.SetBackground( bgImage, Vector3(0.f, 0.f, 0.5f) );
+int UtcDaliBubbleEmitterGetRootActor(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline(" UtcDaliBubbleEmitterGetRootActor ");
 
-  DALI_TEST_CHECK( taskList.GetTaskCount() == taskCount+1 );
+  Texture       shapeImage = CreateSolidColorTexture(application, Color::GREEN, 5, 5);
+  BubbleEmitter emitter    = BubbleEmitter::New(Vector2(50.f, 50.f), shapeImage, 270, Vector2(5.f, 10.f));
 
-  Wait(application, 500);
-  DALI_TEST_CHECK( taskList.GetTaskCount() == taskCount );
+  Actor root = emitter.GetRootActor();
+  DALI_TEST_CHECK(root);
+  DALI_TEST_CHECK(root.GetChildCount() == 0);
   END_TEST;
 }
 
-int UtcDaliBubbleEmitterSetShapeImage(void)
+int UtcDaliBubbleEmitterSetBackground(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( " UtcDaliBubbleEmitterSetShapeImage " );
+  tet_infoline(" UtcDaliBubbleEmitterSetBackground ");
 
-  Image shapeImage1 = CreateSolidColorImage( application, Color::GREEN, 5, 5 );
-  BubbleEmitter emitter = BubbleEmitter::New( Vector2(50.f,50.f),shapeImage1, 200, Vector2( 5.f, 10.f ));
+  Texture       shapeImage = CreateSolidColorTexture(application, Color::GREEN, 5, 5);
+  BubbleEmitter emitter    = BubbleEmitter::New(Vector2(50.f, 50.f), shapeImage, 200, Vector2(5.f, 10.f));
 
-  Actor root = emitter.GetRootActor();
-  MeshActor bubbleMesh = MeshActor::DownCast( root.GetChildAt( 0 ) );
-  Material material = bubbleMesh.GetMaterial();
+  RenderTaskList taskList  = application.GetScene().GetRenderTaskList();
+  unsigned int   taskCount = taskList.GetTaskCount();
 
-  DALI_TEST_CHECK( material.GetDiffuseTexture() == shapeImage1 );
+  Texture bgImage = CreateSolidColorTexture(application, Color::RED, 50, 50);
+  emitter.SetBackground(bgImage, Vector3(0.f, 0.f, 0.5f));
 
-  Image shapeImage2 = CreateSolidColorImage( application, Color::RED, 8, 8 );
-  emitter.SetShapeImage( shapeImage2 );
+  DALI_TEST_CHECK(taskList.GetTaskCount() == taskCount + 1);
 
-  DALI_TEST_CHECK( material.GetDiffuseTexture() == shapeImage2 );
+  Wait(application, 500);
+  DALI_TEST_CHECK(taskList.GetTaskCount() == taskCount);
   END_TEST;
 }
 
+//TODO: test case for BubbleEmitter::SetShapeImage(Image)
+// To test that the bubble-shape image is successfully switched in the sampler
+/*int UtcDaliBubbleEmitterSetShapeImage(void)
+{
+}*/
+
 int UtcDaliBubbleEmitterSetBubbleScale(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( " UtcDaliBubbleEmitterSetBubbleScale " );
+  tet_infoline(" UtcDaliBubbleEmitterSetBubbleScale ");
 
-  Image shapeImage1 = CreateSolidColorImage( application, Color::GREEN, 5, 5 );
-  BubbleEmitter emitter = BubbleEmitter::New( Vector2(50.f,50.f),shapeImage1, 200, Vector2( 5.f, 10.f ));
+  static std::vector<UniformData> customUniforms =
+    {
+      UniformData("uDynamicScale", Property::Type::FLOAT),
+    };
+
+  TestGraphicsController& graphics = application.GetGraphicsController();
+  graphics.AddCustomUniforms(customUniforms);
 
+  Texture       shapeImage = CreateSolidColorTexture(application, Color::GREEN, 5, 5);
+  BubbleEmitter emitter    = BubbleEmitter::New(Vector2(50.f, 50.f), shapeImage, 150, Vector2(5.f, 10.f));
+  DALI_TEST_CHECK(emitter);
   Actor root = emitter.GetRootActor();
-  MeshActor bubbleMesh = MeshActor::DownCast( root.GetChildAt( 0 ) );
-  ShaderEffect effect = bubbleMesh.GetShaderEffect();
-  DALI_TEST_CHECK( effect );
+  application.GetScene().Add(root);
+  root.SetProperty(Actor::Property::POSITION, Vector3::ZERO);
+  root.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+  root.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+
+  TestGlAbstraction& gl = application.GetGlAbstraction();
+
+  Wait(application);
 
-  Property::Index scalePropertyIndex = effect.GetPropertyIndex( "uDynamicScale" );
   float scaleValue;
-  (effect.GetProperty(scalePropertyIndex)).Get( scaleValue );
-  DALI_TEST_EQUALS(scaleValue, 1.f, TEST_LOCATION );
+  DALI_TEST_CHECK(gl.GetUniformValue<float>("uDynamicScale", scaleValue));
+  DALI_TEST_EQUALS(scaleValue, 1.f, TEST_LOCATION);
 
-  emitter.SetBubbleScale( 2.f );
-  application.SendNotification();
-  application.Render();
-  (effect.GetProperty(scalePropertyIndex)).Get( scaleValue );
-  DALI_TEST_EQUALS(scaleValue, 2.f, TEST_LOCATION );
+  emitter.SetBubbleScale(2.f);
+  Wait(application);
+  DALI_TEST_CHECK(gl.GetUniformValue<float>("uDynamicScale", scaleValue));
+  DALI_TEST_EQUALS(scaleValue, 2.f, TEST_LOCATION);
+
+  emitter.SetBubbleScale(0.5f);
+  Wait(application);
+  DALI_TEST_CHECK(gl.GetUniformValue<float>("uDynamicScale", scaleValue));
+  DALI_TEST_EQUALS(scaleValue, 0.5f, TEST_LOCATION);
 
-  emitter.SetBubbleScale( 0.5f );
-  application.SendNotification();
-  application.Render();
-  (effect.GetProperty(scalePropertyIndex)).Get( scaleValue );
-  DALI_TEST_EQUALS(scaleValue, 0.5f, TEST_LOCATION );
   END_TEST;
 }
 
 int UtcDaliBubbleEmitterSetBubbleDensity01(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( " UtcDaliBubbleEmitterSetBubbleDensity " );
+  tet_infoline(" UtcDaliBubbleEmitterSetBubbleDensity ");
 
-  Image shapeImage1 = CreateSolidColorImage( application, Color::GREEN, 5, 5 );
-  BubbleEmitter emitter = BubbleEmitter::New( Vector2(50.f,50.f),shapeImage1, 200, Vector2( 5.f, 10.f ));
+  Texture       shapeImage = CreateSolidColorTexture(application, Color::GREEN, 5, 5);
+  BubbleEmitter emitter    = BubbleEmitter::New(Vector2(50.f, 50.f), shapeImage, 200, Vector2(5.f, 10.f));
 
   try
   {
-    emitter.SetBubbleDensity( 3.f );
+    emitter.SetBubbleDensity(3.f);
     DALI_TEST_CHECK(true);
   }
   catch(Dali::DaliException& e)
   {
-    tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
-    DALI_TEST_ASSERT(e, "density>0 && density<=9", TEST_LOCATION );
+    DALI_TEST_PRINT_ASSERT(e);
+    DALI_TEST_ASSERT(e, "density>0 && density<=9", TEST_LOCATION);
   }
   END_TEST;
 }
@@ -249,158 +267,133 @@ int UtcDaliBubbleEmitterSetBubbleDensity01(void)
 int UtcDaliBubbleEmitterSetBubbleDensity02(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( " UtcDaliBubbleEmitterSetBubbleDensity " );
+  tet_infoline(" UtcDaliBubbleEmitterSetBubbleDensity ");
 
-  Image shapeImage1 = CreateSolidColorImage( application, Color::GREEN, 5, 5 );
-  BubbleEmitter emitter = BubbleEmitter::New( Vector2(50.f,50.f),shapeImage1, 200, Vector2( 5.f, 10.f ));
+  Texture       shapeImage = CreateSolidColorTexture(application, Color::GREEN, 5, 5);
+  BubbleEmitter emitter    = BubbleEmitter::New(Vector2(50.f, 50.f), shapeImage, 200, Vector2(5.f, 10.f));
 
   try
   {
-    emitter.SetBubbleDensity( 10.f );
+    emitter.SetBubbleDensity(10.f);
   }
   catch(Dali::DaliException& e)
   {
-    tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
-    DALI_TEST_ASSERT(e, "density>0 && density<=9", TEST_LOCATION );
+    DALI_TEST_PRINT_ASSERT(e);
+    DALI_TEST_ASSERT(e, "density > 0 && density <= 9", TEST_LOCATION);
   }
   END_TEST;
 }
 
-int UtcDaliBubbleEmitterSetBlendMode(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( " UtcDaliBubbleEmitterSetBlendMode " );
-
-  Image shapeImage1 = CreateSolidColorImage( application, Color::GREEN, 5, 5 );
-  BubbleEmitter emitter = BubbleEmitter::New( Vector2(50.f,50.f),shapeImage1, 200, Vector2( 5.f, 10.f ));
-
-  Actor root = emitter.GetRootActor();
-  MeshActor bubbleMesh = MeshActor::DownCast( root.GetChildAt( 0 ) );
-
-  BlendingFactor::Type srcFactorRgb, destFactorRgb, srcFactorAlpha, destFactorAlpha;
-
-  emitter.SetBlendMode( true );
-  bubbleMesh.GetBlendFunc( srcFactorRgb, destFactorRgb, srcFactorAlpha, destFactorAlpha );
-  DALI_TEST_CHECK( srcFactorRgb == BlendingFactor::SRC_ALPHA );
-  DALI_TEST_CHECK( destFactorRgb == BlendingFactor::ONE );
-  DALI_TEST_CHECK( srcFactorAlpha == BlendingFactor::ZERO );
-  DALI_TEST_CHECK( destFactorAlpha == BlendingFactor::ONE );
-
-  emitter.SetBlendMode( false );
-  bubbleMesh.GetBlendFunc( srcFactorRgb, destFactorRgb, srcFactorAlpha, destFactorAlpha );
-  DALI_TEST_CHECK( srcFactorRgb == BlendingFactor::SRC_ALPHA );
-  DALI_TEST_CHECK( destFactorRgb == BlendingFactor::ONE_MINUS_SRC_ALPHA );
-  DALI_TEST_CHECK( srcFactorAlpha == BlendingFactor::ONE );
-  DALI_TEST_CHECK( destFactorAlpha == BlendingFactor::ONE_MINUS_SRC_ALPHA );
-  END_TEST;
-}
-
 int UtcDaliBubbleEmitterEmitBubble(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( " UtcDaliBubbleEmitterEmitBubble " );
-
-  Image shapeImage1 = CreateSolidColorImage( application, Color::GREEN, 5, 5 );
-  BubbleEmitter emitter = BubbleEmitter::New( Vector2(50.f,50.f),shapeImage1, 200, Vector2( 5.f, 10.f ));
-
-  Actor root = emitter.GetRootActor();
-  MeshActor bubbleMesh = MeshActor::DownCast( root.GetChildAt( 0 ) );
-  ShaderEffect effect = bubbleMesh.GetShaderEffect();
-  DALI_TEST_CHECK( effect );
-
-  Property::Index propertyIndex0 = effect.GetPropertyIndex( "uPercentage[0]" );
-  Property::Index propertyIndex1 = effect.GetPropertyIndex( "uPercentage[1]" );
-  float value0, value1;
-
-  Animation animation = Animation::New( 0.5f );
-  emitter.EmitBubble( animation, Vector2(40.f,40.f), Vector2(-5.f,-5.f), Vector2(30.f,30.f) );
-  emitter.EmitBubble( animation, Vector2(10.f,10.f), Vector2(5.f,5.f), Vector2(30.f,30.f) );
-  (effect.GetProperty(propertyIndex0)).Get( value0 );
-  (effect.GetProperty(propertyIndex1)).Get( value1 );
-  DALI_TEST_EQUALS(value0, 0.f, TEST_LOCATION );
-  DALI_TEST_EQUALS(value1, 0.f, TEST_LOCATION );
+  tet_infoline(" UtcDaliBubbleEmitterEmitBubble ");
+
+  Texture       shapeImage1 = CreateSolidColorTexture(application, Color::GREEN, 5, 5);
+  BubbleEmitter emitter     = BubbleEmitter::New(Vector2(50.f, 50.f), shapeImage1, 200, Vector2(5.f, 10.f));
+
+  Actor    root           = emitter.GetRootActor();
+  Renderer bubbleRenderer = root.GetRendererAt(0);
+  application.GetScene().Add(root);
+  DALI_TEST_CHECK(bubbleRenderer);
+
+  Property::Index propertyIndex0 = bubbleRenderer.GetPropertyIndex("uPercentage[0]");
+  Property::Index propertyIndex1 = bubbleRenderer.GetPropertyIndex("uPercentage[1]");
+  float           value0, value1;
+
+  Animation animation = Animation::New(0.5f);
+  emitter.EmitBubble(animation, Vector2(40.f, 40.f), Vector2(-5.f, -5.f), Vector2(30.f, 30.f));
+  emitter.EmitBubble(animation, Vector2(10.f, 10.f), Vector2(5.f, 5.f), Vector2(30.f, 30.f));
+  (bubbleRenderer.GetProperty(propertyIndex0)).Get(value0);
+  (bubbleRenderer.GetProperty(propertyIndex1)).Get(value1);
+  DALI_TEST_EQUALS(value0, 0.f, TEST_LOCATION);
+  DALI_TEST_EQUALS(value1, 0.f, TEST_LOCATION);
+  (bubbleRenderer.GetCurrentProperty(propertyIndex0)).Get(value0);
+  (bubbleRenderer.GetCurrentProperty(propertyIndex0)).Get(value1);
+  DALI_TEST_EQUALS(value0, 0.f, TEST_LOCATION);
+  DALI_TEST_EQUALS(value1, 0.f, TEST_LOCATION);
 
   animation.Play();
 
   Wait(application, 300);
-  (effect.GetProperty(propertyIndex0)).Get( value0 );
-  (effect.GetProperty(propertyIndex1)).Get( value1 );
-  DALI_TEST_CHECK( value0 >= 0.6f );
-  DALI_TEST_CHECK( value1 >= 0.6f );
-
-  Wait(application, 600);
-  (effect.GetProperty(propertyIndex0)).Get( value0 );
-  (effect.GetProperty(propertyIndex1)).Get( value1 );
-  DALI_TEST_EQUALS(value0, 1.f, TEST_LOCATION );
-  DALI_TEST_EQUALS(value1, 1.f, TEST_LOCATION );
+  propertyIndex0 = bubbleRenderer.GetPropertyIndex("uPercentage[0]");
+  propertyIndex1 = bubbleRenderer.GetPropertyIndex("uPercentage[1]");
+  (bubbleRenderer.GetCurrentProperty(propertyIndex0)).Get(value0);
+  (bubbleRenderer.GetCurrentProperty(propertyIndex0)).Get(value1);
+  DALI_TEST_CHECK(value0 >= 0.6f);
+  DALI_TEST_CHECK(value1 >= 0.6f);
+
+  Wait(application, 500);
+  (bubbleRenderer.GetCurrentProperty(propertyIndex0)).Get(value0);
+  (bubbleRenderer.GetCurrentProperty(propertyIndex0)).Get(value1);
+  DALI_TEST_EQUALS(value0, 1.f, TEST_LOCATION);
+  DALI_TEST_EQUALS(value1, 1.f, TEST_LOCATION);
   END_TEST;
 }
 
-int UtcDaliBubbleEmitterStartExplosion(void)
+int UtcDaliBubbleEmitterRestore(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( " UtcDaliBubbleEmitterStartExplosion " );
+  tet_infoline(" UtcDaliBubbleEmitterRestore ");
 
-  Image shapeImage1 = CreateSolidColorImage( application, Color::GREEN, 5, 5 );
-  BubbleEmitter emitter = BubbleEmitter::New( Vector2(50.f,50.f),shapeImage1, 200, Vector2( 5.f, 10.f ));
-  Actor root = emitter.GetRootActor();
-  MeshActor bubbleMesh = MeshActor::DownCast( root.GetChildAt( 0 ) );
-  ShaderEffect effect = bubbleMesh.GetShaderEffect();
-  DALI_TEST_CHECK( effect );
+  static std::vector<UniformData> customUniforms =
+    {
+      UniformData("uPercentage[90]", Property::Type::FLOAT),
+      UniformData("uStartEndPosition[90]", Property::Type::VECTOR4),
+    };
 
-  Property::Index propertyIndex = effect.GetPropertyIndex( "uMagnification" );
-  float value;
-  (effect.GetProperty(propertyIndex)).Get( value );
-  DALI_TEST_EQUALS(value, 1.f, TEST_LOCATION );
+  TestGraphicsController& graphics = application.GetGraphicsController();
+  graphics.AddCustomUniforms(customUniforms);
 
-  emitter.StartExplosion( 0.4, 4.f );
+  Vector2       movementArea(50.f, 50.f);
+  Texture       shapeImage = CreateSolidColorTexture(application, Color::GREEN, 5, 5);
+  BubbleEmitter emitter    = BubbleEmitter::New(movementArea, shapeImage, 90, Vector2(5.f, 10.f));
+  Actor         root       = emitter.GetRootActor();
+  application.GetScene().Add(root);
+  root.SetProperty(Actor::Property::POSITION, Vector3::ZERO);
+  root.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+  root.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
 
-  Wait(application, 200); // 0.2s
-  (effect.GetProperty(propertyIndex)).Get( value );
-  DALI_TEST_CHECK( value >= 2.f );
+  Renderer renderer = root.GetRendererAt(0);
+  DALI_TEST_CHECK(renderer);
 
-  Wait(application, 100); // 0.3s
-  (effect.GetProperty(propertyIndex)).Get( value );
-  DALI_TEST_CHECK( value >= 3.f );
+  TestGlAbstraction& gl = application.GetGlAbstraction();
 
-  Wait(application, 100); // 0.4s
-  (effect.GetProperty(propertyIndex)).Get( value );
-  DALI_TEST_EQUALS(value, 1.f, TEST_LOCATION );
-  END_TEST;
-}
+  float   percentageValue;
+  Vector4 startEndPosValue;
 
-int UtcDaliBubbleEmitterRestore(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( " UtcDaliBubbleEmitterRestore " );
+  Animation animation = Animation::New(0.5f);
+  emitter.EmitBubble(animation, Vector2(40.f, 40.f), Vector2(-5.f, -5.f), Vector2(30.f, 30.f));
 
-  Image shapeImage1 = CreateSolidColorImage( application, Color::GREEN, 5, 5 );
-  BubbleEmitter emitter = BubbleEmitter::New( Vector2(50.f,50.f),shapeImage1, 200, Vector2( 5.f, 10.f ));
-  Actor root = emitter.GetRootActor();
-  MeshActor bubbleMesh = MeshActor::DownCast( root.GetChildAt( 0 ) );
-  ShaderEffect effect = bubbleMesh.GetShaderEffect();
-  DALI_TEST_CHECK( effect );
+  Wait(application);
 
-  Property::Index percentagePropertyIndex = effect.GetPropertyIndex( "uPercentage[0]" );
-  float percentage;
+  DALI_TEST_CHECK(gl.GetUniformValue<float>("uPercentage[0]", percentageValue));
+  DALI_TEST_EQUALS(percentageValue, 0.f, TEST_LOCATION);
 
-  Animation animation = Animation::New( 0.5f );
-  emitter.EmitBubble( animation, Vector2(40.f,40.f), Vector2(-5.f,-5.f), Vector2(30.f,30.f) );
-  (effect.GetProperty(percentagePropertyIndex)).Get( percentage );
-  DALI_TEST_EQUALS(percentage, 0.f, TEST_LOCATION );
+  DALI_TEST_CHECK(gl.GetUniformValue<Vector4>("uStartEndPosition[0]", startEndPosValue));
+  DALI_TEST_EQUALS(startEndPosValue.x, 40.f - movementArea.x * 0.5f, TEST_LOCATION);
+  DALI_TEST_EQUALS(startEndPosValue.y, 40.f - movementArea.x * 0.5f, TEST_LOCATION);
 
   animation.Play();
   Wait(application, 200);
   animation.Clear();
 
-  (effect.GetProperty(percentagePropertyIndex)).Get( percentage );
-  DALI_TEST_CHECK( percentage < 0.5f && percentage >= 0.4);
+  DALI_TEST_CHECK(gl.GetUniformValue<float>("uPercentage[0]", percentageValue));
+  DALI_TEST_CHECK(percentageValue < 0.5f && percentageValue >= 0.4);
+
+  DALI_TEST_CHECK(gl.GetUniformValue<Vector4>("uStartEndPosition[0]", startEndPosValue));
+  DALI_TEST_EQUALS(startEndPosValue.x, 40.f - movementArea.x * 0.5f, TEST_LOCATION);
+  DALI_TEST_EQUALS(startEndPosValue.y, 40.f - movementArea.x * 0.5f, TEST_LOCATION);
 
   emitter.Restore();
   application.SendNotification();
   application.Render();
 
-  (effect.GetProperty(percentagePropertyIndex)).Get( percentage );
-  DALI_TEST_EQUALS(percentage, 1.f, TEST_LOCATION );
+  DALI_TEST_CHECK(gl.GetUniformValue<float>("uPercentage[0]", percentageValue));
+  DALI_TEST_EQUALS(percentageValue, 0.f, TEST_LOCATION);
+
+  DALI_TEST_CHECK(gl.GetUniformValue<Vector4>("uStartEndPosition[0]", startEndPosValue));
+  DALI_TEST_EQUALS(startEndPosValue, Vector4::ZERO, TEST_LOCATION);
+
   END_TEST;
 }