Skip to content
Snippets Groups Projects
factory.cpp 3.56 KiB
Newer Older
Thomas Moulard's avatar
Thomas Moulard committed
// Copyright 2010 Thomas Moulard.
//

#include <sstream>
#include <dynamic-graph/factory.h>
#include <dynamic-graph/entity.h>
#include <dynamic-graph/exception-factory.h>

#define BOOST_TEST_MODULE factory

#include <boost/test/unit_test.hpp>
#include <boost/test/output_test_stream.hpp>

using boost::test_tools::output_test_stream;



namespace dynamicgraph
{
  class CustomEntity : public Entity
  {
  public:
    static const std::string CLASS_NAME;
    virtual const std::string& getClassName () const
    {
      return CLASS_NAME;
    }
    CustomEntity (const std::string n)
      : Entity (n)
    {
    }
  };
  const std::string CustomEntity::CLASS_NAME = "CustomEntity";
}


Thomas Moulard's avatar
Thomas Moulard committed
dynamicgraph::Entity* makeEntity(const std::string& objectName)
{
  return new dynamicgraph::CustomEntity (objectName);
Thomas Moulard's avatar
Thomas Moulard committed
}


BOOST_AUTO_TEST_CASE (constructor)
{
  dynamicgraph::FactoryStorage::getInstance();
Thomas Moulard's avatar
Thomas Moulard committed
}

BOOST_AUTO_TEST_CASE (registerEntity)
{
  dynamicgraph::FactoryStorage::getInstance()->registerEntity
    ("myEntity", &makeEntity);
      dynamicgraph::FactoryStorage::getInstance()->registerEntity
	("myEntity", &makeEntity);
Thomas Moulard's avatar
Thomas Moulard committed
      BOOST_ERROR ("Should never happen.");
    }
  catch (const dynamicgraph::ExceptionFactory& exception)
    {
      BOOST_CHECK_EQUAL (exception.getCode (),
			 dynamicgraph::ExceptionFactory::OBJECT_CONFLICT);
    }

  try
    {
      dynamicgraph::FactoryStorage::getInstance()->registerEntity
	("myEntity", 0);
Thomas Moulard's avatar
Thomas Moulard committed
      BOOST_ERROR ("Should never happen.");
    }
  catch (const dynamicgraph::ExceptionFactory& exception)
    {
      BOOST_CHECK_EQUAL (exception.getCode (),
			 dynamicgraph::ExceptionFactory::OBJECT_CONFLICT);
    }
}

BOOST_AUTO_TEST_CASE (unregisterEntity)
{
  dynamicgraph::FactoryStorage::getInstance()->deregisterEntity ("myEntity");
      dynamicgraph::FactoryStorage::getInstance()->deregisterEntity("myEntity");
Thomas Moulard's avatar
Thomas Moulard committed
      BOOST_ERROR ("Should never happen.");
    }
  catch (const dynamicgraph::ExceptionFactory& exception)
    {
      BOOST_CHECK_EQUAL (exception.getCode (),
			 dynamicgraph::ExceptionFactory::OBJECT_CONFLICT);
    }

  try
    {
      dynamicgraph::FactoryStorage::getInstance()->deregisterEntity
	("I do not exist.");
Thomas Moulard's avatar
Thomas Moulard committed
      BOOST_ERROR ("Should never happen.");
    }
  catch (const dynamicgraph::ExceptionFactory& exception)
    {
      BOOST_CHECK_EQUAL (exception.getCode (),
			 dynamicgraph::ExceptionFactory::OBJECT_CONFLICT);
    }
}

BOOST_AUTO_TEST_CASE (newEntity)
{
  dynamicgraph::FactoryStorage::getInstance()->registerEntity
    ("myEntity", &makeEntity);
Thomas Moulard's avatar
Thomas Moulard committed

  {
    boost::shared_ptr<dynamicgraph::Entity> entity
      (dynamicgraph::FactoryStorage::getInstance()->newEntity
       ("myEntity", "foo"));
Thomas Moulard's avatar
Thomas Moulard committed

    boost::shared_ptr<dynamicgraph::Entity> entity2
      (dynamicgraph::FactoryStorage::getInstance()->newEntity
       ("myEntity", "foo2"));
Thomas Moulard's avatar
Thomas Moulard committed

    boost::shared_ptr<dynamicgraph::Entity> entity3
      (dynamicgraph::FactoryStorage::getInstance()->newEntity
       ("myEntity", ""));
      dynamicgraph::FactoryStorage::getInstance()->newEntity
	("I do not exist.", "");
Thomas Moulard's avatar
Thomas Moulard committed
      BOOST_ERROR ("Should never happen.");
    }
  catch (const dynamicgraph::ExceptionFactory& exception)
    {
      BOOST_CHECK_EQUAL (exception.getCode (),
Thomas Moulard's avatar
Thomas Moulard committed
			 dynamicgraph::ExceptionFactory::UNREFERED_OBJECT);
Thomas Moulard's avatar
Thomas Moulard committed
    }
}

BOOST_AUTO_TEST_CASE (existEntity)
{
  BOOST_CHECK (dynamicgraph::FactoryStorage::getInstance()->existEntity
	       ("myEntity"));
  BOOST_CHECK (!dynamicgraph::FactoryStorage::getInstance()->existEntity
	       ("myEntity2"));
  BOOST_CHECK (!dynamicgraph::FactoryStorage::getInstance()->existEntity (""));
Thomas Moulard's avatar
Thomas Moulard committed
}