/* * manipulateAtomsTest.cpp * * Created on: Feb 18, 2010 * Author: crueger */ #include "manipulateAtomsTest.hpp" #include "DescriptorUnittest.hpp" #include #include #include #include #include #include "Descriptors/AtomDescriptor.hpp" #include "Descriptors/AtomIdDescriptor.hpp" #include "Actions/ManipulateAtomsProcess.hpp" #include "Actions/ActionRegistry.hpp" #include "World.hpp" #include "atom.hpp" // Registers the fixture into the 'registry' CPPUNIT_TEST_SUITE_REGISTRATION( manipulateAtomsTest ); // some stubs class AtomStub : public atom { public: AtomStub(int _id) : atom(), id(_id), manipulated(false) {} virtual int getId(){ return id; } virtual void doSomething(){ manipulated = true; } bool manipulated; private: int id; }; // set up and tear down void manipulateAtomsTest::setUp(){ World::get(); for(int i=0;i atoms,int min, int max, std::set excluded = std::set()){ for(int i=min;i::iterator iter; bool res=false; for(iter=atoms.begin();iter!=atoms.end();++iter){ res |= (*iter)->getId() == i; } if(!res) { cout << "Atom " << i << " missing in returned list" << endl; return false; } } } return true; } bool hasNoDuplicates(std::vector atoms){ std::set found; std::vector::iterator iter; for(iter=atoms.begin();iter!=atoms.end();++iter){ int id = (*iter)->getId(); if(found.count(id)) return false; found.insert(id); } return true; } void operation(atom* _atom){ AtomStub *atom = dynamic_cast(_atom); assert(atom); atom->doSomething(); } void manipulateAtomsTest::testManipulateSimple(){ ManipulateAtomsProcess *proc = World::get()->manipulateAtoms(boost::bind(operation,_1),"FOO",AllAtoms()); proc->call(); std::vector allAtoms = World::get()->getAllAtoms(AllAtoms()); std::vector::iterator iter; for(iter=allAtoms.begin();iter!=allAtoms.end();++iter){ AtomStub *atom; atom = dynamic_cast(*iter); assert(atom); CPPUNIT_ASSERT(atom->manipulated); } } void manipulateAtomsTest::testManipulateExcluded(){ ManipulateAtomsProcess *proc = World::get()->manipulateAtoms(boost::bind(operation,_1),"FOO",AllAtoms() && !AtomById(ATOM_COUNT/2)); proc->call(); std::vector allAtoms = World::get()->getAllAtoms(AllAtoms()); std::vector::iterator iter; for(iter=allAtoms.begin();iter!=allAtoms.end();++iter){ AtomStub *atom; atom = dynamic_cast(*iter); assert(atom); if(atom->getId()!=(int)ATOM_COUNT/2) CPPUNIT_ASSERT(atom->manipulated); else CPPUNIT_ASSERT(!atom->manipulated); } } /********************************************** Main routine **************************************/ int main(int argc, char **argv) { // Get the top level suite from the registry CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest(); // Adds the test to the list of test to run CppUnit::TextUi::TestRunner runner; runner.addTest( suite ); // Change the default outputter to a compiler error format outputter runner.setOutputter( new CppUnit::CompilerOutputter( &runner.result(), std::cerr ) ); // Run the tests. bool wasSucessful = runner.run(); // Return error code 1 if the one of test failed. return wasSucessful ? 0 : 1; };