//--------------------------------------------------------------------------------------- // $Id$ // Copyright (c) 2010 by Mulle Kybernetik. See License file for details. //--------------------------------------------------------------------------------------- #import <objc/runtime.h> #import "OCPartialMockObject.h" #import "OCMRealObjectForwarder.h" @implementation OCMRealObjectForwarder - (void)handleInvocation:(NSInvocation *)anInvocation { id invocationTarget = [anInvocation target]; SEL invocationSelector = [anInvocation selector]; SEL aliasedSelector = NSSelectorFromString([OCMRealMethodAliasPrefix stringByAppendingString:NSStringFromSelector(invocationSelector)]); [anInvocation setSelector:aliasedSelector]; if([invocationTarget isProxy] && (class_getInstanceMethod([invocationTarget class], @selector(realObject)))) { // the method has been invoked on the mock, we need to change the target to the real object [anInvocation setTarget:[(OCPartialMockObject *)invocationTarget realObject]]; } [anInvocation invoke]; } @end