Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for having warnings vs errors #424

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion OCMock.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Pod::Spec.new do |s|
"OCMLocation.h", "OCMMacroState.h", "OCMRecorder.h",
"OCMStubRecorder.h", "NSNotificationCenter+OCMAdditions.h",
"OCMFunctions.h", "OCMVerifier.h", "OCMQuantifier.h",
"OCMockMacros.h"
"OCMockMacros.h", "OCMIssueReporter.h"
]
.map { |file| "Source/OCMock/" + file }
end
30 changes: 30 additions & 0 deletions Source/OCMock.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,18 @@
8BF7402124772B0600B9A52C /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03565A1D18F05626003AE91E /* XCTest.framework */; };
8BF7402224772B0800B9A52C /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03565A1D18F05626003AE91E /* XCTest.framework */; };
8BF7402324772B0800B9A52C /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03565A1D18F05626003AE91E /* XCTest.framework */; };
8B911C8C247B97A500A3581F /* OCMIssueReporterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B911C8B247B97A500A3581F /* OCMIssueReporterTests.m */; };
8B911C8D247B97A500A3581F /* OCMIssueReporterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B911C8B247B97A500A3581F /* OCMIssueReporterTests.m */; };
8BF74028247AE3F100B9A52C /* OCMIssueReporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF74026247AE3F100B9A52C /* OCMIssueReporter.h */; settings = {ATTRIBUTES = (Public, ); }; };
8BF74029247AE3F100B9A52C /* OCMIssueReporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF74026247AE3F100B9A52C /* OCMIssueReporter.h */; settings = {ATTRIBUTES = (Public, ); }; };
8BF7402A247AE3F100B9A52C /* OCMIssueReporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF74026247AE3F100B9A52C /* OCMIssueReporter.h */; settings = {ATTRIBUTES = (Public, ); }; };
8BF7402B247AE3F100B9A52C /* OCMIssueReporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF74026247AE3F100B9A52C /* OCMIssueReporter.h */; settings = {ATTRIBUTES = (Public, ); }; };
8BF7402C247AE3F100B9A52C /* OCMIssueReporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF74026247AE3F100B9A52C /* OCMIssueReporter.h */; settings = {ATTRIBUTES = (Public, ); }; };
8BF7402D247AE3F100B9A52C /* OCMIssueReporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BF74027247AE3F100B9A52C /* OCMIssueReporter.m */; };
8BF7402E247AE3F100B9A52C /* OCMIssueReporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BF74027247AE3F100B9A52C /* OCMIssueReporter.m */; };
8BF7402F247AE3F100B9A52C /* OCMIssueReporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BF74027247AE3F100B9A52C /* OCMIssueReporter.m */; };
8BF74030247AE3F100B9A52C /* OCMIssueReporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BF74027247AE3F100B9A52C /* OCMIssueReporter.m */; };
8BF74031247AE3F100B9A52C /* OCMIssueReporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BF74027247AE3F100B9A52C /* OCMIssueReporter.m */; };
8DE97C5522B43EE60098C63F /* OCMockObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 03B3159E146333BF0052CD09 /* OCMockObject.m */; };
8DE97C5622B43EE60098C63F /* OCClassMockObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 03B3158C146333BF0052CD09 /* OCClassMockObject.m */; };
8DE97C5722B43EE60098C63F /* OCPartialMockObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 03B315AA146333BF0052CD09 /* OCPartialMockObject.m */; };
Expand Down Expand Up @@ -588,7 +600,10 @@
8B11D4B62448E2E900247BE2 /* OCMCPlusPlus98Tests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OCMCPlusPlus98Tests.mm; sourceTree = "<group>"; };
8B11D4B92448E53600247BE2 /* OCMCPlusPlus11Tests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OCMCPlusPlus11Tests.mm; sourceTree = "<group>"; };
8B3786A724E5BD5600FD1B5B /* OCMFunctionsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OCMFunctionsTests.m; sourceTree = "<group>"; };
8B911C8B247B97A500A3581F /* OCMIssueReporterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCMIssueReporterTests.m; sourceTree = "<group>"; };
8BF73E52246CA75E00B9A52C /* OCMNoEscapeBlockTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCMNoEscapeBlockTests.m; sourceTree = "<group>"; };
8BF74026247AE3F100B9A52C /* OCMIssueReporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMIssueReporter.h; sourceTree = "<group>"; };
8BF74027247AE3F100B9A52C /* OCMIssueReporter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCMIssueReporter.m; sourceTree = "<group>"; };
8DE97CA022B43EE60098C63F /* OCMock.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OCMock.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A02926811CA0725A00594AAF /* TestObjects.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = TestObjects.xcdatamodel; sourceTree = "<group>"; };
D31108AD1828DB8700737925 /* OCMockLibTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OCMockLibTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
Expand Down Expand Up @@ -769,6 +784,7 @@
03B316211463350E0052CD09 /* OCMConstraintTests.m */,
8B11D4B62448E2E900247BE2 /* OCMCPlusPlus98Tests.mm */,
8B11D4B92448E53600247BE2 /* OCMCPlusPlus11Tests.mm */,
8B911C8B247B97A500A3581F /* OCMIssueReporterTests.m */,
2FA28EDBF243639C57F88A1B /* OCMArgTests.m */,
036865631D3571A8005E6BEE /* OCMQuantifierTests.m */,
03B316291463350E0052CD09 /* OCObserverMockObjectTests.m */,
Expand Down Expand Up @@ -816,6 +832,8 @@
037ECD5618FB0D2E00AF0E4C /* Helper */ = {
isa = PBXGroup;
children = (
8BF74026247AE3F100B9A52C /* OCMIssueReporter.h */,
8BF74027247AE3F100B9A52C /* OCMIssueReporter.m */,
03E98D4918F308B400522D42 /* OCMLocation.h */,
03E98D4A18F308B400522D42 /* OCMLocation.m */,
2FA28006D043CBDBBAEF6E3F /* OCMMacroState.h */,
Expand Down Expand Up @@ -996,6 +1014,7 @@
0368656D1D357317005E6BEE /* OCMQuantifier.h in Headers */,
3C0FF06A1BAA3FD10021AD20 /* OCMFunctionsPrivate.h in Headers */,
03B31613146333C00052CD09 /* OCProtocolMockObject.h in Headers */,
8BF74028247AE3F100B9A52C /* OCMIssueReporter.h in Headers */,
2FA287ACE547BB41937BDEC3 /* NSObject+OCMAdditions.h in Headers */,
2FA28641AAD0AC2F876C9E48 /* OCMInvocationMatcher.h in Headers */,
0322DA6919118B4600CACAF1 /* OCMVerifier.h in Headers */,
Expand Down Expand Up @@ -1039,6 +1058,7 @@
03B315FB146333C00052CD09 /* OCMRealObjectForwarder.h in Headers */,
03DCED6F183406DA0059089E /* NSObject+OCMAdditions.h in Headers */,
0368656E1D357318005E6BEE /* OCMQuantifier.h in Headers */,
8BF74029247AE3F100B9A52C /* OCMIssueReporter.h in Headers */,
817EB1661BD7674D0047E85A /* OCMFunctionsPrivate.h in Headers */,
03B31605146333C00052CD09 /* OCObserverMockObject.h in Headers */,
03B3160A146333C00052CD09 /* OCPartialMockObject.h in Headers */,
Expand Down Expand Up @@ -1094,6 +1114,7 @@
817EB15B1BD765130047E85A /* OCMFunctions.h in Headers */,
817EB15C1BD765130047E85A /* OCMBlockArgCaller.h in Headers */,
033AB1FD24F046C7002014AE /* OCMockMacros.h in Headers */,
8BF7402B247AE3F100B9A52C /* OCMIssueReporter.h in Headers */,
817EB15D1BD765130047E85A /* OCMArgAction.h in Headers */,
2FA28806443827E286F12F6F /* OCMNonRetainingObjectReturnValueProvider.h in Headers */,
);
Expand Down Expand Up @@ -1130,6 +1151,7 @@
8DE97C9122B43EE60098C63F /* OCMFunctionsPrivate.h in Headers */,
8DE97C9222B43EE60098C63F /* OCObserverMockObject.h in Headers */,
8DE97C9322B43EE60098C63F /* OCMObserverRecorder.h in Headers */,
8BF7402C247AE3F100B9A52C /* OCMIssueReporter.h in Headers */,
8DE97C9422B43EE60098C63F /* OCMPassByRefSetter.h in Headers */,
8DE97C9522B43EE60098C63F /* NSInvocation+OCMAdditions.h in Headers */,
8DE97C9622B43EE60098C63F /* NSMethodSignature+OCMAdditions.h in Headers */,
Expand Down Expand Up @@ -1184,6 +1206,7 @@
F0B9514A1B00810C00942C38 /* OCMFunctions.h in Headers */,
2FA28B7BDB3319A499E90525 /* OCMBlockArgCaller.h in Headers */,
033AB1FC24F046C7002014AE /* OCMockMacros.h in Headers */,
8BF7402A247AE3F100B9A52C /* OCMIssueReporter.h in Headers */,
2FA280E60213BA09F007C173 /* OCMArgAction.h in Headers */,
2FA28AFBD67EAB9DD1F23BF5 /* OCMNonRetainingObjectReturnValueProvider.h in Headers */,
);
Expand Down Expand Up @@ -1440,6 +1463,7 @@
03B315B6146333BF0052CD09 /* NSMethodSignature+OCMAdditions.m in Sources */,
03618D85195B553400389166 /* OCMRecorder.m in Sources */,
03C7BF0C195DA2F200A545DD /* OCMInvocationStub.m in Sources */,
8BF7402D247AE3F100B9A52C /* OCMIssueReporter.m in Sources */,
03B315BB146333BF0052CD09 /* NSNotificationCenter+OCMAdditions.m in Sources */,
0322DA6B19118B4600CACAF1 /* OCMVerifier.m in Sources */,
03B315C0146333BF0052CD09 /* OCClassMockObject.m in Sources */,
Expand Down Expand Up @@ -1482,6 +1506,7 @@
03B315B8146333BF0052CD09 /* NSMethodSignature+OCMAdditions.m in Sources */,
03618D86195B553400389166 /* OCMRecorder.m in Sources */,
03C7BF0D195DA2F200A545DD /* OCMInvocationStub.m in Sources */,
8BF7402E247AE3F100B9A52C /* OCMIssueReporter.m in Sources */,
03B315BD146333BF0052CD09 /* NSNotificationCenter+OCMAdditions.m in Sources */,
0322DA6C19118B4600CACAF1 /* OCMVerifier.m in Sources */,
03B315C2146333BF0052CD09 /* OCClassMockObject.m in Sources */,
Expand Down Expand Up @@ -1529,6 +1554,7 @@
03E98D5018F310EE00522D42 /* OCMockObjectMacroTests.m in Sources */,
03565A4A18F05721003AE91E /* OCObserverMockObjectTests.m in Sources */,
03565A4318F05721003AE91E /* OCMockObjectClassMethodMockingTests.m in Sources */,
8B911C8C247B97A500A3581F /* OCMIssueReporterTests.m in Sources */,
03565A4918F05721003AE91E /* OCMArgTests.m in Sources */,
036865641D3571A8005E6BEE /* OCMQuantifierTests.m in Sources */,
0322DA65191188D100CACAF1 /* OCMockObjectVerifyAfterRunTests.m in Sources */,
Expand Down Expand Up @@ -1556,6 +1582,7 @@
817EB1181BD765130047E85A /* OCClassMockObject.m in Sources */,
817EB1191BD765130047E85A /* OCPartialMockObject.m in Sources */,
817EB11A1BD765130047E85A /* OCProtocolMockObject.m in Sources */,
8BF74030247AE3F100B9A52C /* OCMIssueReporter.m in Sources */,
817EB11B1BD765130047E85A /* OCMRecorder.m in Sources */,
817EB11C1BD765130047E85A /* OCMStubRecorder.m in Sources */,
817EB11D1BD765130047E85A /* OCMExpectationRecorder.m in Sources */,
Expand Down Expand Up @@ -1598,6 +1625,7 @@
8DE97C5622B43EE60098C63F /* OCClassMockObject.m in Sources */,
8DE97C5722B43EE60098C63F /* OCPartialMockObject.m in Sources */,
8DE97C5822B43EE60098C63F /* OCProtocolMockObject.m in Sources */,
8BF74031247AE3F100B9A52C /* OCMIssueReporter.m in Sources */,
8DE97C5922B43EE60098C63F /* OCMRecorder.m in Sources */,
03A1CC9F23F8A045005ADA04 /* OCMQuantifier.m in Sources */,
8DE97C5A22B43EE60098C63F /* OCMStubRecorder.m in Sources */,
Expand Down Expand Up @@ -1645,6 +1673,7 @@
D31108C51828DBD600737925 /* OCMockObjectClassMethodMockingTests.m in Sources */,
D31108C71828DBD600737925 /* OCMConstraintTests.m in Sources */,
D31108C91828DBD600737925 /* OCObserverMockObjectTests.m in Sources */,
8B911C8D247B97A500A3581F /* OCMIssueReporterTests.m in Sources */,
037ECD5518FAD84100AF0E4C /* OCMInvocationMatcherTests.m in Sources */,
D31108C41828DBD600737925 /* OCMockObjectPartialMocksTests.m in Sources */,
D31108C81828DBD600737925 /* OCMStubRecorderTests.m in Sources */,
Expand Down Expand Up @@ -1672,6 +1701,7 @@
F0B9510D1B0080EC00942C38 /* OCClassMockObject.m in Sources */,
F0B9510E1B0080EC00942C38 /* OCPartialMockObject.m in Sources */,
F0B9510F1B0080EC00942C38 /* OCProtocolMockObject.m in Sources */,
8BF7402F247AE3F100B9A52C /* OCMIssueReporter.m in Sources */,
F0B951101B0080EC00942C38 /* OCMRecorder.m in Sources */,
F0B951111B0080EC00942C38 /* OCMStubRecorder.m in Sources */,
F0B951121B0080EC00942C38 /* OCMExpectationRecorder.m in Sources */,
Expand Down
61 changes: 61 additions & 0 deletions Source/OCMock/OCMIssueReporter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* Copyright (c) 2014-2020 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 <Foundation/Foundation.h>
#import "OCMFunctions.h"

