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

Added isEnabled getters for OHHTTPStubs. #159

Merged
merged 4 commits into from
Mar 13, 2016
Merged
Show file tree
Hide file tree
Changes from 3 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
16 changes: 16 additions & 0 deletions OHHTTPStubs/Sources/OHHTTPStubs.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,13 @@ typedef OHHTTPStubsResponse* __nonnull (^OHHTTPStubsResponseBlock)( NSURLRequest
*/
+(void)setEnabled:(BOOL)enabled;

/**
* Whether or not stubs are enabled for the shared session or for `NSURLConnection`
*
* @return If `YES` the stubs are enabled. If `NO` then the stubs are disabled
*/
+(BOOL)isEnabled;

#if defined(__IPHONE_7_0) || defined(__MAC_10_9)
/**
* Enable or disable the stubs on a given `NSURLSessionConfiguration`.
Expand All @@ -149,6 +156,15 @@ typedef OHHTTPStubsResponse* __nonnull (^OHHTTPStubsResponseBlock)( NSURLRequest
* created sessions.
*/
+ (void)setEnabled:(BOOL)enabled forSessionConfiguration:(NSURLSessionConfiguration *)sessionConfig;

/**
* Whether stubs are enabled or disabled on a given `NSURLSessionConfiguration`
*
* @param sessionConfig The NSURLSessionConfiguration on which to enable/disable the stubs
*
* @return If `YES` the stubs are enabled for sessionConfig. If `NO` then the stubs are disabled
*/
+ (BOOL)isEnabledForSessionConfiguration:(NSURLSessionConfiguration *)sessionConfig;
#endif

#pragma mark - Debug Methods
Expand Down
68 changes: 61 additions & 7 deletions OHHTTPStubs/Sources/OHHTTPStubs.m
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ @interface OHHTTPStubsProtocol : NSURLProtocol @end
@interface OHHTTPStubs()
+ (instancetype)sharedInstance;
@property(atomic, copy) NSMutableArray* stubDescriptors;
@property(atomic, assign) BOOL enabledState;
@property(atomic, copy, nullable) void (^onStubActivationBlock)(NSURLRequest*, id<OHHTTPStubsDescriptor>);
@end

Expand Down Expand Up @@ -105,7 +106,7 @@ + (void)initialize
{
if (self == [OHHTTPStubs class])
{
[self setEnabled:YES];
[self _setEnable:YES];
}
}
- (instancetype)init
Expand All @@ -114,13 +115,14 @@ - (instancetype)init
if (self)
{
_stubDescriptors = [NSMutableArray array];
_enabledState = YES; // assume initialize has already been run
}
return self;
}

- (void)dealloc
{
[self.class setEnabled:NO];
[self.class _setEnable:NO];
}

////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -149,18 +151,26 @@ +(void)removeAllStubs

#pragma mark > Disabling & Re-Enabling stubs

+(void)setEnabled:(BOOL)enable
+(void)_setEnable:(BOOL)enable
{
static BOOL currentEnabledState = NO;
if (enable && !currentEnabledState)
if (enable)
{
[NSURLProtocol registerClass:OHHTTPStubsProtocol.class];
}
else if (!enable && currentEnabledState)
else
{
[NSURLProtocol unregisterClass:OHHTTPStubsProtocol.class];
}
currentEnabledState = enable;
}

+(void)setEnabled:(BOOL)enabled
{
[OHHTTPStubs.sharedInstance setEnabled:enabled];
}

+(BOOL)isEnabled
{
return OHHTTPStubs.sharedInstance.isEnabled;
}

#if defined(__IPHONE_7_0) || defined(__MAC_10_9)
Expand Down Expand Up @@ -189,6 +199,31 @@ + (void)setEnabled:(BOOL)enable forSessionConfiguration:(NSURLSessionConfigurati
@"this method if the user is running iOS7+/OSX9+.", NSStringFromSelector(_cmd));
}
}

+ (BOOL)isEnabledForSessionConfiguration:(NSURLSessionConfiguration *)sessionConfig
{
// Runtime check to make sure the API is available on this version
if ( [sessionConfig respondsToSelector:@selector(protocolClasses)]
&& [sessionConfig respondsToSelector:@selector(setProtocolClasses:)])
{
NSMutableArray * urlProtocolClasses = [NSMutableArray arrayWithArray:sessionConfig.protocolClasses];
Class protoCls = OHHTTPStubsProtocol.class;
if ([urlProtocolClasses containsObject:protoCls])
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not directly return [urlProtocolClasses containsObject:protoCls];?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point!

{
return YES;
} else
{
return NO;
}
}
else
{
NSLog(@"[OHHTTPStubs] %@ is only available when running on iOS7+/OSX9+. "
@"Use conditions like 'if ([NSURLSessionConfiguration class])' to only call "
@"this method if the user is running iOS7+/OSX9+.", NSStringFromSelector(_cmd));
return NO;
}
}
#endif

#pragma mark > Debug Methods
Expand All @@ -208,6 +243,25 @@ +(void)onStubActivation:( nullable void(^)(NSURLRequest* request, id<OHHTTPStubs
////////////////////////////////////////////////////////////////////////////////
#pragma mark - Private instance methods

-(BOOL)isEnabled
{
BOOL enabled = NO;
@synchronized(self)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using self instead of _enabledStateNumber because that might change and cause multiple locks to be enabled for this property

{
enabled = _enabledState;
}
return enabled;
}

-(void)setEnabled:(BOOL)enable
{
@synchronized(self)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above

{
_enabledState = enable;
[self.class _setEnable:_enabledState];
}
}

-(void)addStub:(OHHTTPStubsDescriptor*)stubDesc
{
@synchronized(_stubDescriptors)
Expand Down