Home | History | Annotate | Download | only in OCMock
      1 //---------------------------------------------------------------------------------------
      2 //  $Id$
      3 //  Copyright (c) 2005-2008 by Mulle Kybernetik. See License file for details.
      4 //---------------------------------------------------------------------------------------
      5 
      6 #import <objc/runtime.h>
      7 #import "NSMethodSignature+OCMAdditions.h"
      8 #import "OCProtocolMockObject.h"
      9 
     10 @implementation OCProtocolMockObject
     11 
     12 #pragma mark  Initialisers, description, accessors, etc.
     13 
     14 - (id)initWithProtocol:(Protocol *)aProtocol
     15 {
     16 	[super init];
     17 	mockedProtocol = aProtocol;
     18 	return self;
     19 }
     20 
     21 - (NSString *)description
     22 {
     23     const char* name = protocol_getName(mockedProtocol);
     24     return [NSString stringWithFormat:@"OCMockObject[%s]", name];
     25 }
     26 
     27 #pragma mark  Proxy API
     28 
     29 - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
     30 {
     31 	struct objc_method_description methodDescription = protocol_getMethodDescription(mockedProtocol, aSelector, YES, YES);
     32     if(methodDescription.name == NULL) 
     33 	{
     34         methodDescription = protocol_getMethodDescription(mockedProtocol, aSelector, NO, YES);
     35     }
     36     if(methodDescription.name == NULL) 
     37 	{
     38         return nil;
     39     }
     40 	return [NSMethodSignature signatureWithObjCTypes:methodDescription.types];
     41 }
     42 
     43 - (BOOL)conformsToProtocol:(Protocol *)aProtocol
     44 {
     45     return protocol_conformsToProtocol(mockedProtocol, aProtocol);
     46 }
     47 
     48 - (BOOL)respondsToSelector:(SEL)selector
     49 {
     50     return ([self methodSignatureForSelector:selector] != nil);
     51 }
     52 
     53 @end
     54