Merge "DALi Version 2.1.29" into devel/master
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-Scene.cpp
index a573a0b..c68905f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2022 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.
@@ -224,6 +224,50 @@ struct KeyEventGeneratedReceivedFunctor
   KeyEventGeneratedSignalData& signalData;
 };
 
+// Stores data that is populated in the WheelEventGeneratedSignal callback and will be read by the TET cases
+struct WheelEventGeneratedSignalData
+{
+  WheelEventGeneratedSignalData()
+  : functorCalled(false)
+  {
+  }
+
+  void Reset()
+  {
+    functorCalled = false;
+
+    receivedWheelEvent.Reset();
+  }
+
+  bool       functorCalled;
+  WheelEvent receivedWheelEvent;
+};
+
+// Functor that sets the data when called
+struct WheelEventGeneratedReceivedFunctor
+{
+  WheelEventGeneratedReceivedFunctor(WheelEventGeneratedSignalData& data)
+  : signalData(data)
+  {
+  }
+
+  bool operator()(const WheelEvent& wheelEvent)
+  {
+    signalData.functorCalled      = true;
+    signalData.receivedWheelEvent = wheelEvent;
+
+    return true;
+  }
+
+  bool operator()()
+  {
+    signalData.functorCalled = true;
+    return true;
+  }
+
+  WheelEventGeneratedSignalData& signalData;
+};
+
 void GenerateTouch(TestApplication& application, PointState::Type state, const Vector2& screenPosition)
 {
   Integration::TouchEvent touchEvent;
@@ -385,12 +429,26 @@ int UtcDaliSceneGet(void)
 
   Dali::Integration::Scene scene = application.GetScene();
 
-  Actor actor = Actor::New();
-  DALI_TEST_CHECK(Dali::Integration::Scene() == Dali::Integration::Scene::Get(actor));
+  Actor parent = Actor::New();
+  Actor child  = Actor::New();
 
-  scene.Add(actor);
+  parent.Add(child);
 
-  DALI_TEST_CHECK(scene == Dali::Integration::Scene::Get(actor));
+  // Should be empty scene
+  DALI_TEST_CHECK(Dali::Integration::Scene() == Dali::Integration::Scene::Get(parent));
+  DALI_TEST_CHECK(Dali::Integration::Scene() == Dali::Integration::Scene::Get(child));
+
+  scene.Add(parent);
+
+  // Should return the valid scene
+  DALI_TEST_CHECK(scene == Dali::Integration::Scene::Get(parent));
+  DALI_TEST_CHECK(scene == Dali::Integration::Scene::Get(child));
+
+  parent.Unparent();
+
+  // Should be empty scene
+  DALI_TEST_CHECK(Dali::Integration::Scene() == Dali::Integration::Scene::Get(parent));
+  DALI_TEST_CHECK(Dali::Integration::Scene() == Dali::Integration::Scene::Get(child));
 
   END_TEST;
 }
@@ -1702,3 +1760,117 @@ int UtcDaliSceneFrameRenderedPresentedCallback(void)
 
   END_TEST;
 }
