#include "TestObserver.h" using namespace std; using namespace NICE; CPPUNIT_TEST_SUITE_REGISTRATION( TestObserver ); void TestObserver::setUp() { } void TestObserver::tearDown() { } class Thing : public Observable { public: Thing() : value(0) {} void setValue(int i) { value = i; notifyObservers(); } int getValue() { return value; } private: int value; }; class Display : public Observer { public: Display(Thing* _thing) { duplicate = 0; _thing->addObserver(this); } void notified() { duplicate = static_cast(getObserved())->getValue(); } int getDuplicate() { return duplicate; } private: int duplicate; }; void TestObserver::testObserver() { std::auto_ptr thing(new Thing()); thing->setValue(5); CPPUNIT_ASSERT_EQUAL(5, thing->getValue()); std::auto_ptr display(new Display(thing.get())); thing->setValue(10); CPPUNIT_ASSERT_EQUAL(10, thing->getValue()); CPPUNIT_ASSERT_EQUAL(10, display->getDuplicate()); thing->removeObserver(display.get()); thing->setValue(210); CPPUNIT_ASSERT_EQUAL(210, thing->getValue()); CPPUNIT_ASSERT_EQUAL(10, display->getDuplicate()); }