Merge "Added support for setting light position in mesh renderer." into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-RendererFactory.cpp
index 94a369f..2f331b1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 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,9 +18,9 @@
 #include <stdlib.h>
 #include <dali-toolkit-test-suite-utils.h>
 #include <toolkit-event-thread-callback.h>
-#include <dali/devel-api/rendering/renderer.h>
-#include <dali/devel-api/rendering/texture-set.h>
-#include <dali/devel-api/rendering/shader.h>
+#include <dali/public-api/rendering/renderer.h>
+#include <dali/public-api/rendering/texture-set.h>
+#include <dali/public-api/rendering/shader.h>
 #include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
 
 using namespace Dali;
@@ -36,6 +36,7 @@ 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_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube-Points-Only.obj";
 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 )
@@ -293,10 +294,10 @@ int UtcDaliRendererFactoryGetColorRenderer1(void)
 
   Property::Map propertyMap;
   Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
-  propertyMap.Insert("rendererType",  "color");
+  propertyMap.Insert("rendererType",  "COLOR");
   propertyMap.Insert("mixColor",  testColor);
 
-  ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
+  ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap);
   DALI_TEST_CHECK( controlRenderer );
 
   Actor actor = Actor::New();
@@ -319,7 +320,10 @@ int UtcDaliRendererFactoryGetColorRenderer2(void)
   DALI_TEST_CHECK( factory );
 
   Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
-  ControlRenderer controlRenderer = factory.GetControlRenderer(testColor);
+  Dali::Property::Map map;
+  map[ "rendererType" ] = "COLOR";
+  map[ "mixColor" ] = testColor;
+  ControlRenderer controlRenderer = factory.CreateControlRenderer( map );
   DALI_TEST_CHECK( controlRenderer );
 
   Actor actor = Actor::New();
@@ -347,11 +351,11 @@ int UtcDaliRendererFactoryGetBorderRenderer1(void)
   Property::Map propertyMap;
   Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
   float testSize = 5.f;
-  propertyMap.Insert("rendererType",  "border");
+  propertyMap.Insert("rendererType",  "BORDER");
   propertyMap.Insert("borderColor",  testColor);
   propertyMap.Insert("borderSize",  testSize);
 
-  ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
+  ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap);
   DALI_TEST_CHECK( controlRenderer );
 
   Actor actor = Actor::New();
@@ -394,7 +398,11 @@ int UtcDaliRendererFactoryGetBorderRenderer2(void)
   Vector4 testColor( 1.f, 0.5f, 0.3f, 1.f );
   float testSize = 5.f;
 
-  ControlRenderer controlRenderer = factory.GetControlRenderer(testSize, testColor );
+  Dali::Property::Map propertyMap;
+  propertyMap[ "rendererType" ] = "BORDER";
+  propertyMap[ "borderColor"  ] = testColor;
+  propertyMap[ "borderSize"   ] = testSize;
+  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
   DALI_TEST_CHECK( controlRenderer );
 
   Actor actor = Actor::New();
@@ -424,7 +432,12 @@ int UtcDaliRendererFactoryGetBorderRenderer2(void)
   controlRenderer.SetOffStage( actor );
 
   // enable the anti-aliasing
-  controlRenderer = factory.GetControlRenderer(testSize, testColor, true );
+  Dali::Property::Map map;
+  map[ "rendererType" ] = "BORDER";
+  map[ "borderColor"  ] = testColor;
+  map[ "borderSize"   ] = testSize;
+  map[ "antiAliasing"   ] = true;
+  controlRenderer = factory.CreateControlRenderer( map );
   controlRenderer.SetOnStage( actor );
 
   application.SendNotification();
@@ -444,25 +457,25 @@ int UtcDaliRendererFactoryGetLinearGradientRenderer(void)
   DALI_TEST_CHECK( factory );
 
   Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "gradient");
+  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");
+  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("stopOffset",   stopOffsets);
+  propertyMap.Insert("stopOffset", stopOffsets);
 
   Property::Array stopColors;
   stopColors.PushBack( Color::RED );
   stopColors.PushBack( Color::GREEN );
-  propertyMap.Insert("stopColor",   stopColors);
+  propertyMap.Insert("stopColor", stopColors);
 
-  ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
+  ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap);
   DALI_TEST_CHECK( controlRenderer );
 
   // A lookup texture is generated and pass to shader as sampler
@@ -484,11 +497,11 @@ int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
   DALI_TEST_CHECK( factory );
 
   Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "gradient");
+  propertyMap.Insert("rendererType",  "GRADIENT");
 
   Vector2 center(100.f, 100.f);
   float radius = 100.f;
-  propertyMap.Insert("units",  "userSpace");
+  propertyMap.Insert("units",  "USER_SPACE");
   propertyMap.Insert("center",  center);
   propertyMap.Insert("radius",  radius);
 
@@ -502,7 +515,7 @@ int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
   stopColors.PushBack( Color::GREEN );
   propertyMap.Insert("stopColor",   stopColors);
 
-  ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
+  ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap);
   DALI_TEST_CHECK( controlRenderer );
 
   // A lookup texture is generated and pass to shader as sampler
@@ -529,20 +542,20 @@ int UtcDaliRendererFactoryDefaultOffsetsGradientRenderer(void)
   DALI_TEST_CHECK( factory );
 
   Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "gradient");
+  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");
+  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);
+  propertyMap.Insert("stopColor", stopColors);
 
-  ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
+  ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap);
   DALI_TEST_CHECK( controlRenderer );
 
   // A lookup texture is generated and pass to shader as sampler
@@ -564,10 +577,10 @@ int UtcDaliRendererFactoryGetImageRenderer1(void)
   DALI_TEST_CHECK( factory );
 
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "image" );
+  propertyMap.Insert( "rendererType",  "IMAGE" );
   propertyMap.Insert( "url",  TEST_IMAGE_FILE_NAME );
 
-  ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
+  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
   DALI_TEST_CHECK( controlRenderer );
 
   Actor actor = Actor::New();
@@ -604,7 +617,7 @@ int UtcDaliRendererFactoryGetImageRenderer2(void)
   DALI_TEST_CHECK( factory );
 
   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
-  ControlRenderer controlRenderer = factory.GetControlRenderer( image );
+  ControlRenderer controlRenderer = factory.CreateControlRenderer( image );
 
   Actor actor = Actor::New();
   // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
