Processor interface moved from core.h
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / dali-toolkit-test-utils / toolkit-singleton-service.cpp
index 73cd4c8..7ba5ca4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 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.
  *
  */
 
-#include "toolkit-singleton-service.h"
+#include <toolkit-singleton-service.h>
 
-#include <dali/public-api/common/dali-common.h>
+#include <dali-toolkit/public-api/dali-toolkit-common.h>
 #include <dali/public-api/object/base-object.h>
 #include <dali/devel-api/common/map-wrapper.h>
 #include <dali/public-api/signals/dali-signal.h>
+#include <dali/integration-api/processor-interface.h>
 
 namespace Dali
 {
@@ -31,102 +32,138 @@ namespace Internal
 namespace Adaptor
 {
 
-/**
- * Stub for the SingletonService
- */
-class SingletonService : public Dali::BaseObject
+namespace
 {
-public:
-  static Dali::SingletonService New();
-  static Dali::SingletonService Get();
-  void Register( const std::type_info& info, BaseHandle singleton );
-  BaseHandle GetSingleton( const std::type_info& info ) const;
-
-private:
-  SingletonService();
-  virtual ~SingletonService();
-
-  // Undefined
-  SingletonService( const SingletonService& );
-  SingletonService& operator=( SingletonService& );
+Dali::IntrusivePtr<SingletonService> gSingletonService;
+} // unnamed namespace
 
-private:
 
-  typedef std::pair<std::string, BaseHandle> SingletonPair;
-  typedef std::map<std::string, BaseHandle>  SingletonContainer;
-  typedef SingletonContainer::const_iterator SingletonConstIter;
+class SingletonService : public Dali::BaseObject
+{
+public:
 
-  SingletonContainer mSingletonContainer; ///< The container to look up singleton by its type name
+  /**
+   * Create a SingletonService.
+   * This should only be called once by the Application class.
+   * @return A newly created SingletonService.
+   */
+  static Dali::SingletonService New()
+  {
+    DALI_ASSERT_ALWAYS( 0 && "SingletonService New method used");
+    gSingletonService = Dali::IntrusivePtr<SingletonService>( new SingletonService() );
+    return Dali::SingletonService( gSingletonService.Get() );
+  }
 
-  static Dali::SingletonService mToolkitSingletonService;
-};
+  /**
+   * @copydoc Dali::SingletonService::Get()
+   */
+  static Dali::SingletonService Get()
+  {
+    Dali::SingletonService singletonService;
+    if ( !gSingletonService )
+    {
+      gSingletonService = Dali::IntrusivePtr<SingletonService>( new SingletonService() );
+    }
+    return Dali::SingletonService( gSingletonService.Get() );
+  }
 
-Dali::SingletonService SingletonService::mToolkitSingletonService;
+  /**
+   * @copydoc Dali::SingletonService::Register()
+   */
+  void Register( const std::type_info& info, BaseHandle singleton )
+  {
+    if( singleton )
+    {
+      mSingletonContainer.insert( SingletonPair( info.name(), singleton ) );
+
+      Integration::Processor* processor = dynamic_cast<Integration::Processor*>( &singleton.GetBaseObject() );
+      if( processor )
+      {
+        Integration::Core& core = mTestApplication->GetCore();
+        core.RegisterProcessor( *processor );
+      }
+    }
+  }
 
-Dali::SingletonService SingletonService::New()
-{
-  return Get();
-}
+  /**
+   * @copydoc Dali::SingletonService::UnregisterAll()
+   */
+  void UnregisterAll()
+  {
+    mSingletonContainer.clear();
+  }
 
-Dali::SingletonService SingletonService::Get()
-{
-  if( ! mToolkitSingletonService )
+  /**
+   * @copydoc Dali::SingletonService::GetSingleton()
+   */
+  BaseHandle GetSingleton( const std::type_info& info ) const
   {
-    mToolkitSingletonService = Dali::SingletonService( new Dali::Internal::Adaptor::SingletonService );
+    BaseHandle object;
+
+    SingletonConstIter iter = mSingletonContainer.find(info.name());
+    if( iter != mSingletonContainer.end() )
+    {
+      object = ( *iter ).second;
+    }
+    return object;
   }
-  return mToolkitSingletonService;
-}
 
-void SingletonService::Register( const std::type_info& info, BaseHandle singleton )
-{
-  if( singleton )
+  void SetApplication( Dali::TestApplication& testApplication )
   {
-    mSingletonContainer.insert( SingletonPair( info.name(), singleton ) );
+    mTestApplication = &testApplication;
   }
-}
 
-BaseHandle SingletonService::GetSingleton( const std::type_info& info ) const
-{
-  BaseHandle object;
+private:
 
-  SingletonConstIter iter = mSingletonContainer.find(info.name());
-  if( iter != mSingletonContainer.end() )
+  /**
+   * Private Constructor
+   * @see SingletonService::New()
+   */
+  SingletonService()
+  : mSingletonContainer()
   {
-    object = ( *iter ).second;
+    // Can only have one instance of SingletonService
+    DALI_ASSERT_ALWAYS( !gSingletonService && "Only one instance of SingletonService is allowed");
+    gSingletonService = this;
   }
 
-  return object;
-}
+  /**
+   * Virtual Destructor
+   */
+  virtual ~SingletonService()
+  {
+    gSingletonService = 0;
+  }
 
-SingletonService::SingletonService()
-: mSingletonContainer()
-{
-}
+  // Undefined
+  SingletonService( const SingletonService& );
+  SingletonService& operator=( SingletonService& );
 
-SingletonService::~SingletonService()
-{
-}
+private:
+  typedef std::pair<std::string, BaseHandle> SingletonPair;
+  typedef std::map<std::string, BaseHandle>  SingletonContainer;
+  typedef SingletonContainer::const_iterator SingletonConstIter;
+
+  SingletonContainer mSingletonContainer; ///< The container to look up singleton by its type name
+  TestApplication* mTestApplication;
+};
 
 } // namespace Adaptor
 } // namespace Internal
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 
-Internal::Adaptor::SingletonService& GetImplementation(Dali::SingletonService& player)
+inline Internal::Adaptor::SingletonService& GetImplementation(Dali::SingletonService& player)
 {
   DALI_ASSERT_ALWAYS( player && "SingletonService handle is empty" );
-
   BaseObject& handle = player.GetBaseObject();
-
   return static_cast<Internal::Adaptor::SingletonService&>(handle);
 }
 
