Modify ColorMode Policy for SceneView and Model
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-scene3d / utc-Dali-Model.cpp
index c18924b..02393e3 100644 (file)
@@ -41,14 +41,16 @@ void model_cleanup(void)
 namespace
 {
 const bool DEFAULT_MODEL_CHILDREN_SENSITIVE = false;
+const bool DEFAULT_MODEL_CHILDREN_FOCUSABLE = false;
 /**
  * For the AnimatedCube.gltf and its Assets
  * Donated by Norbert Nopper for glTF testing.
  * Take from https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/AnimatedCube
  */
-const char* TEST_GLTF_FILE_NAME                = TEST_RESOURCE_DIR "/AnimatedCube.gltf";
-const char* TEST_GLTF_ANIMATION_TEST_FILE_NAME = TEST_RESOURCE_DIR "/animationTest.gltf";
-const char* TEST_DLI_FILE_NAME                 = TEST_RESOURCE_DIR "/arc.dli";
+const char* TEST_GLTF_FILE_NAME                    = TEST_RESOURCE_DIR "/AnimatedCube.gltf";
+const char* TEST_GLTF_ANIMATION_TEST_FILE_NAME     = TEST_RESOURCE_DIR "/animationTest.gltf";
+const char* TEST_GLTF_MULTIPLE_PRIMITIVE_FILE_NAME = TEST_RESOURCE_DIR "/simpleMultiplePrimitiveTest.gltf";
+const char* TEST_DLI_FILE_NAME                     = TEST_RESOURCE_DIR "/arc.dli";
 /**
  * For the diffuse and specular cube map texture.
  * These textures are based off version of Wave engine sample
@@ -84,6 +86,12 @@ bool TestTouchCallback(Actor, const TouchEvent&)
   return true;
 }
 
+bool gFocusChangedCallBackCalled = false;
+void TestFocusChangedCallback(Actor, Actor)
+{
+  gFocusChangedCallBackCalled = true;
+}
+
 } // namespace
 
 // Negative test case for a method
@@ -331,15 +339,15 @@ int UtcDaliModelSetImageBasedLightSource01(void)
   DALI_TEST_CHECK(renderer);
 
   TextureSet textureSet = renderer.GetTextures();
-  DALI_TEST_EQUALS(textureSet.GetTextureCount(), 7u, TEST_LOCATION);
+  DALI_TEST_EQUALS(textureSet.GetTextureCount(), 9u, TEST_LOCATION);
 
-  Texture diffuseTexture  = textureSet.GetTexture(5u);
-  Texture specularTexture = textureSet.GetTexture(6u);
+  Texture diffuseTexture  = textureSet.GetTexture(7u);
+  Texture specularTexture = textureSet.GetTexture(8u);
 
   model.SetImageBasedLightSource(TEST_DIFFUSE_TEXTURE, TEST_SPECULAR_TEXTURE);
 
-  Texture newDiffuseTexture  = textureSet.GetTexture(5u);
-  Texture newSpecularTexture = textureSet.GetTexture(6u);
+  Texture newDiffuseTexture  = textureSet.GetTexture(7u);
+  Texture newSpecularTexture = textureSet.GetTexture(8u);
 
   DALI_TEST_NOT_EQUALS(diffuseTexture, newDiffuseTexture, 0.0f, TEST_LOCATION);
   DALI_TEST_NOT_EQUALS(specularTexture, newSpecularTexture, 0.0f, TEST_LOCATION);
@@ -365,15 +373,15 @@ int UtcDaliModelSetImageBasedLightSource02(void)
   DALI_TEST_CHECK(renderer);
 
   TextureSet textureSet = renderer.GetTextures();
-  DALI_TEST_EQUALS(textureSet.GetTextureCount(), 7u, TEST_LOCATION);
+  DALI_TEST_EQUALS(textureSet.GetTextureCount(), 9u, TEST_LOCATION);
 
-  Texture diffuseTexture  = textureSet.GetTexture(5u);
-  Texture specularTexture = textureSet.GetTexture(6u);
+  Texture diffuseTexture  = textureSet.GetTexture(7u);
+  Texture specularTexture = textureSet.GetTexture(8u);
 
   model.SetImageBasedLightSource("", "");
 
-  Texture newDiffuseTexture  = textureSet.GetTexture(5u);
-  Texture newSpecularTexture = textureSet.GetTexture(6u);
+  Texture newDiffuseTexture  = textureSet.GetTexture(7u);
+  Texture newSpecularTexture = textureSet.GetTexture(8u);
 
   DALI_TEST_EQUALS(diffuseTexture, newDiffuseTexture, TEST_LOCATION);
   DALI_TEST_EQUALS(specularTexture, newSpecularTexture, TEST_LOCATION);
@@ -399,15 +407,15 @@ int UtcDaliModelSetImageBasedLightSource03(void)
   DALI_TEST_CHECK(renderer);
 
   TextureSet textureSet = renderer.GetTextures();
-  DALI_TEST_EQUALS(textureSet.GetTextureCount(), 7u, TEST_LOCATION);
+  DALI_TEST_EQUALS(textureSet.GetTextureCount(), 9u, TEST_LOCATION);
 
-  Texture diffuseTexture  = textureSet.GetTexture(5u);
-  Texture specularTexture = textureSet.GetTexture(6u);
+  Texture diffuseTexture  = textureSet.GetTexture(7u);
+  Texture specularTexture = textureSet.GetTexture(8u);
 
   model.SetImageBasedLightSource("dummy.ktx", "dummy.ktx");
 
-  Texture newDiffuseTexture  = textureSet.GetTexture(5u);
-  Texture newSpecularTexture = textureSet.GetTexture(6u);
+  Texture newDiffuseTexture  = textureSet.GetTexture(7u);
+  Texture newSpecularTexture = textureSet.GetTexture(8u);
 
   DALI_TEST_EQUALS(diffuseTexture, newDiffuseTexture, TEST_LOCATION);
   DALI_TEST_EQUALS(specularTexture, newSpecularTexture, TEST_LOCATION);
@@ -587,6 +595,187 @@ int UtcDaliModelChildrenSensitive02(void)
   END_TEST;
 }
 
+int UtcDaliModelChildrenFocusable01(void)
+{
+  ToolkitTestApplication application;
+
+  Scene3D::Model view = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
+  view.SetProperty(Dali::Actor::Property::SIZE, Vector3(100, 100, 100));
+  view.SetProperty(Dali::Actor::Property::POSITION, Vector3(0, 0, 0));
+  view.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+  view.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+
+  // Get vaule. Default is false.
+  DALI_TEST_EQUALS(view.GetChildrenFocusable(), DEFAULT_MODEL_CHILDREN_FOCUSABLE, TEST_LOCATION);
+
+  // Allow children actor's focus before on scene.
+  view.SetChildrenFocusable(true);
+  DALI_TEST_EQUALS(view.GetChildrenFocusable(), true, TEST_LOCATION);
+
+  application.GetScene().Add(view);
+
+  application.SendNotification();
+  application.Render();
+
+  Actor meshActor = view.FindChildByName("AnimatedCube");
+  DALI_TEST_CHECK(meshActor);
+
+  // Enable the default algorithm
+  KeyboardFocusManager manager = KeyboardFocusManager::Get();
+  DALI_TEST_CHECK(manager);
+  Dali::Toolkit::DevelKeyboardFocusManager::EnableDefaultAlgorithm(manager, true);
+
+  // connect focusable signal
+  gFocusChangedCallBackCalled = false;
+  meshActor.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
+  manager.FocusChangedSignal().Connect(TestFocusChangedCallback);
+
+  // Initialize with some left-positioned actor
+  Control focusStartActor = Control::New();
+  focusStartActor.SetProperty(Dali::Actor::Property::SIZE, Vector3(100, 100, 100));
+  focusStartActor.SetProperty(Dali::Actor::Property::POSITION, Vector3(-200, 0, 0));
+  focusStartActor.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+  focusStartActor.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+  focusStartActor.SetProperty(Dali::Actor::Property::KEYBOARD_FOCUSABLE, true);
+  application.GetScene().Add(focusStartActor);
+
+  // Clear
+  manager.ClearFocus();
+  manager.SetCurrentFocusActor(focusStartActor);
+  gFocusChangedCallBackCalled = false;
+
+  // flush the queue and render once
+  application.SendNotification();
+  application.Render();
+
+  // Focusable view find success
+  DALI_TEST_CHECK(manager.MoveFocus(Control::KeyboardFocus::RIGHT) == true);
+  DALI_TEST_CHECK(gFocusChangedCallBackCalled);
+
+  // Clear
+  manager.ClearFocus();
+  manager.SetCurrentFocusActor(focusStartActor);
+  gFocusChangedCallBackCalled = false;
+
+  // Block children actor's focus
+  view.SetChildrenFocusable(false);
+  DALI_TEST_EQUALS(view.GetChildrenFocusable(), false, TEST_LOCATION);
+
+  // flush the queue and render once
+  application.SendNotification();
+  application.Render();
+
+  // Focusable view find failed
+  DALI_TEST_CHECK(manager.MoveFocus(Control::KeyboardFocus::RIGHT) == false);
+  DALI_TEST_CHECK(!gFocusChangedCallBackCalled);
+
+  // Clear
+  manager.ClearFocus();
+  manager.SetCurrentFocusActor(focusStartActor);
+  gFocusChangedCallBackCalled = false;
+
+  // Allow again
+  view.SetChildrenFocusable(true);
+  DALI_TEST_EQUALS(view.GetChildrenFocusable(), true, TEST_LOCATION);
+
+  // flush the queue and render once
+  application.SendNotification();
+  application.Render();
+
+  // Focusable view find success
+  DALI_TEST_CHECK(manager.MoveFocus(Control::KeyboardFocus::RIGHT) == true);
+  DALI_TEST_CHECK(gFocusChangedCallBackCalled);
+
+  // Clear
+  manager.ClearFocus();
+  manager.SetCurrentFocusActor(focusStartActor);
+  gFocusChangedCallBackCalled = false;
+
+  END_TEST;
+}
+
+int UtcDaliModelModelChildrenFocusable02(void)
+{
+  ToolkitTestApplication application;
+
+  Scene3D::Model view = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
+  view.SetProperty(Dali::Actor::Property::SIZE, Vector3(100, 100, 100));
+  view.SetProperty(Dali::Actor::Property::POSITION, Vector3(0, 0, 0));
+  view.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+  view.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+
+  // Get vaule. Default is true.
+  DALI_TEST_EQUALS(view.GetChildrenFocusable(), DEFAULT_MODEL_CHILDREN_FOCUSABLE, TEST_LOCATION);
+
+  // Block children actor's focus before on scene.
+  view.SetChildrenFocusable(false);
+  DALI_TEST_EQUALS(view.GetChildrenFocusable(), false, TEST_LOCATION);
+
+  application.GetScene().Add(view);
+
+  application.SendNotification();
+  application.Render();
+
+  Actor meshActor = view.FindChildByName("AnimatedCube");
+  DALI_TEST_CHECK(meshActor);
+
+  // Enable the default algorithm
+  KeyboardFocusManager manager = KeyboardFocusManager::Get();
+  DALI_TEST_CHECK(manager);
+  Dali::Toolkit::DevelKeyboardFocusManager::EnableDefaultAlgorithm(manager, true);
+
+  // connect focusable signal
+  gFocusChangedCallBackCalled = false;
+  meshActor.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
+  manager.FocusChangedSignal().Connect(TestFocusChangedCallback);
+
+  // Initialize with some left-positioned actor
+  Control focusStartActor = Control::New();
+  focusStartActor.SetProperty(Dali::Actor::Property::SIZE, Vector3(100, 100, 100));
+  focusStartActor.SetProperty(Dali::Actor::Property::POSITION, Vector3(-200, 0, 0));
+  focusStartActor.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+  focusStartActor.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+  focusStartActor.SetProperty(Dali::Actor::Property::KEYBOARD_FOCUSABLE, true);
+  application.GetScene().Add(focusStartActor);
+
+  // Clear
+  manager.ClearFocus();
+  manager.SetCurrentFocusActor(focusStartActor);
+  gFocusChangedCallBackCalled = false;
+
+  // flush the queue and render once
+  application.SendNotification();
+  application.Render();
+
+  // Focusable view find failed
+  DALI_TEST_CHECK(manager.MoveFocus(Control::KeyboardFocus::RIGHT) == false);
+  DALI_TEST_CHECK(!gFocusChangedCallBackCalled);
+
+  // Clear
+  manager.ClearFocus();
+  manager.SetCurrentFocusActor(focusStartActor);
+  gFocusChangedCallBackCalled = false;
+
+  // Allow again
+  view.SetChildrenFocusable(true);
+  DALI_TEST_EQUALS(view.GetChildrenFocusable(), true, TEST_LOCATION);
+
+  // flush the queue and render once
+  application.SendNotification();
+  application.Render();
+
+  // Focusable view find success
+  DALI_TEST_CHECK(manager.MoveFocus(Control::KeyboardFocus::RIGHT) == true);
+  DALI_TEST_CHECK(gFocusChangedCallBackCalled);
+
+  // Clear
+  manager.ClearFocus();
+  manager.SetCurrentFocusActor(focusStartActor);
+  gFocusChangedCallBackCalled = false;
+
+  END_TEST;
+}
+
 int UtcDaliModelAnimation01(void)
 {
   ToolkitTestApplication application;
@@ -640,6 +829,49 @@ int UtcDaliModelAnimation02(void)
   END_TEST;
 }
 
+int UtcDaliModelMultiplePrimitives(void)
+{
+  ToolkitTestApplication application;
+
+  Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_MULTIPLE_PRIMITIVE_FILE_NAME);
+  model.SetProperty(Dali::Actor::Property::SIZE, Vector2(50, 50));
+
+  application.GetScene().Add(model);
+
+  application.SendNotification();
+  application.Render();
+
+  Actor actor = model.FindChildByName("rootNode");
+
+  DALI_TEST_EQUALS(0, actor.GetChildCount(), TEST_LOCATION);
+  DALI_TEST_EQUALS(2, actor.GetRendererCount(), TEST_LOCATION);
+
+  END_TEST;
+}
+
+int UtcDaliModelColorMode(void)
+{
+  ToolkitTestApplication application;
+
+  Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
+  model.SetProperty(Dali::Actor::Property::SIZE, Vector2(50, 50));
+  model.SetProperty(Dali::Actor::Property::COLOR, Color::RED);
+
+  application.GetScene().Add(model);
+
+  application.SendNotification();
+  application.Render();
+
+  Actor actor = model.FindChildByName("AnimatedCube");
+  Vector4 childColor = actor[Dali::Actor::Property::COLOR];
+  Vector4 childWorldColor = actor[Dali::Actor::Property::WORLD_COLOR];
+
+  DALI_TEST_EQUALS(childColor, Color::WHITE, TEST_LOCATION);
+  DALI_TEST_EQUALS(childWorldColor, Color::RED, TEST_LOCATION);
+
+  END_TEST;
+}
+
 // For ResourceReady
 namespace
 {