@@ -646,11 +659,11 @@ int UtcDaliRendererFactoryGetNPatchRenderer1(void)
   Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
 
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "image" );
+  propertyMap.Insert( "rendererType",  "IMAGE" );
   propertyMap.Insert( "url",  TEST_NPATCH_FILE_NAME );
   {
     tet_infoline( "whole grid" );
-    ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
+    ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
     DALI_TEST_CHECK( controlRenderer );
 
     Actor actor = Actor::New();
@@ -669,7 +682,7 @@ int UtcDaliRendererFactoryGetNPatchRenderer1(void)
   propertyMap.Insert( "borderOnly",  true );
   {
     tet_infoline( "border only" );
-    ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
+    ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
     DALI_TEST_CHECK( controlRenderer );
 
     Actor actor = Actor::New();
@@ -710,10 +723,10 @@ int UtcDaliRendererFactoryGetNPatchRenderer2(void)
   Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
 
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "image" );
+  propertyMap.Insert( "rendererType",  "IMAGE" );
   propertyMap.Insert( "url",  TEST_NPATCH_FILE_NAME );
   {
-    ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
+    ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
     DALI_TEST_CHECK( controlRenderer );
 
     Actor actor = Actor::New();
@@ -735,7 +748,7 @@ int UtcDaliRendererFactoryGetNPatchRenderer2(void)
   propertyMap.Insert( "borderOnly",  true );
   {
     tet_infoline( "border only" );
-    ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
+    ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
     DALI_TEST_CHECK( controlRenderer );
 
     TestGlAbstraction& gl = application.GetGlAbstraction();
@@ -772,7 +785,7 @@ int UtcDaliRendererFactoryGetNPatchRenderer3(void)
   stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
   Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
 
-  ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME );
+  ControlRenderer controlRenderer = factory.CreateControlRenderer( TEST_NPATCH_FILE_NAME, ImageDimensions() );
   DALI_TEST_CHECK( controlRenderer );
 
   Actor actor = Actor::New();
@@ -811,7 +824,7 @@ int UtcDaliRendererFactoryGetNPatchRenderer4(void)
   stretchRangesY.PushBack( Uint16Pair( 25, 27 ) );
   Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
 
-  ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME );
+  ControlRenderer controlRenderer = factory.CreateControlRenderer( TEST_NPATCH_FILE_NAME, ImageDimensions() );
   DALI_TEST_CHECK( controlRenderer );
 
   Actor actor = Actor::New();
@@ -839,7 +852,7 @@ int UtcDaliRendererFactoryGetNPatchRendererN1(void)
   RendererFactory factory = RendererFactory::Get();
   DALI_TEST_CHECK( factory );
 
-  ControlRenderer controlRenderer = factory.GetControlRenderer( "ERROR.9.jpg" );
+  ControlRenderer controlRenderer = factory.CreateControlRenderer( "ERROR.9.jpg", ImageDimensions() );
   DALI_TEST_CHECK( controlRenderer );
 
   Actor actor = Actor::New();
@@ -875,7 +888,7 @@ int UtcDaliRendererFactoryGetNPatchRendererN2(void)
   propertyMap.Insert( "rendererType",  111 );
   propertyMap.Insert( "url",  "ERROR.9.jpg" );
 
-  ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
+  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
   DALI_TEST_CHECK( controlRenderer );
 
   Actor actor = Actor::New();
@@ -903,7 +916,7 @@ int UtcDaliRendererFactoryGetSvgRenderer(void)
   tet_infoline( "UtcDaliRendererFactoryGetSvgRenderer: Request svg renderer with a svg url" );
 
   RendererFactory factory = RendererFactory::Get();
-  ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_SVG_FILE_NAME );
+  ControlRenderer controlRenderer = factory.CreateControlRenderer( TEST_SVG_FILE_NAME, ImageDimensions() );
   DALI_TEST_CHECK( controlRenderer );
 
   TestGlAbstraction& gl = application.GetGlAbstraction();
@@ -937,34 +950,31 @@ int UtcDaliRendererFactoryGetSvgRenderer(void)
   END_TEST;
 }
 
-//Test if mesh loads correctly when supplied with only the bare minimum requirements, an object file.
-int UtcDaliRendererFactoryGetMeshRenderer1(void)
+//Creates a mesh renderer from the given propertyMap and tries to load it on stage in the given application.
+//This is expected to succeed, which will then pass the test.
+void MeshRendererLoadsCorrectlyTest( Property::Map& propertyMap, ToolkitTestApplication& application )
 {
-  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 );
+  //Create a mesh renderer.
+  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
   DALI_TEST_CHECK( controlRenderer );
 
+  //Create an actor on stage to house the renderer.
   Actor actor = Actor::New();
   actor.SetSize( 200.f, 200.f );
   Stage::GetCurrent().Add( actor );
   controlRenderer.SetSize( Vector2( 200.f, 200.f ) );
   controlRenderer.SetOnStage( actor );
 
+  //Ensure set on stage.
+  DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
+
+  //Attempt to render to queue resource load requests.
   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();
@@ -973,49 +983,39 @@ int UtcDaliRendererFactoryGetMeshRenderer1(void)
   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<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
+  DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
   DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
 
+  //Finish by setting off stage, and ensuring this was successful.
   controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
-
-  END_TEST;
+  DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
 }
 
-//Test if mesh loads correctly when supplied with an object file as well as a blank material file and images directory.
-int UtcDaliRendererFactoryGetMeshRenderer2(void)
+//Creates a mesh renderer from the given propertyMap and tries to load it on stage in the given application.
+//This is expected to fail, which will then pass the test.
+void MeshRendererDoesNotLoadCorrectlyTest( Property::Map& propertyMap, ToolkitTestApplication& application )
 {
-  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 );
+  //Create a mesh renderer.
+  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
   DALI_TEST_CHECK( controlRenderer );
 
