Last active
March 16, 2016 13:55
-
-
Save fundter/f1ed73bd9beb8d6dfac3 to your computer and use it in GitHub Desktop.
Simple XCTest base class to handle filesystem based tests
This file contains hidden or 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
// | |
// SampleTest.m | |
// | |
#import "TestBase.h" | |
@interface DiscoveryTests : TestBase | |
@end | |
@implementation DiscoveryTests { | |
NSURL *_library; | |
} | |
-(BOOL)requireFilesystem { | |
// Enable filesystem support. If enabled, a new temporary directory is | |
// created prior and deleted after each individual test. | |
return YES; | |
} | |
-(void)setUp { | |
// This one is important! Call before your setup code. | |
[super setUp]; | |
// Now, setup a filesystem structure for the tests... | |
// Create some directories... | |
_library = [self createDirectory:@"JDocLibrary"]; | |
NSURL *awmDocuments = [self createDirectory:@"AWM" insideDirectory:_library]; | |
NSURL *companyDocuments = [self createDirectory:@"Company" insideDirectory:_library]; | |
NSURL *flightDocuments = [self createDirectory:@"Flight" insideDirectory:_library]; | |
NSURL *operatorDocuments = [self createDirectory:@"Operator" insideDirectory:_library]; | |
// Copy some test resources... | |
[self copyResource:@"eawm_general" toDirectory:awmDocuments]; | |
[self copyResource:@"jep-afom" toDirectory:operatorDocuments]; | |
// Create temporary files... | |
[self createFile:@"test.txt" withContent:nil insideDirectory:companyDocuments]; | |
} | |
- (void)test { | |
// Test code | |
} | |
@end |
This file contains hidden or 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
// | |
// TestBase.h | |
// | |
#import <XCTest/XCTest.h> | |
@interface TestBase : XCTestCase | |
@property NSURL *testLocation; | |
-(BOOL)requireFilesystem; | |
-(NSURL *)copyResource:(NSString *)resourceName; | |
-(NSURL *)copyResource:(NSString *)resourceName toDirectory:(NSURL *)directory; | |
-(NSURL *)createFile:(NSString *)name withContent:(NSData *)content; | |
-(NSURL *)createFile:(NSString *)name withContent:(NSData *)content insideDirectory:(NSURL *)directory; | |
-(NSURL *)createDirectory:(NSString *)name; | |
-(NSURL *)createDirectory:(NSString *)name insideDirectory:(NSURL *)directory; | |
@end |
This file contains hidden or 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
// | |
// TestBase.m | |
// | |
#import "TestBase.h" | |
@interface TestBase() | |
-(NSURL *)getResources; | |
@end | |
@implementation TestBase | |
-(BOOL)requireFilesystem { | |
return NO; | |
} | |
-(NSURL *)copyResource:(NSString *)resourceName { | |
return [self copyResource:resourceName toDirectory:self.testLocation]; | |
} | |
-(NSURL *)copyResource:(NSString *)resourceName toDirectory:(NSURL *)directory { | |
NSError *error; | |
NSURL *source = [[self getResources] URLByAppendingPathComponent:resourceName]; | |
NSURL *target = [directory URLByAppendingPathComponent:resourceName]; | |
if (![[NSFileManager defaultManager] copyItemAtURL:source | |
toURL:target | |
error:&error]) { | |
NSLog(@"Error copying test resource: %@", error.localizedDescription); | |
return nil; | |
} | |
return target; | |
} | |
-(NSURL *)createFile:(NSString *)name withContent:(NSData *)content { | |
return [self createFile:name withContent:content insideDirectory:self.testLocation]; | |
} | |
-(NSURL *)createFile:(NSString *)name withContent:(NSData *)content insideDirectory:(NSURL *)directory { | |
NSURL *file = [directory URLByAppendingPathComponent:name]; | |
if (![[NSFileManager defaultManager] createFileAtPath:file.path contents:content attributes:nil]) { | |
NSLog(@"Error creating file: %@", name); | |
return nil; | |
} | |
return file; | |
} | |
-(NSURL *)createDirectory:(NSString *)name { | |
return [self createDirectory:name insideDirectory:self.testLocation]; | |
} | |
-(NSURL *)createDirectory:(NSString *)name insideDirectory:(NSURL *)directory { | |
NSError *error; | |
NSURL *dir = [directory URLByAppendingPathComponent:name]; | |
if (![[NSFileManager defaultManager] createDirectoryAtURL:dir withIntermediateDirectories:YES attributes:nil error:&error]) { | |
NSLog(@"Error creating test directory: %@", error.localizedDescription); | |
return nil; | |
} | |
return dir; | |
} | |
-(void)setUp { | |
[super setUp]; | |
// Abort tests immediately when an assertion fails | |
self.continueAfterFailure = NO; | |
if ([self requireFilesystem]) { | |
NSError *error; | |
NSURL *location = [[NSURL fileURLWithPath:NSTemporaryDirectory()] URLByAppendingPathComponent:[[NSProcessInfo processInfo] globallyUniqueString]]; | |
if ([[NSFileManager defaultManager] createDirectoryAtURL:location withIntermediateDirectories:YES attributes:nil error:&error]) { | |
self.testLocation = location; | |
} | |
else { | |
NSLog(@"Error creating test directory: %@", error.localizedDescription); | |
} | |
} | |
else { | |
_testLocation = nil; | |
} | |
} | |
-(void)tearDown { | |
if ([self requireFilesystem]) { | |
NSFileManager *fileManager = [NSFileManager defaultManager]; | |
if ([fileManager fileExistsAtPath:self.testLocation.path]) { | |
[fileManager removeItemAtPath:self.testLocation.path error:nil]; | |
} | |
} | |
[super tearDown]; | |
} | |
-(NSURL *)getResources { | |
// Path to test resources | |
return [[NSBundle bundleForClass:self.class] URLForResource:@"Resources" | |
withExtension:nil]; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment