Index: third_party/ocmock/OCMock/OCMRealObjectForwarder.m |
diff --git a/third_party/ocmock/OCMock/OCMRealObjectForwarder.m b/third_party/ocmock/OCMock/OCMRealObjectForwarder.m |
index 7c0a7db14e57fa18156246840e9146d6c351aa86..7042c7f61dc82dbcf3049ef957ffb2e39d1a58e8 100644 |
--- a/third_party/ocmock/OCMock/OCMRealObjectForwarder.m |
+++ b/third_party/ocmock/OCMock/OCMRealObjectForwarder.m |
@@ -1,11 +1,23 @@ |
-//--------------------------------------------------------------------------------------- |
-// $Id$ |
-// Copyright (c) 2010 by Mulle Kybernetik. See License file for details. |
-//--------------------------------------------------------------------------------------- |
+/* |
+ * Copyright (c) 2010-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 "OCPartialMockObject.h" |
#import "OCMRealObjectForwarder.h" |
+#import "OCMFunctions.h" |
@implementation OCMRealObjectForwarder |
@@ -13,15 +25,22 @@ |
- (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)))) |
+ |
+ [anInvocation setSelector:OCMAliasForOriginalSelector([anInvocation selector])]; |
+ if ([invocationTarget isProxy]) |
{ |
- // the method has been invoked on the mock, we need to change the target to the real object |
- [anInvocation setTarget:[(OCPartialMockObject *)invocationTarget realObject]]; |
- } |
+ if (class_getInstanceMethod([invocationTarget mockObjectClass], @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]]; |
+ } |
+ else |
+ { |
+ [NSException raise:NSInternalInconsistencyException |
+ format:@"Method andForwardToRealObject can only be used with partial mocks and class methods."]; |
+ } |
+ } |
+ |
[anInvocation invoke]; |
} |