-  //Add renderer to an actor on stage.
+  //Create an actor on stage to house the renderer.
   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 );
+  //Ensure set on stage.
+  DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
 
   //Attempt to render to queue resource load requests.
   application.SendNotification();
@@ -1029,74 +1029,72 @@ int UtcDaliRendererFactoryGetMeshRenderer2(void)
   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<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
-  DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+  //Test to see if the object has not been loaded, as expected.
+  Matrix scaleMatrix;
+  DALI_TEST_CHECK( !application.GetGlAbstraction().GetUniformValue<Matrix>( "uObjectMatrix", scaleMatrix ) );
 
+  //Finish by setting off stage, and ensuring this was successful.
   controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
-
-  END_TEST;
+  DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
 }
 
-//Test if mesh loads correctly when supplied with all parameters, an object file, a material file and a directory location.
-int UtcDaliRendererFactoryGetMeshRenderer3(void)
+//Test if mesh loads correctly when supplied with only the bare minimum requirements, an object file.
+int UtcDaliRendererFactoryGetMeshRenderer1(void)
 {
+  //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer3:  Request mesh renderer with all parameters correct" );
 
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
+  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer1:  Request mesh renderer with a valid object file only" );
 
   //Set up renderer properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "mesh" );
+  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 );
+  //Test to see if mesh loads correctly.
+  MeshRendererLoadsCorrectlyTest( propertyMap, application );
 
-  //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 );
+  END_TEST;
+}
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+//Test if mesh loads correctly when supplied with an object file as well as a blank material file and images directory.
+int UtcDaliRendererFactoryGetMeshRenderer2(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  //Attempt to render to queue resource load requests.
-  application.SendNotification();
-  application.Render( 0 );
+  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer2:  Request mesh renderer with blank material file and images directory" );
 
-  //Tell the platform abstraction that the required resources have been loaded.
-  TestPlatformAbstraction& platform = application.GetPlatform();
-  platform.SetAllResourceRequestsAsLoaded();
+  //Set up renderer properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( "rendererType", "MESH" );
+  propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
+  propertyMap.Insert( "materialUrl", "" );
+  propertyMap.Insert( "texturesPath", "" );
 
-  //Render again to upload the now-loaded textures.
-  application.SendNotification();
-  application.Render( 0 );
+  //Test to see if mesh loads correctly.
+  MeshRendererLoadsCorrectlyTest( propertyMap, application );
 
-  TestGlAbstraction& gl = application.GetGlAbstraction();
+  END_TEST;
+}
 
-  Matrix testScaleMatrix;
-  testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) );
-  Matrix actualScaleMatrix;
+//Test if mesh loads correctly when supplied with all main parameters, an object file, a material file and a directory location.
+int UtcDaliRendererFactoryGetMeshRenderer3(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  //Test to see if the object has been successfully loaded.
-  DALI_TEST_CHECK( gl.GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
-  DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer3:  Request mesh renderer with all parameters correct" );
 
-  controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+  //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 "/" );
+
+  //Test to see if mesh loads correctly.
+  MeshRendererLoadsCorrectlyTest( propertyMap, application );
 
   END_TEST;
 }
@@ -1104,106 +1102,127 @@ int UtcDaliRendererFactoryGetMeshRenderer3(void)
 //Test if mesh renderer can load a correctly supplied mesh without a normal map or gloss map in the material file.
 int UtcDaliRendererFactoryGetMeshRenderer4(void)
 {
+  //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer4:  Request mesh renderer with diffuse texture but not normal or gloss." );
 
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
+  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer4:  Request mesh renderer with diffuse texture but not normal or gloss." );
 
   //Set up renderer properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "mesh" );
+  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 );
+  //Test to see if mesh loads correctly.
+  MeshRendererLoadsCorrectlyTest( propertyMap, application );
 
-  //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 );
+  END_TEST;
+}
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+//Test if mesh renderer can load when made to use diffuse textures only.
+int UtcDaliRendererFactoryGetMeshRenderer5(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  //Attempt to render to queue resource load requests.
-  application.SendNotification();
-  application.Render( 0 );
+  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer5:  Request mesh renderer and make it only use diffuse textures." );
 
-  //Tell the platform abstraction that the required resources have been loaded.
-  TestPlatformAbstraction& platform = application.GetPlatform();
-  platform.SetAllResourceRequestsAsLoaded();
+  //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 "/" );
+  propertyMap.Insert( "shaderType", "DIFFUSE_TEXTURE" );
 
-  //Render again to upload the now-loaded textures.
-  application.SendNotification();
-  application.Render( 0 );
+  //Test to see if mesh loads correctly.
+  MeshRendererLoadsCorrectlyTest( propertyMap, application );
 
-  TestGlAbstraction& gl = application.GetGlAbstraction();
+  END_TEST;
+}
 
