Skip to content
Snippets Groups Projects
AlgorithmManagerTest.h 2.86 KiB
Newer Older
#ifndef AlgorithmManagerTest_H_
#define AlgorithmManagerTest_H_
#include "MantidAPI/Algorithm.h"
Nick Draper's avatar
Nick Draper committed
using namespace Mantid::API;
Matt Clarke's avatar
Matt Clarke committed
{
Nick Draper's avatar
Nick Draper committed
public:

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

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

class AlgorithmManagerTest : public CxxTest::TestSuite
{
public:

Nick Draper's avatar
Nick Draper committed
  AlgorithmManagerTest() 
  {
Nick Draper's avatar
Nick Draper committed
  }

  void testInstance()
  {
    // Not really much to test
    //AlgorithmManager *tester = AlgorithmManager::Instance();
    //TS_ASSERT_EQUALS( manager, tester);
    TS_ASSERT_THROWS_NOTHING( AlgorithmManager::Instance().create("AlgTest") )
    TS_ASSERT_THROWS(AlgorithmManager::Instance().create("aaaaaa"), std::runtime_error )
Nick Draper's avatar
Nick Draper committed
  }

  void testClear()
  {
    AlgorithmManager::Instance().clear();
    AlgorithmManager::Instance().subscribe<AlgTest>("AlgorithmManager::myAlgclear");
    AlgorithmManager::Instance().subscribe<AlgTestSecond>("AlgorithmManager::myAlgBclear");
    TS_ASSERT_THROWS_NOTHING( AlgorithmManager::Instance().create("AlgorithmManager::myAlgBclear") );
    TS_ASSERT_THROWS_NOTHING(AlgorithmManager::Instance().create("AlgorithmManager::myAlgBclear") );
    TS_ASSERT_EQUALS(AlgorithmManager::Instance().size(),2);
    AlgorithmManager::Instance().clear();
    TS_ASSERT_EQUALS(AlgorithmManager::Instance().size(),0);
Nick Draper's avatar
Nick Draper committed
  }

  void testReturnType()
  {
    AlgorithmManager::Instance().clear();
    AlgorithmManager::Instance().subscribe<AlgTest>("AlgorithmManager::myAlg");
    AlgorithmManager::Instance().subscribe<AlgTestSecond>("AlgorithmManager::myAlgB");
Nick Draper's avatar
Nick Draper committed
    Algorithm_sptr alg;
    TS_ASSERT_THROWS_NOTHING( alg = AlgorithmManager::Instance().create("AlgorithmManager::myAlg") );
    TS_ASSERT_DIFFERS(dynamic_cast<AlgTest*>(alg.get()),static_cast<AlgTest*>(0));
    TS_ASSERT_THROWS_NOTHING( alg = AlgorithmManager::Instance().create("AlgorithmManager::myAlgB") );
    TS_ASSERT_DIFFERS(dynamic_cast<AlgTestSecond*>(alg.get()),static_cast<AlgTestSecond*>(0));
Nick Draper's avatar
Nick Draper committed
    TS_ASSERT_DIFFERS(dynamic_cast<Algorithm*>(alg.get()),static_cast<Algorithm*>(0));
    TS_ASSERT_EQUALS(AlgorithmManager::Instance().size(),2);   // To check that crea is called on local objects
Nick Draper's avatar
Nick Draper committed
  }

  void testManagedType()
  {
Nick Draper's avatar
Nick Draper committed
    Algorithm_sptr Aptr, Bptr;
    Aptr=AlgorithmManager::Instance().create("AlgTest");
    Bptr=AlgorithmManager::Instance().createUnmanaged("AlgTest");
Nick Draper's avatar
Nick Draper committed
    TS_ASSERT_DIFFERS(Aptr,Bptr);
    TS_ASSERT_EQUALS(AlgorithmManager::Instance().size(),1);
Nick Draper's avatar
Nick Draper committed
    TS_ASSERT_DIFFERS(Aptr.get(),static_cast<Algorithm*>(0));
    TS_ASSERT_DIFFERS(Bptr.get(),static_cast<Algorithm*>(0));
  }