/* * ActionSequenzTest.cpp * * Created on: Dec 17, 2009 * Author: crueger */ #include #include #include #include "unittests/ActionSequenceTest.hpp" #include "Actions/Action.hpp" #include "Actions/ActionSequence.hpp" // Registers the fixture into the 'registry' CPPUNIT_TEST_SUITE_REGISTRATION( ActionSequenceTest ); void setUp(); void tearDown(); void canUndoTest(); /* some neccessary stubs for tests */ class canUndoActionStub : public Action { public: canUndoActionStub(){} virtual ~canUndoActionStub(){} virtual void call(){} virtual void undo(){} virtual bool canUndo(){ return true; } }; class cannotUndoActionStub : public Action { public: cannotUndoActionStub(){} virtual ~cannotUndoActionStub(){} virtual void call(){} virtual void undo(){} virtual bool canUndo(){ return false; } }; void ActionSequenceTest::setUp(){} void ActionSequenceTest::tearDown(){} void ActionSequenceTest::canUndoTest(){ // create some necessary stubs used in this test Action *positive1 = new canUndoActionStub(); Action *positive2 = new canUndoActionStub(); Action *negative1 = new cannotUndoActionStub(); Action *negative2 = new cannotUndoActionStub(); // first section: { // test some combinations { ActionSequence *sequence = new ActionSequence(); sequence->addAction(positive1); sequence->addAction(positive2); CPPUNIT_ASSERT_EQUAL( true, sequence->canUndo() ); delete sequence; } { ActionSequence *sequence = new ActionSequence(); sequence->addAction(positive1); sequence->addAction(negative2); CPPUNIT_ASSERT_EQUAL( false, sequence->canUndo() ); delete sequence; } { ActionSequence *sequence = new ActionSequence(); sequence->addAction(negative1); sequence->addAction(positive2); CPPUNIT_ASSERT_EQUAL( false, sequence->canUndo() ); delete sequence; } { ActionSequence *sequence = new ActionSequence(); sequence->addAction(negative1); sequence->addAction(negative2); CPPUNIT_ASSERT_EQUAL( false, sequence->canUndo() ); delete sequence; } } // second section: { // empty sequence can be undone ActionSequence *sequence = new ActionSequence(); CPPUNIT_ASSERT_EQUAL( true, sequence->canUndo() ); // if only a positive action is contained it can be undone sequence->addAction(positive1); CPPUNIT_ASSERT_EQUAL( true, sequence->canUndo() ); // the single negative action should block the process sequence->addAction(negative1); CPPUNIT_ASSERT_EQUAL( false, sequence->canUndo() ); // after removing the negative action all is well again sequence->removeLastAction(); CPPUNIT_ASSERT_EQUAL( true, sequence->canUndo() ); delete sequence; } delete positive1; delete positive2; delete negative1; delete negative2; } /********************************************** 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; };