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

#include <cxxtest/TestSuite.h>

#include "Algorithm.h"
using namespace Mantid::Kernel;

Matt Clarke's avatar
Matt Clarke committed
class algmantest : public Algorithm
{
   public:
Matt Clarke's avatar
Matt Clarke committed
	algmantest() : Algorithm() {}
	virtual ~algmantest() {}
	StatusCode init() { return StatusCode::SUCCESS; }
	StatusCode exec() { return StatusCode::SUCCESS; }
	StatusCode final() { return StatusCode::SUCCESS; }		
};
Matt Clarke's avatar
Matt Clarke committed
class algmantestSecond : public Algorithm
{
   public:
  
	algmantestSecond() : Algorithm() {}
	virtual ~algmantestSecond() {}
	StatusCode init() { return StatusCode::SUCCESS; }
	StatusCode exec() { return StatusCode::SUCCESS; }
	StatusCode final() { return StatusCode::SUCCESS; }		
};
Matt Clarke's avatar
Matt Clarke committed
 DECLARE_ALGORITHM(algmantest)
 DECLARE_ALGORITHM(algmantestSecond)

class AlgorithmManagerTest : public CxxTest::TestSuite
{
public:

Matt Clarke's avatar
Matt Clarke committed
	AlgorithmManagerTest() 
		manager = AlgorithmManager::Instance();
	  // Not really much to test
Matt Clarke's avatar
Matt Clarke committed
          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 )
Matt Clarke's avatar
Matt Clarke committed
	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");
               IAlgorithm *alg;
               TS_ASSERT_THROWS_NOTHING( alg = manager->create("AlgorithmManager::myAlg") );
               TS_ASSERT_DIFFERS(dynamic_cast<algmantest*>(alg),static_cast<algmantest*>(0));
		TS_ASSERT_THROWS_NOTHING( alg = manager->create("AlgorithmManager::myAlgB") );
                TS_ASSERT_DIFFERS(dynamic_cast<algmantestSecond*>(alg),static_cast<algmantestSecond*>(0));
	        TS_ASSERT_DIFFERS(dynamic_cast<Algorithm*>(alg),static_cast<Algorithm*>(0));
		TS_ASSERT_EQUALS(manager->size(),2);   // To check that crea is called on local objects
	   }
	   
	   void testManagedType()
	   {
		 manager->clear();
		 IAlgorithm *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,static_cast<IAlgorithm*>(0));
		TS_ASSERT_DIFFERS(Bptr,static_cast<IAlgorithm*>(0));
		delete Bptr;
	   }
  
  
Matt Clarke's avatar
Matt Clarke committed
	
  AlgorithmManager *manager;