1 //--------------------------------------------------------------------------------------- 2 // $Id$ 3 // Copyright (c) 2009 by Mulle Kybernetik. See License file for details. 4 //--------------------------------------------------------------------------------------- 5 6 #import "OCObserverMockObject.h" 7 #import "OCMObserverRecorder.h" 8 9 10 @implementation OCObserverMockObject 11 12 #pragma mark Initialisers, description, accessors, etc. 13 14 - (id)init 15 { 16 self = [super init]; 17 recorders = [[NSMutableArray alloc] init]; 18 return self; 19 } 20 21 - (void)dealloc 22 { 23 [recorders release]; 24 [super dealloc]; 25 } 26 27 - (NSString *)description 28 { 29 return @"OCMockObserver"; 30 } 31 32 - (void)setExpectationOrderMatters:(BOOL)flag 33 { 34 expectationOrderMatters = flag; 35 } 36 37 38 #pragma mark Public API 39 40 - (id)expect 41 { 42 OCMObserverRecorder *recorder = [[[OCMObserverRecorder alloc] init] autorelease]; 43 [recorders addObject:recorder]; 44 return recorder; 45 } 46 47 - (void)verify 48 { 49 if([recorders count] == 1) 50 { 51 [NSException raise:NSInternalInconsistencyException format:@"%@: expected notification was not observed: %@", 52 [self description], [[recorders lastObject] description]]; 53 } 54 if([recorders count] > 0) 55 { 56 [NSException raise:NSInternalInconsistencyException format:@"%@ : %ld expected notifications were not observed.", 57 [self description], (unsigned long)[recorders count]]; 58 } 59 } 60 61 62 63 #pragma mark Receiving notifications 64 65 - (void)handleNotification:(NSNotification *)aNotification 66 { 67 NSUInteger i, limit; 68 69 limit = expectationOrderMatters ? 1 : [recorders count]; 70 for(i = 0; i < limit; i++) 71 { 72 if([[recorders objectAtIndex:i] matchesNotification:aNotification]) 73 { 74 [recorders removeObjectAtIndex:i]; 75 return; 76 } 77 } 78 [NSException raise:NSInternalInconsistencyException format:@"%@: unexpected notification observed: %@", [self description], 79 [aNotification description]]; 80 } 81 82 83 @end 84