// Use this define to be able to control the default issue treatment from a build.
// It can be overridden by using `OCMIssueTreatmentDefaultEnvironmentVariable`.
#ifndef OCMIssueTreatmentDefault
#define OCMIssueTreatmentDefault OCMIssueTreatmentWarnings
#endif

// Use this to control the default issue treatment through the environment.
// It can be set to 0 for warnings or 1 for errors.
#define OCMIssueTreatmentDefaultEnvironmentVariable @"OCMIssueTreatmentDefault"

// The name of NSExceptions thrown by default when an issue it treated as an error.
OCMOCK_EXTERN NSExceptionName const OCMIssueException;

typedef NS_ENUM(NSUInteger, OCMIssueTreatment)
{
// Warnings are printed to stderr.
OCMIssueTreatmentWarnings = 0,
// Errors are thrown an NSExceptions.
OCMIssueTreatmentErrors,
};

@interface OCMIssueReporter : NSObject
{
NSMutableArray *issueTreatmentStack;
}

+ (instancetype)defaultReporter;

- (void)reportIssueInFile:(const char *)file line:(NSUInteger)line format:(NSString *)format, ... NS_FORMAT_FUNCTION(3,4);
- (void)reportIssueInFilev:(const char *)file line:(NSUInteger)line format:(NSString *)format arguments:(va_list)args NS_FORMAT_FUNCTION(3,0);
- (void)reportIssueInFile:(const char *)file line:(NSUInteger)line exceptionName:(NSExceptionName)name reason:(NSString *)reason;

