• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1//---------------------------------------------------------------------------------------
2//  $Id$
3//  Copyright (c) 2007-2010 by Mulle Kybernetik. See License file for details.
4//---------------------------------------------------------------------------------------
5
6#import <OCMock/OCMConstraint.h>
7
8
9@implementation OCMConstraint
10
11+ (id)constraint
12{
13	return [[[self alloc] init] autorelease];
14}
15
16- (BOOL)evaluate:(id)value
17{
18	return NO;
19}
20
21- (id)copyWithZone:(NSZone *)zone
22{
23	return [self retain];
24}
25
26+ (id)constraintWithSelector:(SEL)aSelector onObject:(id)anObject
27{
28	OCMInvocationConstraint *constraint = [OCMInvocationConstraint constraint];
29	NSMethodSignature *signature = [anObject methodSignatureForSelector:aSelector];
30	if(signature == nil)
31		[NSException raise:NSInvalidArgumentException format:@"Unkown selector %@ used in constraint.", NSStringFromSelector(aSelector)];
32	NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
33	[invocation setTarget:anObject];
34	[invocation setSelector:aSelector];
35	constraint->invocation = invocation;
36	return constraint;
37}
38
39+ (id)constraintWithSelector:(SEL)aSelector onObject:(id)anObject withValue:(id)aValue
40{
41	OCMInvocationConstraint *constraint = [self constraintWithSelector:aSelector onObject:anObject];
42	if([[constraint->invocation methodSignature] numberOfArguments] < 4)
43		[NSException raise:NSInvalidArgumentException format:@"Constraint with value requires selector with two arguments."];
44	[constraint->invocation setArgument:&aValue atIndex:3];
45	return constraint;
46}
47
48
49@end
50
51
52
53#pragma mark  -
54
55@implementation OCMAnyConstraint
56
57- (BOOL)evaluate:(id)value
58{
59	return YES;
60}
61
62@end
63
64
65
66#pragma mark  -
67
68@implementation OCMIsNilConstraint
69
70- (BOOL)evaluate:(id)value
71{
72	return value == nil;
73}
74
75@end
76
77
78
79#pragma mark  -
80
81@implementation OCMIsNotNilConstraint
82
83- (BOOL)evaluate:(id)value
84{
85	return value != nil;
86}
87
88@end
89
90
91
92#pragma mark  -
93
94@implementation OCMIsNotEqualConstraint
95
96- (BOOL)evaluate:(id)value
97{
98	return ![value isEqual:testValue];
99}
100
101@end
102
103
104
105#pragma mark  -
106
107@implementation OCMInvocationConstraint
108
109- (BOOL)evaluate:(id)value
110{
111	[invocation setArgument:&value atIndex:2]; // should test if constraint takes arg
112	[invocation invoke];
113	BOOL returnValue;
114	[invocation getReturnValue:&returnValue];
115	return returnValue;
116}
117
118@end
119
120#pragma mark  -
121
122#if NS_BLOCKS_AVAILABLE
123
124@implementation OCMBlockConstraint
125
126- (id)initWithConstraintBlock:(BOOL (^)(id))aBlock;
127{
128	self = [super init];
129	block = aBlock;
130	return self;
131}
132
133- (BOOL)evaluate:(id)value
134{
135	return block(value);
136}
137
138@end
139
140#endif
141