| //--------------------------------------------------------------------------------------- |
| // $Id$ |
| // Copyright (c) 2009-2010 by Mulle Kybernetik. See License file for details. |
| //--------------------------------------------------------------------------------------- |
| |
| #import <objc/runtime.h> |
| #import <OCMock/OCMArg.h> |
| #import <OCMock/OCMConstraint.h> |
| #import "OCMPassByRefSetter.h" |
| #import "OCMConstraint.h" |
| |
| @implementation OCMArg |
| |
| + (id)any |
| { |
| return [OCMAnyConstraint constraint]; |
| } |
| |
| + (void *)anyPointer |
| { |
| return (void *)0x01234567; |
| } |
| |
| + (id)isNil |
| { |
| return [OCMIsNilConstraint constraint]; |
| } |
| |
| + (id)isNotNil |
| { |
| return [OCMIsNotNilConstraint constraint]; |
| } |
| |
| + (id)isNotEqual:(id)value |
| { |
| OCMIsNotEqualConstraint *constraint = [OCMIsNotEqualConstraint constraint]; |
| constraint->testValue = value; |
| return constraint; |
| } |
| |
| + (id)checkWithSelector:(SEL)selector onObject:(id)anObject |
| { |
| return [OCMConstraint constraintWithSelector:selector onObject:anObject]; |
| } |
| |
| #if NS_BLOCKS_AVAILABLE |
| |
| + (id)checkWithBlock:(BOOL (^)(id))block |
| { |
| return [[[OCMBlockConstraint alloc] initWithConstraintBlock:block] autorelease]; |
| } |
| |
| #endif |
| |
| + (id *)setTo:(id)value |
| { |
| return (id *)[[[OCMPassByRefSetter alloc] initWithValue:value] autorelease]; |
| } |
| |
| + (id)resolveSpecialValues:(NSValue *)value |
| { |
| const char *type = [value objCType]; |
| if(type[0] == '^') |
| { |
| void *pointer = [value pointerValue]; |
| if(pointer == (void *)0x01234567) |
| return [OCMArg any]; |
| if((pointer != NULL) && (object_getClass((id)pointer) == [OCMPassByRefSetter class])) |
| return (id)pointer; |
| } |
| return value; |
| } |
| |
| @end |