- add sources.
[platform/framework/web/crosswalk.git] / src / third_party / ocmock / OCMock / OCObserverMockObject.m
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