-  Matrix testScaleMatrix;
-  testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) );
-  Matrix actualScaleMatrix;
+//Test if mesh renderer can load when made to not use the supplied textures.
+int UtcDaliRendererFactoryGetMeshRenderer6(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  //Test to see if the object has been successfully loaded.
-  DALI_TEST_CHECK( gl.GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
-  DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer6:  Request mesh renderer and make it not use any textures." );
 
-  controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+  //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 "/" );
+  propertyMap.Insert( "shaderType", "TEXTURELESS" );
+
+  //Test to see if mesh loads correctly.
+  MeshRendererLoadsCorrectlyTest( propertyMap, application );
 
   END_TEST;
 }
-
-//Test if mesh renderer handles the case of lacking an object file.
-int UtcDaliRendererFactoryGetMeshRendererN1(void)
+//Test if mesh renderer loads correctly when light position is manually set.
+int UtcDaliRendererFactoryGetMeshRenderer7(void)
 {
+  //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetMeshRendererN1:  Request mesh renderer without object file" );
 
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
+  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer7:  Request mesh renderer with custom light position." );
 
   //Set up renderer properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "mesh" );
+  propertyMap.Insert( "rendererType", "MESH" );
+  propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
   propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
   propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" );
+  propertyMap.Insert( "lightPosition", Vector3( 0.0, 1.0, 2.0 ) );
 
-  ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
-  DALI_TEST_CHECK( controlRenderer );
+  //Test to see if mesh loads correctly.
+  MeshRendererLoadsCorrectlyTest( propertyMap, application );
 
-  //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 );
+  END_TEST;
+}
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+//Test if mesh renderer loads correctly when supplied an object file without face normals or texture points.
+//Note that this notably tests object loader functionality.
+int UtcDaliRendererFactoryGetMeshRenderer8(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  //Attempt to render to queue resource load requests.
-  application.SendNotification();
-  application.Render( 0 );
+  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer5:  Request mesh renderer with normal-less object file." );
 
-  //Tell the platform abstraction that the required resources have been loaded.
-  TestPlatformAbstraction& platform = application.GetPlatform();
-  platform.SetAllResourceRequestsAsLoaded();
+  //Set up renderer properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( "rendererType", "MESH" );
+  propertyMap.Insert( "objectUrl", TEST_SIMPLE_OBJ_FILE_NAME );
+  propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
+  propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" );
 
-  //Render again to upload the now-loaded textures.
-  application.SendNotification();
-  application.Render( 0 );
+  //Test to see if mesh loads correctly.
+  MeshRendererLoadsCorrectlyTest( propertyMap, application );
 
-  TestGlAbstraction& gl = application.GetGlAbstraction();
+  END_TEST;
+}
 
-  //Test to see if the object has not been loaded, as expected.
-  Matrix scaleMatrix;
-  DALI_TEST_CHECK( ! gl.GetUniformValue<Matrix>( "uObjectMatrix", scaleMatrix ) );
+//Test if mesh renderer handles the case of lacking an object file.
+int UtcDaliRendererFactoryGetMeshRendererN1(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+  tet_infoline( "UtcDaliRendererFactoryGetMeshRendererN1:  Request mesh renderer without object file" );
+
+  //Set up renderer properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( "rendererType", "MESH" );
+  propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
+  propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" );
+
+  //Test to see if mesh doesn't load with these properties, as expected.
+  MeshRendererDoesNotLoadCorrectlyTest( propertyMap, application );
 
   END_TEST;
 }
@@ -1211,51 +1230,20 @@ int UtcDaliRendererFactoryGetMeshRendererN1(void)
 //Test if mesh renderer handles the case of being passed invalid material and images urls.
 int UtcDaliRendererFactoryGetMeshRendererN2(void)
 {
+  //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetMeshRendererN2:  Request mesh renderer with invalid material and images urls" );
 
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
+  tet_infoline( "UtcDaliRendererFactoryGetMeshRendererN2:  Request mesh renderer with invalid material and images urls" );
 
   //Set up renderer properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "mesh" );
+  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<Matrix>( "uObjectMatrix", scaleMatrix ) );
-
-  controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+  //Test to see if mesh doesn't load with these properties, as expected.
+  MeshRendererDoesNotLoadCorrectlyTest( propertyMap, application );
 
   END_TEST;
 }
