Changes in src/unittests/ObserverTest.cpp [cd5047:8774c5]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/unittests/ObserverTest.cpp
rcd5047 r8774c5 182 182 }; 183 183 184 class Observable Collection: public Observable {184 class ObservableSet : public Observable { 185 185 public: 186 186 typedef std::set<SimpleObservable*> set; … … 188 188 typedef set::const_iterator const_iterator; 189 189 190 Observable Collection(int _num) :190 ObservableSet(int _num) : 191 191 Observable("ObservableCollection"), 192 192 num(_num) … … 199 199 } 200 200 201 ~Observable Collection(){201 ~ObservableSet(){ 202 202 set::iterator iter; 203 203 for(iter=theSet.begin(); iter!=theSet.end(); ++iter ){ 204 204 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; 205 243 } 206 244 } … … 231 269 blockObservable = new BlockObservable(); 232 270 notificationObservable = new NotificationObservable(); 233 collection = new ObservableCollection(5); 271 obsset = new ObservableSet(5); 272 obsmap = new ObservableMap(5); 234 273 235 274 observer1 = new UpdateCountObserver(); … … 249 288 delete blockObservable; 250 289 delete notificationObservable; 251 delete collection; 290 delete obsset; 291 delete obsmap; 252 292 253 293 delete observer1; … … 268 308 simpleObservable2->signOn(observer4); 269 309 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 270 316 simpleObservable1->changeMethod(); 271 317 CPPUNIT_ASSERT_EQUAL( 1, observer1->updates ); … … 292 338 void ObserverTest::doesBlockUpdateTest() { 293 339 callObservable->signOn(observer1); 340 CPPUNIT_ASSERT_EQUAL( 0, observer1->updates ); 294 341 295 342 callObservable->changeMethod1(); … … 311 358 CPPUNIT_ASSERT_EQUAL( 2, observer1->updates ); 312 359 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 ); 313 372 } 314 373 … … 341 400 int i = 0; 342 401 // test the general iterator methods 343 for(Observable Collection::iterator iter=collection->begin(); iter!=collection->end();++iter){344 CPPUNIT_ASSERT(i< collection->num);402 for(ObservableSet::iterator iter=obsset->begin(); iter!=obsset->end();++iter){ 403 CPPUNIT_ASSERT(i< obsset->num); 345 404 i++; 346 405 } 347 406 348 407 i=0; 349 for(Observable Collection::const_iterator iter=collection->begin(); iter!=collection->end();++iter){350 CPPUNIT_ASSERT(i< collection->num);351 i++; 352 } 353 354 collection->signOn(observer1);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); 355 414 { 356 415 // we construct this out of the loop, so the iterator dies at the end of 357 416 // the scope and not the end of the loop (allows more testing) 358 Observable Collection::iterator iter;359 for(iter= collection->begin(); iter!=collection->end(); ++iter){417 ObservableSet::iterator iter; 418 for(iter=obsset->begin(); iter!=obsset->end(); ++iter){ 360 419 (*iter)->changeMethod(); 361 420 } … … 367 426 368 427 // when using a const_iterator no changes should be propagated 369 for(Observable Collection::const_iterator iter = collection->begin(); iter!=collection->end();++iter);428 for(ObservableSet::const_iterator iter = obsset->begin(); iter!=obsset->end();++iter); 370 429 CPPUNIT_ASSERT_EQUAL( 1, observer1->updates); 371 collection->signOff(observer1); 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); 372 449 } 373 450 … … 382 459 // make this Observable its own subject. NEVER DO THIS IN ACTUAL CODE 383 460 simpleObservable1->signOn(simpleObservable1); 461 #ifndef NDEBUG 384 462 CPPUNIT_ASSERT_THROW(simpleObservable1->changeMethod(),Assert::AssertionFailure); 463 #else 464 simpleObservable1->changeMethod(); 465 #endif 385 466 386 467 // more complex test … … 388 469 simpleObservable1->signOn(simpleObservable2); 389 470 simpleObservable2->signOn(simpleObservable1); 471 #ifndef NDEBUG 390 472 CPPUNIT_ASSERT_THROW(simpleObservable1->changeMethod(),Assert::AssertionFailure); 473 #else 474 simpleObservable1->changeMethod(); 475 #endif 476 477 391 478 simpleObservable1->signOff(simpleObservable2); 392 479 simpleObservable2->signOff(simpleObservable1);
Note:
See TracChangeset
for help on using the changeset viewer.