• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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