+
+int UtcDaliSceneWheelEventGeneratedSignalP(void)
+{
+  TestApplication          application;
+  Dali::Integration::Scene scene = application.GetScene();
+
+  WheelEventGeneratedSignalData      data;
+  WheelEventGeneratedReceivedFunctor functor(data);
+  scene.WheelEventGeneratedSignal().Connect(&application, functor);
+
+  Integration::WheelEvent event(Integration::WheelEvent::CUSTOM_WHEEL, 0, 0u, Vector2(0.0f, 0.0f), 1, 1000u);
+  application.ProcessEvent(event);
+
+  DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION);
+  DALI_TEST_CHECK(static_cast<WheelEvent::Type>(event.type) == data.receivedWheelEvent.GetType());
+  DALI_TEST_CHECK(event.direction == data.receivedWheelEvent.GetDirection());
+  DALI_TEST_CHECK(event.modifiers == data.receivedWheelEvent.GetModifiers());
+  DALI_TEST_CHECK(event.point == data.receivedWheelEvent.GetPoint());
+  DALI_TEST_CHECK(event.delta == data.receivedWheelEvent.GetDelta());
+  DALI_TEST_CHECK(event.timeStamp == data.receivedWheelEvent.GetTime());
+
+  data.Reset();
+
+  Integration::WheelEvent event2(Integration::WheelEvent::CUSTOM_WHEEL, 0, 0u, Vector2(0.0f, 0.0f), -1, 1000u);
+  application.ProcessEvent(event2);
+
+  DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION);
+  DALI_TEST_CHECK(static_cast<WheelEvent::Type>(event2.type) == data.receivedWheelEvent.GetType());
+  DALI_TEST_CHECK(event2.direction == data.receivedWheelEvent.GetDirection());
+  DALI_TEST_CHECK(event2.modifiers == data.receivedWheelEvent.GetModifiers());
+  DALI_TEST_CHECK(event2.point == data.receivedWheelEvent.GetPoint());
+  DALI_TEST_CHECK(event2.delta == data.receivedWheelEvent.GetDelta());
+  DALI_TEST_CHECK(event2.timeStamp == data.receivedWheelEvent.GetTime());
+  END_TEST;
+}
+
+int UtcDaliSceneSignalInterceptKeyEventP(void)
+{
+  TestApplication          application;
+  Dali::Integration::Scene scene = application.GetScene();
+
+  KeyEventSignalData      data;
+  KeyEventReceivedFunctor functor(data);
+  scene.KeyEventSignal().Connect(&application, functor);
+
+  KeyEventGeneratedSignalData      interceptData;
+  KeyEventGeneratedReceivedFunctor interceptFunctor(interceptData);
+  scene.InterceptKeyEventSignal().Connect(&application, interceptFunctor);
+
+  Integration::KeyEvent event("i", "", "i", 0, 0, 0, Integration::KeyEvent::DOWN, "i", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE);
+  application.ProcessEvent(event);
+
+  DALI_TEST_EQUALS(true, interceptData.functorCalled, TEST_LOCATION);
+  DALI_TEST_CHECK(event.keyModifier == interceptData.receivedKeyEvent.GetKeyModifier());
+  DALI_TEST_CHECK(event.keyName == interceptData.receivedKeyEvent.GetKeyName());
+  DALI_TEST_CHECK(event.keyString == interceptData.receivedKeyEvent.GetKeyString());
+  DALI_TEST_CHECK(event.state == static_cast<Integration::KeyEvent::State>(interceptData.receivedKeyEvent.GetState()));
+  DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION);
+
+  data.Reset();
+  interceptData.Reset();
+
+  Integration::KeyEvent event2("i", "", "i", 0, 0, 0, Integration::KeyEvent::UP, "i", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE);
+  application.ProcessEvent(event2);
+
+  DALI_TEST_EQUALS(true, interceptData.functorCalled, TEST_LOCATION);
+  DALI_TEST_CHECK(event2.keyModifier == interceptData.receivedKeyEvent.GetKeyModifier());
+  DALI_TEST_CHECK(event2.keyName == interceptData.receivedKeyEvent.GetKeyName());
+  DALI_TEST_CHECK(event2.keyString == interceptData.receivedKeyEvent.GetKeyString());
+  DALI_TEST_CHECK(event2.state == static_cast<Integration::KeyEvent::State>(interceptData.receivedKeyEvent.GetState()));
+  DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION);
+
+  data.Reset();
+  interceptData.Reset();
+
+  Integration::KeyEvent event3("a", "", "a", 0, 0, 0, Integration::KeyEvent::DOWN, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE);
+  application.ProcessEvent(event3);
+
+  DALI_TEST_EQUALS(true, interceptData.functorCalled, TEST_LOCATION);
+  DALI_TEST_CHECK(event3.keyModifier == interceptData.receivedKeyEvent.GetKeyModifier());
+  DALI_TEST_CHECK(event3.keyName == interceptData.receivedKeyEvent.GetKeyName());
+  DALI_TEST_CHECK(event3.keyString == interceptData.receivedKeyEvent.GetKeyString());
+  DALI_TEST_CHECK(event3.state == static_cast<Integration::KeyEvent::State>(interceptData.receivedKeyEvent.GetState()));
+  DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION);
+
+  data.Reset();
+  interceptData.Reset();
+
+  Integration::KeyEvent event4("a", "", "a", 0, 0, 0, Integration::KeyEvent::UP, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE);
+  application.ProcessEvent(event4);
+
+  DALI_TEST_EQUALS(true, interceptData.functorCalled, TEST_LOCATION);
+  DALI_TEST_CHECK(event4.keyModifier == interceptData.receivedKeyEvent.GetKeyModifier());
+  DALI_TEST_CHECK(event4.keyName == interceptData.receivedKeyEvent.GetKeyName());
+  DALI_TEST_CHECK(event4.keyString == interceptData.receivedKeyEvent.GetKeyString());
+  DALI_TEST_CHECK(event4.state == static_cast<Integration::KeyEvent::State>(interceptData.receivedKeyEvent.GetState()));
+  DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION);
+  END_TEST;
+}
+
+int UtcDaliSceneSignalInterceptKeyEventN(void)
+{
+  TestApplication          application;
+  Dali::Integration::Scene scene = application.GetScene();
+
+  KeyEventGeneratedSignalData      data;
+  KeyEventGeneratedReceivedFunctor functor(data);
+  scene.InterceptKeyEventSignal().Connect(&application, functor);
+
+  // Check that a non-pressed key events data is not modified.
+  DALI_TEST_EQUALS(false, data.functorCalled, TEST_LOCATION);
+
+  END_TEST;
+}
\ No newline at end of file