Skip to content
Snippets Groups Projects
command-test.cpp 3.73 KiB
Newer Older
/* Copyright 2019, LAAS-CNRS
 *
 * Olivier Stasse
 *
 * See LICENSE file
 *
 */
#include <sstream>
#include <iostream>
#include <dynamic-graph/entity.h>
#include <dynamic-graph/exception-factory.h>
#include "dynamic-graph/factory.h"
#include "dynamic-graph/pool.h"
#include "dynamic-graph/command-bind.h"

#define ENABLE_RT_LOG
#include <dynamic-graph/real-time-logger.h>
#include <dynamic-graph/logger.h>

Bergé's avatar
Bergé committed
#define BOOST_TEST_MODULE debug - logger

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

using boost::test_tools::output_test_stream;

using namespace dynamicgraph::command;

namespace dynamicgraph
{
  class CustomEntity : public Entity
  {
  public:
    static const std::string CLASS_NAME;
    bool test_zero_arg_;
    bool test_one_arg_;
    bool test_two_args_;
    bool test_three_args_;
    bool test_four_args_;
    
    virtual const std::string &getClassName() const { return CLASS_NAME; }
    CustomEntity(const std::string n) : Entity(n)
    {
      test_zero_arg_ = false;
      test_one_arg_ = false;
      test_two_args_ = false;
      test_three_args_ = false;
      test_four_args_ = false;
      
      addCommand("0_arg",
                 makeCommandVoid0(*this, &CustomEntity::zero_arg,
                                  docCommandVoid0("zero arg")));
      
      addCommand("1_arg",
                 makeCommandVoid1(*this, &CustomEntity::one_arg,
                                  docCommandVoid1("one arg", "int")));

      addCommand("2_args",
                 makeCommandVoid2(*this, &CustomEntity::two_args,
                                  docCommandVoid2("two args", "int", "int")));

      addCommand("3_args",
                 makeCommandVoid3(*this, &CustomEntity::three_args,
                                  docCommandVoid3("three args",
                                                  "int", "int", "int")));

      addCommand("4_args",
                 makeCommandVoid4(*this, &CustomEntity::four_args,
                                  docCommandVoid4("four args", "int",
                                                  "int", "int", "int")));
    }

    ~CustomEntity() {}

    void zero_arg() { test_zero_arg_ = true; }

    void one_arg(const int &) { test_one_arg_ = true; }

    void two_args(const int &, const int &) { test_two_args_ = true; }

    void three_args(const int &, const int &, const int &)
    { test_three_args_ = true; }

    void four_args(const int &, const int &, const int &, const int &)
    { test_four_args_ = true; }
  };
  DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(CustomEntity, "CustomEntity");
Bergé's avatar
Bergé committed
}  // namespace dynamicgraph

BOOST_AUTO_TEST_CASE(command_test)
{
  dynamicgraph::CustomEntity &entity =
    *(dynamic_cast<dynamicgraph::CustomEntity *>
      (dynamicgraph::FactoryStorage::getInstance()->
       newEntity("CustomEntity", "my-entity")));
Bergé's avatar
Bergé committed

  std::map<const std::string, Command *> aCommandMap =
    entity.getNewStyleCommandMap();
Bergé's avatar
Bergé committed

  std::map<const std::string, Command *>::iterator it_map;

  it_map = aCommandMap.find("0_arg");
Bergé's avatar
Bergé committed
  if (it_map == aCommandMap.end()) BOOST_CHECK(false);
  it_map->second->execute();
  BOOST_CHECK(entity.test_zero_arg_);

Bergé's avatar
Bergé committed
  int first_arg = 1;
  Value aValue(first_arg);
  std::vector<std::string> vec_fname(4);
Bergé's avatar
Bergé committed
  vec_fname[0] = "1_arg";
  vec_fname[1] = "2_args";
  vec_fname[2] = "3_args";
  vec_fname[3] = "4_args";
  std::vector<Value> values;
Bergé's avatar
Bergé committed

  for (unsigned int i = 0; i < 4; i++) {
    it_map = aCommandMap.find(vec_fname[i]);
    if (it_map == aCommandMap.end()) BOOST_CHECK(false);
    values.push_back(aValue);
    it_map->second->setParameterValues(values);
    it_map->second->execute();
  }

  BOOST_CHECK(entity.test_one_arg_);
  BOOST_CHECK(entity.test_two_args_);
  BOOST_CHECK(entity.test_three_args_);
  BOOST_CHECK(entity.test_four_args_);
}