@@ -1263,252 +1251,254 @@ int UtcDaliRendererFactoryGetMeshRendererN2(void)
 //Test if mesh renderer handles the case of being passed an invalid object url
 int UtcDaliRendererFactoryGetMeshRendererN3(void)
 {
+  //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetMeshRendererN3:  Request mesh renderer with invalid object url" );
 
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
+  tet_infoline( "UtcDaliRendererFactoryGetMeshRendererN3:  Request mesh renderer with invalid object url" );
 
   //Set up renderer properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "mesh" );
+  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 );
+  //Test to see if mesh doesn't load with these properties, as expected.
+  MeshRendererDoesNotLoadCorrectlyTest( propertyMap, application );
+
+  END_TEST;
+}
+
+//Creates a primitive renderer with the given property map and tests to see if it correctly loads in the given application.
+void TestPrimitiveRendererWithProperties( Property::Map& propertyMap, ToolkitTestApplication& application )
+{
+  RendererFactory factory = RendererFactory::Get();
+  DALI_TEST_CHECK( factory );
+
+  //Create a primitive renderer.
+  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
   DALI_TEST_CHECK( controlRenderer );
 
-  //Add renderer to an actor on stage.
+  //Create an actor on stage to house the renderer.
   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();
+  //Ensure set on stage.
+  DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
 
-  //Render again to upload the now-loaded textures.
+  //Tell test application to load the renderer.
   application.SendNotification();
-  application.Render( 0 );
+  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 not been loaded, as expected.
-  Matrix scaleMatrix;
-  DALI_TEST_CHECK( ! gl.GetUniformValue<Matrix>( "uObjectMatrix", scaleMatrix ) );
+  //Test to see if the object has been successfully loaded.
+  DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
+  DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
 
+  //Finish by setting off stage, and ensuring this was successful.
   controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
-
-  END_TEST;
+  DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
 }
 
-int UtcDaliRendererFactoryResetRenderer1(void)
+//Test if primitive shape loads correctly when supplied with only the bare minimum requirements, the shape to use.
+int UtcDaliRendererFactoryGetPrimitiveRenderer1(void)
 {
+  //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryResetRenderer1" );
 
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
+  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer1:  Request primitive renderer with a shape only" );
 
-  ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED );
-  DALI_TEST_CHECK( controlRenderer );
+  //Set up renderer properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( "rendererType", "PRIMITIVE" );
+  propertyMap.Insert( "shape", "CUBE" );
 
-  Actor actor = Actor::New();
-  TestControlRendererRender( application, actor, controlRenderer );
+  //Test to see if shape loads correctly.
+  TestPrimitiveRendererWithProperties( propertyMap, application );
 
-  Vector4 actualValue(Vector4::ZERO);
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "mixColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
+  END_TEST;
+}
 
