Ignore:
Timestamp:
Dec 13, 2011, 12:00:30 PM (14 years ago)
Author:
Frederik Heber <heber@…>
Children:
b760ac5
Parents:
2c11c1
git-author:
Frederik Heber <heber@…> (12/02/11 10:10:17)
git-committer:
Frederik Heber <heber@…> (12/13/11 12:00:30)
Message:

Added unit test on Relay.

  • added new stubs to ObserverStub implementing Relay.
  • Relay is friend of Notification.
Location:
src/Patterns/Observer/unittests
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/Patterns/Observer/unittests/ObserverUnitTest.cpp

    r2c11c1 rd85532  
    6868  notificationObserver2 = new NotificationObserver(
    6969      notificationObservable->getChannel(NotificationObservable::Operation2Notify));
     70
     71  RelayObservable = new RelayTest;
     72  RelayObserver = new RelayCountObserver(RelayObservable);
    7073}
    7174
     
    7982  delete obsset;
    8083  delete obsmap;
     84  delete RelayObservable;
     85  delete RelayObserver;
    8186
    8287  delete observer1;
     
    237242}
    238243
     244void ObserverTest::relayTest()
     245{
     246  // sign on some observables to the relay
     247  simpleObservable1->signOn(RelayObservable);
     248  simpleObservable2->signOn(RelayObservable);
     249
     250  // sign on an observer to the relay
     251  RelayObservable->signOn(RelayObserver);
     252  simpleObservable1->signOn(observer1);
     253
     254  // check that all is zero
     255  CPPUNIT_ASSERT_EQUAL( 0, RelayObserver->updates );
     256  CPPUNIT_ASSERT_EQUAL( 0, observer1->updates );
     257
     258  // signal update
     259  simpleObservable1->changeMethod();
     260
     261  // check that both the change
     262  // (and RelayObserver checks being called correctly)
     263  CPPUNIT_ASSERT_EQUAL( 1, RelayObserver->updates );
     264  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates );
     265
     266  // signal update through relay only
     267  simpleObservable2->changeMethod();
     268
     269  // check that only one got the change
     270  CPPUNIT_ASSERT_EQUAL( 2, RelayObserver->updates );
     271  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates );
     272
     273  // check on signOff
     274  simpleObservable1->signOff(RelayObservable);
     275  simpleObservable1->signOff(observer1);
     276}
     277
    239278void ObserverTest::CircleDetectionTest() {
    240279  std::cout << std::endl << "Warning: the next test involved methods that can produce infinite loops." << std::endl;
  • src/Patterns/Observer/unittests/ObserverUnitTest.hpp

    r2c11c1 rd85532  
    2424class ObservableSet;
    2525class ObservableMap;
     26class RelayObservable;
    2627class BlockObservable;
    2728class NotificationObservable;
     29class RelayCountObserver;
    2830
    2931class ObserverTest :  public CppUnit::TestFixture
     
    3739  CPPUNIT_TEST ( doesReportTest );
    3840  CPPUNIT_TEST ( iteratorTest );
     41  CPPUNIT_TEST ( relayTest );
    3942  CPPUNIT_TEST ( CircleDetectionTest );
    4043  CPPUNIT_TEST_SUITE_END();
     
    5154  void doesReportTest();
    5255  void iteratorTest();
     56  void relayTest();
    5357  void CircleDetectionTest();
    5458
     
    7074  ObservableSet *obsset;
    7175  ObservableMap *obsmap;
    72 
     76  RelayTest *RelayObservable;
     77  RelayCountObserver *RelayObserver;
    7378};
    7479
  • src/Patterns/Observer/unittests/stubs/ObserverStub.cpp

    r2c11c1 rd85532  
    230230}
    231231
     232/****************** Relay *********************/
     233
     234RelayTest::RelayTest() :
     235    Relay(std::string("RelayTest"))
     236{}
     237
     238RelayTest::~RelayTest()
     239{}
     240
     241/************ RelayCountObserver ***************/
     242
     243RelayCountObserver::RelayCountObserver(const Observable * const _relay) :
     244    Observer("RelayCountObserver"),
     245    updates(0),
     246    relay(_relay)
     247{}
     248
     249RelayCountObserver::~RelayCountObserver()
     250{}
     251
     252void RelayCountObserver::update(Observable *publisher){
     253  // check that we are not called by the relay itself
     254  CPPUNIT_ASSERT(publisher != relay);
     255  updates++;
     256}
     257
     258void RelayCountObserver::subjectKilled(Observable *publisher) {
     259}
     260
  • src/Patterns/Observer/unittests/stubs/ObserverStub.hpp

    r2c11c1 rd85532  
    1212#include "Observer/Observable.hpp"
    1313#include "Observer/ObservedIterator.hpp"
     14#include "Observer/Relay.hpp"
    1415
    1516class UpdateCountObserver : public Observer {
     
    126127};
    127128
     129class RelayTest : public Relay
     130{
     131public:
     132  RelayTest();
     133  ~RelayTest();
     134private:
     135};
     136
     137class RelayCountObserver : public Observer {
     138public:
     139  RelayCountObserver(const Observable * const relay);
     140  virtual ~RelayCountObserver();
     141
     142  void update(Observable *publisher);
     143  void subjectKilled(Observable *publisher);
     144
     145  int updates;
     146private:
     147  const Observable * const relay;
     148};
    128149
    129150#endif /* OBSERVERSTUB_HPP_ */
Note: See TracChangeset for help on using the changeset viewer.