-const Internal::Adaptor::SingletonService& GetImplementation(const Dali::SingletonService& player)
+inline const Internal::Adaptor::SingletonService& GetImplementation(const Dali::SingletonService& player)
 {
   DALI_ASSERT_ALWAYS( player && "SingletonService handle is empty" );
-
   const BaseObject& handle = player.GetBaseObject();
-
   return static_cast<const Internal::Adaptor::SingletonService&>(handle);
 }
 
@@ -134,6 +171,11 @@ SingletonService::SingletonService()
 {
 }
 
+SingletonService SingletonService::New()
+{
+  return Internal::Adaptor::SingletonService::New();
+}
+
 SingletonService SingletonService::Get()
 {
   return Internal::Adaptor::SingletonService::Get();
@@ -148,6 +190,11 @@ void SingletonService::Register( const std::type_info& info, BaseHandle singleto
   GetImplementation( *this ).Register( info, singleton );
 }
 
+void SingletonService::UnregisterAll()
+{
+  GetImplementation( *this ).UnregisterAll();
+}
+
 BaseHandle SingletonService::GetSingleton( const std::type_info& info ) const
 {
   return GetImplementation( *this ).GetSingleton( info );
@@ -159,3 +206,14 @@ SingletonService::SingletonService( Internal::Adaptor::SingletonService* singlet
 }
 
 } // namespace Dali
+
+
+namespace Test
+{
+
+void SetApplication( Dali::SingletonService singletonService, TestApplication& testApplication )
+{
+  GetImplementation( singletonService ).SetApplication( testApplication );
+}
+
+} // Test