-  factory.ResetRenderer( controlRenderer, actor, Color::GREEN );
-  application.SendNotification();
-  application.Render(0);
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "mixColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
+//Test if primitive shape loads correctly when supplied with all possible parameters
+int UtcDaliRendererFactoryGetPrimitiveRenderer2(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
-  factory.ResetRenderer( controlRenderer, actor, bufferImage );
+  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer2:  Request primitive renderer with everything" );
 
-  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);
+  //Set up renderer properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( "rendererType", "PRIMITIVE" );
+  propertyMap.Insert( "shape", "CUBE" );
+  propertyMap.Insert( "shapeColor", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
+  propertyMap.Insert( "slices", 10 );
+  propertyMap.Insert( "stacks", 20 );
+  propertyMap.Insert( "scaleTopRadius", 30.0f );
+  propertyMap.Insert( "scaleBottomRadius", 40.0f );
+  propertyMap.Insert( "scaleHeight", 50.0f );
+  propertyMap.Insert( "scaleRadius", 60.0f );
+  propertyMap.Insert( "bevelPercentage", 0.7f );
+  propertyMap.Insert( "bevelSmoothness", 0.8f );
+  propertyMap.Insert( "lightPosition", Vector3( 0.9, 1.0, 1.1 ) );
+
+  //Test to see if shape loads correctly.
+  TestPrimitiveRendererWithProperties( propertyMap, application );
 
   END_TEST;
 }
 
-int UtcDaliRendererFactoryResetRenderer2(void)
+//Test if primitive shape loads a sphere correctly.
+int UtcDaliRendererFactoryGetPrimitiveRenderer3(void)
 {
+  //Set up test application first, so everything else can be handled.
   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);
+  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer3:  Request primitive renderer to display a sphere" );
 
