Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(713)

Unified Diff: third_party/ocmock/OCMock/OCMRecorder.m

Issue 2410583002: Test update OCMock (Closed)
Patch Set: Patch in exactly 3.1.5 Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/ocmock/OCMock/OCMRecorder.h ('k') | third_party/ocmock/OCMock/OCMReturnValueProvider.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/ocmock/OCMock/OCMRecorder.m
diff --git a/third_party/ocmock/OCMock/OCMRecorder.m b/third_party/ocmock/OCMock/OCMRecorder.m
new file mode 100644
index 0000000000000000000000000000000000000000..64512efdc4efeb580d1b9eacda152928ca5bc887
--- /dev/null
+++ b/third_party/ocmock/OCMock/OCMRecorder.m
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2014-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 "OCMRecorder.h"
+#import "OCMockObject.h"
+#import "OCMInvocationMatcher.h"
+#import "OCClassMockObject.h"
+
+@implementation OCMRecorder
+
+- (instancetype)init {
+ // no super, we're inheriting from NSProxy
+ return self;
+}
+
+- (instancetype)initWithMockObject:(OCMockObject*)aMockObject {
+ [self init];
+ [self setMockObject:aMockObject];
+ return self;
+}
+
+- (void)setMockObject:(OCMockObject*)aMockObject {
+ mockObject = aMockObject;
+}
+
+- (void)dealloc {
+ [invocationMatcher release];
+ [super dealloc];
+}
+
+- (NSString*)description {
+ return [invocationMatcher description];
+}
+
+- (OCMInvocationMatcher*)invocationMatcher {
+ return invocationMatcher;
+}
+
+#pragma mark Modifying the matcher
+
+- (id)classMethod {
+ // should we handle the case where this is called with a mock that isn't a
+ // class mock?
+ [invocationMatcher setRecordedAsClassMethod:YES];
+ return self;
+}
+
+- (id)ignoringNonObjectArgs {
+ [invocationMatcher setIgnoreNonObjectArgs:YES];
+ return self;
+}
+
+#pragma mark Recording the actual invocation
+
+- (NSMethodSignature*)methodSignatureForSelector:(SEL)aSelector {
+ if ([invocationMatcher recordedAsClassMethod])
+ return [[(OCClassMockObject*)mockObject mockedClass]
+ methodSignatureForSelector:aSelector];
+
+ NSMethodSignature* signature =
+ [mockObject methodSignatureForSelector:aSelector];
+ if (signature == nil) {
+ // if we're a working with a class mock and there is a class method,
+ // auto-switch
+ if (([object_getClass(mockObject)
+ isSubclassOfClass:[OCClassMockObject class]]) &&
+ ([[(OCClassMockObject*)mockObject mockedClass]
+ respondsToSelector:aSelector])) {
+ [self classMethod];
+ signature = [self methodSignatureForSelector:aSelector];
+ }
+ }
+ return signature;
+}
+
+- (void)forwardInvocation:(NSInvocation*)anInvocation {
+ [anInvocation setTarget:nil];
+ [invocationMatcher setInvocation:anInvocation];
+}
+
+- (void)doesNotRecognizeSelector:(SEL)aSelector {
+ [NSException raise:NSInvalidArgumentException
+ format:@"%@: cannot stub/expect/verify method '%@' because no "
+ @"such method exists in the mocked class.",
+ mockObject, NSStringFromSelector(aSelector)];
+}
+
+@end
« no previous file with comments | « third_party/ocmock/OCMock/OCMRecorder.h ('k') | third_party/ocmock/OCMock/OCMReturnValueProvider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698