Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/unittests/ObserverTest.cpp

    r8774c5 r7a176b  
    182182};
    183183
    184 class ObservableSet : public Observable {
     184class ObservableCollection : public Observable {
    185185public:
    186186  typedef std::set<SimpleObservable*> set;
     
    188188  typedef set::const_iterator const_iterator;
    189189
    190   ObservableSet(int _num) :
     190  ObservableCollection(int _num) :
    191191    Observable("ObservableCollection"),
    192192    num(_num)
     
    199199  }
    200200
    201   ~ObservableSet(){
     201  ~ObservableCollection(){
    202202    set::iterator iter;
    203203    for(iter=theSet.begin(); iter!=theSet.end(); ++iter ){
    204204      delete (*iter);
    205     }
    206   }
    207 
    208   iterator begin(){
    209     return iterator(theSet.begin(),this);
    210   }
    211 
    212   iterator end(){
    213     return iterator(theSet.end(),this);
    214   }
    215 
    216   const int num;
    217 
    218 private:
    219   set theSet;
    220 };
    221 
    222 class ObservableMap : public Observable {
    223 public:
    224   typedef std::map<int,SimpleObservable*> set;
    225   typedef ObservedIterator<set> iterator;
    226   typedef set::const_iterator const_iterator;
    227 
    228   ObservableMap(int _num) :
    229     Observable("ObservableCollection"),
    230     num(_num)
    231   {
    232     for(int i=0; i<num; ++i){
    233       SimpleObservable *content = new SimpleObservable();
    234       content->signOn(this);
    235       theSet.insert(make_pair(i,content));
    236     }
    237   }
    238 
    239   ~ObservableMap(){
    240     set::iterator iter;
    241     for(iter=theSet.begin(); iter!=theSet.end(); ++iter ){
    242       delete iter->second;
    243205    }
    244206  }
     
    269231  blockObservable = new BlockObservable();
    270232  notificationObservable = new NotificationObservable();
    271   obsset = new ObservableSet(5);
    272   obsmap = new ObservableMap(5);
     233  collection = new ObservableCollection(5);
    273234
    274235  observer1 = new UpdateCountObserver();
     
    288249  delete blockObservable;
    289250  delete notificationObservable;
    290   delete obsset;
    291   delete obsmap;
     251  delete collection;
    292252
    293253  delete observer1;
     
    308268  simpleObservable2->signOn(observer4);
    309269
    310   CPPUNIT_ASSERT_EQUAL( 0, observer1->updates );
    311   CPPUNIT_ASSERT_EQUAL( 0, observer2->updates );
    312   CPPUNIT_ASSERT_EQUAL( 0, observer3->updates );
    313   CPPUNIT_ASSERT_EQUAL( 0, observer4->updates );
    314 
    315 
    316270  simpleObservable1->changeMethod();
    317271  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates );
     
    338292void ObserverTest::doesBlockUpdateTest() {
    339293  callObservable->signOn(observer1);
    340   CPPUNIT_ASSERT_EQUAL( 0, observer1->updates );
    341294
    342295  callObservable->changeMethod1();
     
    358311  CPPUNIT_ASSERT_EQUAL( 2, observer1->updates );
    359312  CPPUNIT_ASSERT_EQUAL( 2, observer2->updates );
    360 }
    361 
    362 void ObserverTest::outsideLockTest(){
    363   callObservable->signOn(observer1);
    364   CPPUNIT_ASSERT_EQUAL( 0, observer1->updates );
    365 
    366   {
    367     LOCK_OBSERVABLE(*callObservable);
    368     CPPUNIT_ASSERT_EQUAL( 0, observer1->updates );
    369   }
    370   // lock is gone now, observer should have notified
    371   CPPUNIT_ASSERT_EQUAL( 1, observer1->updates );
    372313}
    373314
     
    400341  int i = 0;
    401342  // test the general iterator methods
    402   for(ObservableSet::iterator iter=obsset->begin(); iter!=obsset->end();++iter){
    403     CPPUNIT_ASSERT(i< obsset->num);
     343  for(ObservableCollection::iterator iter=collection->begin(); iter!=collection->end();++iter){
     344    CPPUNIT_ASSERT(i< collection->num);
    404345    i++;
    405346  }
    406347
    407348  i=0;
    408   for(ObservableSet::const_iterator iter=obsset->begin(); iter!=obsset->end();++iter){
    409     CPPUNIT_ASSERT(i<obsset->num);
    410     i++;
    411   }
    412 
    413   obsset->signOn(observer1);
     349  for(ObservableCollection::const_iterator iter=collection->begin(); iter!=collection->end();++iter){
     350    CPPUNIT_ASSERT(i<collection->num);
     351    i++;
     352  }
     353
     354  collection->signOn(observer1);
    414355  {
    415356    // we construct this out of the loop, so the iterator dies at the end of
    416357    // the scope and not the end of the loop (allows more testing)
    417     ObservableSet::iterator iter;
    418     for(iter=obsset->begin(); iter!=obsset->end(); ++iter){
     358    ObservableCollection::iterator iter;
     359    for(iter=collection->begin(); iter!=collection->end(); ++iter){
    419360      (*iter)->changeMethod();
    420361    }
     
    426367
    427368  // when using a const_iterator no changes should be propagated
    428   for(ObservableSet::const_iterator iter = obsset->begin(); iter!=obsset->end();++iter);
     369  for(ObservableCollection::const_iterator iter = collection->begin(); iter!=collection->end();++iter);
    429370  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates);
    430 
    431   // we need to test the operator-> as well
    432   obsmap->signOn(observer2);
    433   {
    434     // we construct this out of the loop, so the iterator dies at the end of
    435     // the scope and not the end of the loop (allows more testing)
    436     ObservableMap::iterator iter;
    437     for(iter=obsmap->begin(); iter!=obsmap->end(); ++iter){
    438       iter->second->changeMethod();
    439     }
    440     // At this point no change should have been propagated
    441     CPPUNIT_ASSERT_EQUAL( 0, observer2->updates);
    442   }
    443   // After the Iterator has died the propagation should take place
    444   CPPUNIT_ASSERT_EQUAL( 1, observer2->updates);
    445 
    446 
    447   obsset->signOff(observer1);
    448   obsmap->signOff(observer2);
     371  collection->signOff(observer1);
    449372}
    450373
Note: See TracChangeset for help on using the changeset viewer.