1 //--------------------------------------------------------------------------------------- 2 // $Id$ 3 // Copyright (c) 2010 by Mulle Kybernetik. See License file for details. 4 //--------------------------------------------------------------------------------------- 5 6 #import <objc/runtime.h> 7 #import "OCPartialMockObject.h" 8 #import "OCMRealObjectForwarder.h" 9 10 11 @implementation OCMRealObjectForwarder 12 13 - (void)handleInvocation:(NSInvocation *)anInvocation 14 { 15 id invocationTarget = [anInvocation target]; 16 SEL invocationSelector = [anInvocation selector]; 17 SEL aliasedSelector = NSSelectorFromString([OCMRealMethodAliasPrefix stringByAppendingString:NSStringFromSelector(invocationSelector)]); 18 19 [anInvocation setSelector:aliasedSelector]; 20 if([invocationTarget isProxy] && (class_getInstanceMethod([invocationTarget class], @selector(realObject)))) 21 { 22 // the method has been invoked on the mock, we need to change the target to the real object 23 [anInvocation setTarget:[(OCPartialMockObject *)invocationTarget realObject]]; 24 } 25 [anInvocation invoke]; 26 } 27 28 29 @end 30