// Pushes/Pops an issue treatment on the stack. Push and Pop can only be called from the main thread and must be balanced.
- (void)pushIssueTreatment:(OCMIssueTreatment)treatment;
- (void)popIssueTreatment;

// The current issue treatment on the top of the stack.
- (OCMIssueTreatment)issueTreatment;

@end

#define OCM_REPORT_ISSUE(_format, ...) ([[OCMIssueReporter defaultReporter] reportIssueInFile:__FILE__ line:__LINE__ format:_format, __VA_ARGS__ ])
166 changes: 166 additions & 0 deletions Source/OCMock/OCMIssueReporter.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
/*
* Copyright (c) 2014-2020 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 "OCMIssueReporter.h"

NSExceptionName const OCMIssueException = @"OCMIssueException";

@implementation OCMIssueReporter

+ (instancetype)defaultReporter
{
static dispatch_once_t onceToken;
static OCMIssueReporter *defaultReporter;
dispatch_once(&onceToken, ^{
defaultReporter = [[OCMIssueReporter alloc] init];
atexit_b(^{
if([defaultReporter->issueTreatmentStack count] != 1)
{
[NSException raise:NSInternalInconsistencyException format:@"Unmatched push/pops on OCMIssueRecorder"];
}
});
});
return defaultReporter;
}

- (instancetype)init
{
if((self = [super init]))
{
NSDictionary *environment = [[NSProcessInfo processInfo] environment];
OCMIssueTreatment value;
NSString *stringValue = [environment objectForKey:OCMIssueTreatmentDefaultEnvironmentVariable];
if(stringValue)
{
value = [stringValue integerValue];
}
else
{
value = OCMIssueTreatmentDefault;
}
if(value > OCMIssueTreatmentErrors)
{
[NSException raise:NSInvalidArgumentException format:@"OCMIssueReporter has invalid default issue treatment: %d", (int)value];
}
issueTreatmentStack = [[NSMutableArray alloc] init];
[issueTreatmentStack addObject:[NSNumber numberWithInteger:value]];
}
return self;
}

- (void)dealloc
{
[issueTreatmentStack release];
[super dealloc];
}

- (void)reportIssueInFile:(const char *)file line:(NSUInteger)line format:(NSString *)format, ...
{
va_list arguments;
va_start(arguments, format);
[self reportIssueInFilev:file line:line format:format arguments:arguments];
va_end(arguments);
}

- (void)reportIssueInFilev:(const char *)file line:(NSUInteger)line format:(NSString *)format arguments:(va_list)arguments
{
NSString *description = [[NSString alloc] initWithFormat:format arguments:arguments];
[self reportIssueInFile:file line:line exceptionName:OCMIssueException reason:description];
[description release];
}

- (void)reportIssueInFile:(const char *)file line:(NSUInteger)line exceptionName:(NSExceptionName)name reason:(NSString *)reason
{
OCMIssueTreatment treatment = [self issueTreatment];
NSString *fullDescription;
NSString *type;
switch(treatment)
{
case OCMIssueTreatmentWarnings:
type = @"warning";
break;

case OCMIssueTreatmentErrors:
type = @"error";
break;

default:
[NSException raise:NSInternalInconsistencyException format:@"Unknown issue treatment: %d", (int)treatment];
break;
}
if(file)
{
fullDescription = [[NSString alloc] initWithFormat:@"%s:%d:0: %@: %@", file, (int)line, type, reason];
}
else
{
fullDescription = [[NSString alloc] initWithFormat:@"%@: %@", type, reason];
}
switch(treatment)
{
case OCMIssueTreatmentWarnings:
fprintf(stderr, "%s\n", [fullDescription UTF8String]);
break;

case OCMIssueTreatmentErrors:
[NSException raise:name format:@"%@", fullDescription];
break;

default:
[NSException raise:NSInternalInconsistencyException format:@"Unknown issue treatment: %d", (int)treatment];
break;
}
}

- (void)pushIssueTreatment:(OCMIssueTreatment)treatment
{
if(![NSThread isMainThread])
{
[NSException raise:NSInternalInconsistencyException format:@"pushIssueTreatment can only be called on main thread"];
}
@synchronized(self)
{
[issueTreatmentStack addObject:[NSNumber numberWithInteger:treatment]];
}
}

- (void)popIssueTreatment
{
if(![NSThread isMainThread])
{
[NSException raise:NSInternalInconsistencyException format:@"popIssueTreatment can only be called on main thread"];
}

@synchronized(self)
{
if([issueTreatmentStack count] == 1)
{
[NSException raise:NSInternalInconsistencyException format:@"unbalanced calls to pushIssueTreatment/popIssueTreatment"];
}
[issueTreatmentStack removeLastObject];
}
}

- (OCMIssueTreatment)issueTreatment
{
OCMIssueTreatment treatment;
@synchronized(self)
{
treatment = [[issueTreatmentStack lastObject] integerValue];
}
return treatment;
}
@end
1 change: 1 addition & 0 deletions Source/OCMock/OCMock.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,4 @@
#import <OCMock/OCMMacroState.h>
#import <OCMock/NSNotificationCenter+OCMAdditions.h>
#import <OCMock/OCMFunctions.h>
#import <OCMock/OCMIssueReporter.h>
Loading