Skip to content
Snippets Groups Projects
AlgorithmManagerTest.h 2.6 KiB
Newer Older
#ifndef ALGORITHMMANAGERTEST_H_
#define ALGORITHMMANAGERTEST_H_

#include <cxxtest/TestSuite.h>

#include "MantidAPI/Algorithm.h"
Nick Draper's avatar
Nick Draper committed
using namespace Mantid::API;
Matt Clarke's avatar
Matt Clarke committed
class algmantest : public Algorithm
{
Nick Draper's avatar
Nick Draper committed
public:

  algmantest() : Algorithm() {}
  virtual ~algmantest() {}
  void init() { }
  void exec() {  }
Matt Clarke's avatar
Matt Clarke committed
};
Matt Clarke's avatar
Matt Clarke committed
class algmantestSecond : public Algorithm
{
Nick Draper's avatar
Nick Draper committed
public:

  algmantestSecond() : Algorithm() {}
  virtual ~algmantestSecond() {}
  void init() { }
  void exec() { }
Matt Clarke's avatar
Matt Clarke committed
};
Nick Draper's avatar
Nick Draper committed
DECLARE_ALGORITHM(algmantest)
DECLARE_ALGORITHM(algmantestSecond)

class AlgorithmManagerTest : public CxxTest::TestSuite
{
public:

Nick Draper's avatar
Nick Draper committed
  AlgorithmManagerTest() 
  {
    manager = AlgorithmManager::Instance();
  }

  void testInstance()
  {
    // Not really much to test
    AlgorithmManager *tester = AlgorithmManager::Instance();
    TS_ASSERT_EQUALS( manager, tester);
    TS_ASSERT_THROWS_NOTHING( manager->create("algmantest") )
    TS_ASSERT_THROWS( manager->create("aaaaaa"), std::runtime_error )
  }

  void testClear()
  {
    manager->clear();
    manager->subscribe<algmantest>("AlgorithmManager::myAlgclear");
    manager->subscribe<algmantestSecond>("AlgorithmManager::myAlgBclear");
    TS_ASSERT_THROWS_NOTHING( manager->create("AlgorithmManager::myAlgBclear") );
    TS_ASSERT_THROWS_NOTHING( manager->create("AlgorithmManager::myAlgBclear") );
    TS_ASSERT_EQUALS(manager->size(),2);
    manager->clear();
    TS_ASSERT_EQUALS(manager->size(),0);
  }

  void testReturnType()
  {
    manager->clear();
    manager->subscribe<algmantest>("AlgorithmManager::myAlg");
    manager->subscribe<algmantestSecond>("AlgorithmManager::myAlgB");
    Algorithm_sptr alg;
    TS_ASSERT_THROWS_NOTHING( alg = manager->create("AlgorithmManager::myAlg") );
    TS_ASSERT_DIFFERS(dynamic_cast<algmantest*>(alg.get()),static_cast<algmantest*>(0));
    TS_ASSERT_THROWS_NOTHING( alg = manager->create("AlgorithmManager::myAlgB") );
    TS_ASSERT_DIFFERS(dynamic_cast<algmantestSecond*>(alg.get()),static_cast<algmantestSecond*>(0));
    TS_ASSERT_DIFFERS(dynamic_cast<Algorithm*>(alg.get()),static_cast<Algorithm*>(0));
    TS_ASSERT_EQUALS(manager->size(),2);   // To check that crea is called on local objects
  }

  void testManagedType()
  {
    manager->clear();
    Algorithm_sptr Aptr, Bptr;
    Aptr=manager->create("algmantest");
    Bptr=manager->createUnmanaged("algmantest");
    TS_ASSERT_DIFFERS(Aptr,Bptr);
    TS_ASSERT_EQUALS(manager->size(),1);
    TS_ASSERT_DIFFERS(Aptr.get(),static_cast<Algorithm*>(0));
    TS_ASSERT_DIFFERS(Bptr.get(),static_cast<Algorithm*>(0));
  }


Nick Draper's avatar
Nick Draper committed

  AlgorithmManager *manager;
Nick Draper's avatar
Nick Draper committed