Index: third_party/ocmock/OCMock/OCMStubRecorder.m |
diff --git a/third_party/ocmock/OCMock/OCMStubRecorder.m b/third_party/ocmock/OCMock/OCMStubRecorder.m |
new file mode 100755 |
index 0000000000000000000000000000000000000000..665fa8f3106a7de936939453539e3fdf0da5e7c0 |
--- /dev/null |
+++ b/third_party/ocmock/OCMock/OCMStubRecorder.m |
@@ -0,0 +1,187 @@ |
+/* |
+ * Copyright (c) 2004-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 "OCMStubRecorder.h" |
+#import "OCClassMockObject.h" |
+#import "OCMReturnValueProvider.h" |
+#import "OCMBoxedReturnValueProvider.h" |
+#import "OCMExceptionReturnValueProvider.h" |
+#import "OCMIndirectReturnValueProvider.h" |
+#import "OCMNotificationPoster.h" |
+#import "OCMBlockCaller.h" |
+#import "OCMRealObjectForwarder.h" |
+#import "OCMFunctions.h" |
+#import "OCMInvocationStub.h" |
+ |
+ |
+@implementation OCMStubRecorder |
+ |
+#pragma mark Initialisers, description, accessors, etc. |
+ |
+- (id)init |
+{ |
+ self = [super init]; |
+ invocationMatcher = [[OCMInvocationStub alloc] init]; |
+ return self; |
+} |
+ |
+- (OCMInvocationStub *)stub |
+{ |
+ return (OCMInvocationStub *)invocationMatcher; |
+} |
+ |
+ |
+#pragma mark Recording invocation actions |
+ |
+- (id)andReturn:(id)anObject |
+{ |
+ [[self stub] addInvocationAction:[[[OCMReturnValueProvider alloc] initWithValue:anObject] autorelease]]; |
+ return self; |
+} |
+ |
+- (id)andReturnValue:(NSValue *)aValue |
+{ |
+ [[self stub] addInvocationAction:[[[OCMBoxedReturnValueProvider alloc] initWithValue:aValue] autorelease]]; |
+ return self; |
+} |
+ |
+- (id)andThrow:(NSException *)anException |
+{ |
+ [[self stub] addInvocationAction:[[[OCMExceptionReturnValueProvider alloc] initWithValue:anException] autorelease]]; |
+ return self; |
+} |
+ |
+- (id)andPost:(NSNotification *)aNotification |
+{ |
+ [[self stub] addInvocationAction:[[[OCMNotificationPoster alloc] initWithNotification:aNotification] autorelease]]; |
+ return self; |
+} |
+ |
+- (id)andCall:(SEL)selector onObject:(id)anObject |
+{ |
+ [[self stub] addInvocationAction:[[[OCMIndirectReturnValueProvider alloc] initWithProvider:anObject andSelector:selector] autorelease]]; |
+ return self; |
+} |
+ |
+- (id)andDo:(void (^)(NSInvocation *))aBlock |
+{ |
+ [[self stub] addInvocationAction:[[[OCMBlockCaller alloc] initWithCallBlock:aBlock] autorelease]]; |
+ return self; |
+} |
+ |
+- (id)andForwardToRealObject |
+{ |
+ [[self stub] addInvocationAction:[[[OCMRealObjectForwarder alloc] init] autorelease]]; |
+ return self; |
+} |
+ |
+ |
+#pragma mark Finishing recording |
+ |
+- (void)forwardInvocation:(NSInvocation *)anInvocation |
+{ |
+ [super forwardInvocation:anInvocation]; |
+ [mockObject addStub:[self stub]]; |
+} |
+ |
+ |
+@end |
+ |
+ |
+@implementation OCMStubRecorder (Properties) |
+ |
+@dynamic _andReturn; |
+ |
+- (OCMStubRecorder *(^)(NSValue *))_andReturn |
+{ |
+ id (^theBlock)(id) = ^ (NSValue *aValue) |
+ { |
+ if(OCMIsObjectType([aValue objCType])) |
+ { |
+ NSValue *objValue = nil; |
+ [aValue getValue:&objValue]; |
+ return [self andReturn:objValue]; |
+ } |
+ else |
+ { |
+ return [self andReturnValue:aValue]; |
+ } |
+ }; |
+ return [[theBlock copy] autorelease]; |
+} |
+ |
+ |
+@dynamic _andThrow; |
+ |
+- (OCMStubRecorder *(^)(NSException *))_andThrow |
+{ |
+ id (^theBlock)(id) = ^ (NSException * anException) |
+ { |
+ return [self andThrow:anException]; |
+ }; |
+ return [[theBlock copy] autorelease]; |
+} |
+ |
+ |
+@dynamic _andPost; |
+ |
+- (OCMStubRecorder *(^)(NSNotification *))_andPost |
+{ |
+ id (^theBlock)(id) = ^ (NSNotification * aNotification) |
+ { |
+ return [self andPost:aNotification]; |
+ }; |
+ return [[theBlock copy] autorelease]; |
+} |
+ |
+ |
+@dynamic _andCall; |
+ |
+- (OCMStubRecorder *(^)(id, SEL))_andCall |
+{ |
+ id (^theBlock)(id, SEL) = ^ (id anObject, SEL aSelector) |
+ { |
+ return [self andCall:aSelector onObject:anObject]; |
+ }; |
+ return [[theBlock copy] autorelease]; |
+} |
+ |
+ |
+@dynamic _andDo; |
+ |
+- (OCMStubRecorder *(^)(void (^)(NSInvocation *)))_andDo |
+{ |
+ id (^theBlock)(void (^)(NSInvocation *)) = ^ (void (^ blockToCall)(NSInvocation *)) |
+ { |
+ return [self andDo:blockToCall]; |
+ }; |
+ return [[theBlock copy] autorelease]; |
+} |
+ |
+ |
+@dynamic _andForwardToRealObject; |
+ |
+- (OCMStubRecorder *(^)(void))_andForwardToRealObject |
+{ |
+ id (^theBlock)(void) = ^ (void) |
+ { |
+ return [self andForwardToRealObject]; |
+ }; |
+ return [[theBlock copy] autorelease]; |
+} |
+ |
+ |
+@end |