123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /*
- * Copyright (c) 2005-2015 Erik Doernenburg and contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may
- * not use these files except in compliance with the License. You may obtain
- * a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
- #import <objc/runtime.h>
- #import "NSMethodSignature+OCMAdditions.h"
- #import "OCProtocolMockObject.h"
- @implementation OCProtocolMockObject
- #pragma mark Initialisers, description, accessors, etc.
- - (id)initWithProtocol:(Protocol *)aProtocol
- {
- NSParameterAssert(aProtocol != nil);
- [super init];
- mockedProtocol = aProtocol;
- return self;
- }
- - (NSString *)description
- {
- const char* name = protocol_getName(mockedProtocol);
- return [NSString stringWithFormat:@"OCMockObject(%s)", name];
- }
- #pragma mark Proxy API
- - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
- {
- struct { BOOL isRequired; BOOL isInstance; } opts[4] = { {YES, YES}, {NO, YES}, {YES, NO}, {NO, NO} };
- for(int i = 0; i < 4; i++)
- {
- struct objc_method_description methodDescription = protocol_getMethodDescription(mockedProtocol, aSelector, opts[i].isRequired, opts[i].isInstance);
- if(methodDescription.name != NULL)
- return [NSMethodSignature signatureWithObjCTypes:methodDescription.types];
- }
- return nil;
- }
- - (BOOL)conformsToProtocol:(Protocol *)aProtocol
- {
- return protocol_conformsToProtocol(mockedProtocol, aProtocol);
- }
- - (BOOL)respondsToSelector:(SEL)selector
- {
- return ([self methodSignatureForSelector:selector] != nil);
- }
- @end
|