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 |
That is awesome! Thanks for the update with blocks.
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
Hi I found your gist while searching for testing of the Class methods, it inspired me to implement the same concepts with blocks: git://gist.github.com/1038034.git
Thanks for sharing!