Created
February 24, 2010 23:20
-
-
Save revelation/314009 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@class GHTestCase; | |
@interface GHTestCase (Swizzle) | |
+ (id)sharedMock; | |
+ (void)setSharedMock:(id)newMock; | |
- (void)swizzle:(Class)target_class selector:(SEL)selector; | |
- (void)deswizzle; | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import "GHUnit.h" | |
#import "GHTestCase+Swizzle.h" | |
#import <objc/objc-runtime.h> | |
id sharedMockPointer = nil; | |
@implementation GHTestCase (Swizzle) | |
+(id)sharedMock | |
{ | |
return sharedMockPointer; | |
} | |
+(void)setSharedMock:(id)newMock | |
{ | |
sharedMockPointer = newMock; | |
} | |
Method originalMethod = nil; | |
Method swizzleMethod = nil; | |
- (void)swizzle:(Class)target_class selector:(SEL)selector | |
{ | |
originalMethod = class_getClassMethod(target_class, selector); | |
swizzleMethod = class_getInstanceMethod([self class], selector); | |
method_exchangeImplementations(originalMethod, swizzleMethod); | |
} | |
- (void)deswizzle | |
{ | |
method_exchangeImplementations(swizzleMethod, originalMethod); | |
swizzleMethod = nil; | |
originalMethod = nil; | |
} | |
@end |
Fantastic.
I had trouble compiling this for the simulator (Xcode 4.2).
If you change
#import <objc/objc-runtime.h
to
#import <objc/runtime.h>
this will compile and run in both the simulator and devices.
Sorry for the multiple edits - goofed on the formatting.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
That is awesome! Thanks for the update with blocks.