//--------------------------------------------------------------------------------------- // $Id$ // Copyright (c) 2009 by Mulle Kybernetik. See License file for details. //--------------------------------------------------------------------------------------- #import "OCObserverMockObject.h" #import "OCMObserverRecorder.h" @implementation OCObserverMockObject #pragma mark Initialisers, description, accessors, etc. - (id)init { self = [super init]; recorders = [[NSMutableArray alloc] init]; return self; } - (void)dealloc { [recorders release]; [super dealloc]; } - (NSString *)description { return @"OCMockObserver"; } - (void)setExpectationOrderMatters:(BOOL)flag { expectationOrderMatters = flag; } #pragma mark Public API - (id)expect { OCMObserverRecorder *recorder = [[[OCMObserverRecorder alloc] init] autorelease]; [recorders addObject:recorder]; return recorder; } - (void)verify { if([recorders count] == 1) { [NSException raise:NSInternalInconsistencyException format:@"%@: expected notification was not observed: %@", [self description], [[recorders lastObject] description]]; } if([recorders count] > 0) { [NSException raise:NSInternalInconsistencyException format:@"%@ : %ld expected notifications were not observed.", [self description], (unsigned long)[recorders count]]; } } #pragma mark Receiving notifications - (void)handleNotification:(NSNotification *)aNotification { NSUInteger i, limit; limit = expectationOrderMatters ? 1 : [recorders count]; for(i = 0; i < limit; i++) { if([[recorders objectAtIndex:i] matchesNotification:aNotification]) { [recorders removeObjectAtIndex:i]; return; } } [NSException raise:NSInternalInconsistencyException format:@"%@: unexpected notification observed: %@", [self description], [aNotification description]]; } @end