-  factory.ResetRenderer( controlRenderer, actor, Color::RED );
+  //Set up renderer properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( "rendererType", "PRIMITIVE" );
+  propertyMap.Insert( "shape", "SPHERE" );
+  propertyMap.Insert( "shapeColor", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
+  propertyMap.Insert( "slices", 10 );
+  propertyMap.Insert( "stacks", 20 );
 
-  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<Vector4>( "mixColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
+  //Test to see if shape loads correctly.
+  TestPrimitiveRendererWithProperties( propertyMap, application );
 
   END_TEST;
 }
 
-int UtcDaliRendererFactoryResetRenderer3(void)
+//Test if primitive shape loads a conic section correctly.
+int UtcDaliRendererFactoryGetPrimitiveRenderer4(void)
 {
+  //Set up test application first, so everything else can be handled.
   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 );
+  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer4:  Request primitive renderer to display a conic section" );
 
-  // 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();
+  //Set up renderer properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( "rendererType", "PRIMITIVE" );
+  propertyMap.Insert( "shape", "CONICAL_FRUSTRUM" );
+  propertyMap.Insert( "shapeColor", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
+  propertyMap.Insert( "slices", 10 );
+  propertyMap.Insert( "scaleTopRadius", 30.0f );
+  propertyMap.Insert( "scaleBottomRadius", 40.0f );
+  propertyMap.Insert( "scaleHeight", 50.0f );
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+  //Test to see if shape loads correctly.
+  TestPrimitiveRendererWithProperties( propertyMap, application );
 
-  // reset the renderer to renderer a svg image
-  factory.ResetRenderer( controlRenderer, actor, TEST_SVG_FILE_NAME, ImageDimensions( 100, 100 ) );
-  application.SendNotification();
-  application.Render();
+  END_TEST;
+}
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+//Test if primitive shape loads a bevelled cube correctly.
+int UtcDaliRendererFactoryGetPrimitiveRenderer5(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  EventThreadCallback* eventTrigger = EventThreadCallback::Get();
-  CallbackBase* callback = eventTrigger->GetCallback();
+  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer5:  Request primitive renderer to display a bevelled cube" );
 
-  eventTrigger->WaitingForTrigger( 1 );// waiting until the svg image is rasterized.
-  CallbackBase::Execute( *callback );
+  //Set up renderer properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( "rendererType", "PRIMITIVE" );
+  propertyMap.Insert( "shape", "BEVELLED_CUBE" );
+  propertyMap.Insert( "shapeColor", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
+  propertyMap.Insert( "bevelPercentage", 0.7f );
+
+  //Test to see if shape loads correctly.
+  TestPrimitiveRendererWithProperties( propertyMap, application );
 
   END_TEST;
 }
 
-//Test resetting mesh and primitive shape renderers
-int UtcDaliRendererFactoryResetRenderer4(void)
+//Test if primitive shape loads an octahedron correctly.
+int UtcDaliRendererFactoryGetPrimitiveRenderer6(void)
 {
+  //Set up test application first, so everything else can be handled.
   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;
-
-  //******
+  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer6:  Request primitive renderer to display an octahedron" );
 
-  //Start with basic color renderer
-  ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED );
-  DALI_TEST_CHECK( controlRenderer );
+  //Set up renderer properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( "rendererType", "PRIMITIVE" );
+  propertyMap.Insert( "shape", "OCTAHEDRON" );
+  propertyMap.Insert( "shapeColor", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
 
-  TestControlRendererRender( application, actor, controlRenderer );
+  //Test to see if shape loads correctly.
+  TestPrimitiveRendererWithProperties( propertyMap, application );
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+  END_TEST;
+}
 
-  //Ensure set correctly.
-  Vector4 actualValue( Vector4::ZERO );
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "mixColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
+//Test if primitive shape loads a cone correctly.
+int UtcDaliRendererFactoryGetPrimitiveRenderer7(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  //******
+  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer7:  Request primitive renderer to display a cone" );
 
-  //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 );
+  //Set up renderer properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( "rendererType", "PRIMITIVE" );
+  propertyMap.Insert( "shape", "CONE" );
+  propertyMap.Insert( "shapeColor", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
+  propertyMap.Insert( "slices", 10 );
+  propertyMap.Insert( "scaleTopRadius", 30.0f );
+  propertyMap.Insert( "scaleHeight", 50.0f );
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+  //Test to see if shape loads correctly.
+  TestPrimitiveRendererWithProperties( propertyMap, application );
 
-  //Tell the platform abstraction that the required resources have been loaded.
-  TestPlatformAbstraction& platform = application.GetPlatform();
-  platform.SetAllResourceRequestsAsLoaded();
+  END_TEST;
+}
 
-  //Render again to upload the now-loaded textures.
-  application.SendNotification();
-  application.Render( 0 );
+//Test if primitive shape loads correctly when light position is manually set.
+int UtcDaliRendererFactoryGetPrimitiveRenderer8(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  //Ensure set correctly.
-  controlRenderer.CreatePropertyMap( map );
-  DALI_TEST_EQUALS( map.Find( "objectUrl", Property::STRING )->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
+  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer8:  Request primitive renderer with set light position" );
 
-  Matrix testScaleMatrix;
-  testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) );
-  Matrix actualScaleMatrix;
+  //Set up renderer properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( "rendererType", "PRIMITIVE" );
+  propertyMap.Insert( "shape", "SPHERE" );
+  propertyMap.Insert( "shapeColor", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
+  propertyMap.Insert( "lightPosition", Vector3( 0.0, 1.0, 2.0 ) );
 
-  //Test to see if the object has been successfully loaded.
-  DALI_TEST_CHECK( gl.GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
-  DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+  //Test to see if shape loads correctly.
+  TestPrimitiveRendererWithProperties( propertyMap, application );
 
-  //******
+  END_TEST;
+}
 
-  //Reset back to color renderer
-  factory.ResetRenderer( controlRenderer, actor, Color::GREEN );
-  application.SendNotification();
-  application.Render( 0 );
+//Test if primitive shape renderer handles the case of not being passed a specific shape to use.
+int UtcDaliRendererFactoryGetPrimitiveRendererN1(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRendererN1:  Request primitive renderer without shape" );
 
-  //Ensure set correctly.
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "mixColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
+  //Set up renderer properties, without supplying shape.
+  Property::Map propertyMap;
+  propertyMap.Insert( "rendererType", "PRIMITIVE" );
 
-  //******
+  //Test to see if shape loads regardless of missing input.
+  TestPrimitiveRendererWithProperties( propertyMap, application );
 
   END_TEST;
 }