TestObserver.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "TestObserver.h"
  2. using namespace std;
  3. using namespace NICE;
  4. CPPUNIT_TEST_SUITE_REGISTRATION( TestObserver );
  5. void TestObserver::setUp() {
  6. }
  7. void TestObserver::tearDown() {
  8. }
  9. class Thing : public Observable {
  10. public:
  11. Thing() : value(0) {}
  12. void setValue(int i) { value = i; notifyObservers(); }
  13. int getValue() { return value; }
  14. private:
  15. int value;
  16. };
  17. class Display : public Observer {
  18. public:
  19. Display(Thing* _thing) {
  20. duplicate = 0;
  21. _thing->addObserver(this);
  22. }
  23. void notified() {
  24. duplicate = static_cast<Thing*>(getObserved())->getValue();
  25. }
  26. int getDuplicate() { return duplicate; }
  27. private:
  28. int duplicate;
  29. };
  30. void TestObserver::testObserver() {
  31. std::auto_ptr<Thing> thing(new Thing());
  32. thing->setValue(5);
  33. CPPUNIT_ASSERT_EQUAL(5, thing->getValue());
  34. std::auto_ptr<Display> display(new Display(thing.get()));
  35. thing->setValue(10);
  36. CPPUNIT_ASSERT_EQUAL(10, thing->getValue());
  37. CPPUNIT_ASSERT_EQUAL(10, display->getDuplicate());
  38. thing->removeObserver(display.get());
  39. thing->setValue(210);
  40. CPPUNIT_ASSERT_EQUAL(210, thing->getValue());
  41. CPPUNIT_ASSERT_EQUAL(10, display->getDuplicate());
  42. }