Home | History | Annotate | Download | only in OCMock
      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