blob: a0f61fb9fcd4737467e66b056479ec9d2094213d [file] [log] [blame]
//
// GTMNSFileManager+PathTest.m
//
// Copyright 2006-2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file 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 "GTMSenTestCase.h"
#import "GTMNSFileManager+Path.h"
#import "GTMNSFileHandle+UniqueName.h"
@interface GTMNSFileManager_PathTest : GTMTestCase {
NSString *baseDir_;
}
@end
@implementation GTMNSFileManager_PathTest
- (void)setUp {
// make a directory to scribble in
NSFileManager *fm = [NSFileManager defaultManager];
baseDir_
= [[fm gtm_createTemporaryDirectoryBasedOn:@"GTMNSFileManager_PathTestXXXXXX"]
retain];
}
- (void)tearDown {
if (baseDir_) {
// clean up our directory
NSFileManager *fm = [NSFileManager defaultManager];
NSError *error = nil;
[fm removeItemAtPath:baseDir_ error:&error];
XCTAssertNil(error, @"Unable to delete %@: %@", baseDir_, error);
[baseDir_ release];
baseDir_ = nil;
}
}
- (void)testfilePathsWithExtensionsInDirectory {
XCTAssertNotNil(baseDir_, @"setUp failed");
NSFileManager *fm = [NSFileManager defaultManager];
NSString *bogusPath = @"/some/place/that/does/not/exist";
// --------------------------------------------------------------------------
// test fail cases first
// single
XCTAssertNil([fm gtm_filePathsWithExtension:nil inDirectory:nil],
@"shouldn't have gotten anything for nil dir");
XCTAssertNil([fm gtm_filePathsWithExtension:@"txt" inDirectory:nil],
@"shouldn't have gotten anything for nil dir");
XCTAssertNil([fm gtm_filePathsWithExtension:@"txt" inDirectory:bogusPath],
@"shouldn't have gotten anything for a bogus dir");
// array
XCTAssertNil([fm gtm_filePathsWithExtensions:nil inDirectory:nil],
@"shouldn't have gotten anything for nil dir");
XCTAssertNil([fm gtm_filePathsWithExtensions:[NSArray array] inDirectory:nil],
@"shouldn't have gotten anything for nil dir");
XCTAssertNil([fm gtm_filePathsWithExtensions:[NSArray arrayWithObject:@"txt"]
inDirectory:nil],
@"shouldn't have gotten anything for nil dir");
XCTAssertNil([fm gtm_filePathsWithExtensions:[NSArray arrayWithObject:@"txt"]
inDirectory:bogusPath],
@"shouldn't have gotten anything for a bogus dir");
// --------------------------------------------------------------------------
// create some test data
NSString *testDirs[] = {
@"", @"/foo", // mave a subdir to make sure we don't match w/in it
};
NSString *testFiles[] = {
@"a.txt", @"b.txt", @"c.rtf", @"d.m",
};
for (size_t i = 0; i < sizeof(testDirs) / sizeof(NSString*); i++) {
NSString *testDir = nil;
if ([testDirs[i] length]) {
testDir = [baseDir_ stringByAppendingPathComponent:testDirs[i]];
NSError *error = nil;
XCTAssertTrue([fm createDirectoryAtPath:testDir
withIntermediateDirectories:YES
attributes:nil
error:&error],
@"Can't create %@ (%@)", testDir, error);
} else {
testDir = baseDir_;
}
for (size_t j = 0; j < sizeof(testFiles) / sizeof(NSString*); j++) {
NSString *testFile = [testDir stringByAppendingPathComponent:testFiles[j]];
NSError *err = nil;
XCTAssertTrue([@"test" writeToFile:testFile
atomically:YES
encoding:NSUTF8StringEncoding
error:&err], @"Error: %@", err);
}
}
// build set of the top level items
NSMutableArray *allFiles = [NSMutableArray array];
for (size_t i = 0; i < sizeof(testDirs) / sizeof(NSString*); i++) {
if ([testDirs[i] length]) {
NSString *testDir = [baseDir_ stringByAppendingPathComponent:testDirs[i]];
[allFiles addObject:testDir];
}
}
for (size_t j = 0; j < sizeof(testFiles) / sizeof(NSString*); j++) {
NSString *testFile = [baseDir_ stringByAppendingPathComponent:testFiles[j]];
[allFiles addObject:testFile];
}
NSArray *matches = nil;
NSArray *expectedMatches = nil;
NSArray *extensions = nil;
// NOTE: we do all compares w/ sets so order doesn't matter
// --------------------------------------------------------------------------
// test match all
// single
matches = [fm gtm_filePathsWithExtension:nil inDirectory:baseDir_];
XCTAssertEqualObjects([NSSet setWithArray:matches],
[NSSet setWithArray:allFiles],
@"didn't get all files for nil extension");
matches = [fm gtm_filePathsWithExtension:@"" inDirectory:baseDir_];
XCTAssertEqualObjects([NSSet setWithArray:matches],
[NSSet setWithArray:allFiles],
@"didn't get all files for nil extension");
// array
matches = [fm gtm_filePathsWithExtensions:nil inDirectory:baseDir_];
XCTAssertEqualObjects([NSSet setWithArray:matches],
[NSSet setWithArray:allFiles],
@"didn't get all files for nil extension");
matches = [fm gtm_filePathsWithExtensions:[NSArray array]
inDirectory:baseDir_];
XCTAssertEqualObjects([NSSet setWithArray:matches],
[NSSet setWithArray:allFiles],
@"didn't get all files for nil extension");
// --------------------------------------------------------------------------
// test match something
// single
extensions = [NSArray arrayWithObject:@"txt"];
matches = [fm gtm_filePathsWithExtension:@"txt" inDirectory:baseDir_];
expectedMatches = [allFiles pathsMatchingExtensions:extensions];
XCTAssertEqualObjects([NSSet setWithArray:matches],
[NSSet setWithArray:expectedMatches],
@"didn't get expected files");
// array
matches = [fm gtm_filePathsWithExtensions:extensions inDirectory:baseDir_];
expectedMatches = [allFiles pathsMatchingExtensions:extensions];
XCTAssertEqualObjects([NSSet setWithArray:matches],
[NSSet setWithArray:expectedMatches],
@"didn't get expected files");
extensions = [NSArray arrayWithObjects:@"txt", @"rtf", @"xyz", nil];
matches = [fm gtm_filePathsWithExtensions:extensions inDirectory:baseDir_];
expectedMatches = [allFiles pathsMatchingExtensions:extensions];
XCTAssertEqualObjects([NSSet setWithArray:matches],
[NSSet setWithArray:expectedMatches],
@"didn't get expected files");
// --------------------------------------------------------------------------
// test match nothing
// single
extensions = [NSArray arrayWithObject:@"xyz"];
matches = [fm gtm_filePathsWithExtension:@"xyz" inDirectory:baseDir_];
expectedMatches = [allFiles pathsMatchingExtensions:extensions];
XCTAssertEqualObjects([NSSet setWithArray:matches],
[NSSet setWithArray:expectedMatches],
@"didn't get expected files");
// array
matches = [fm gtm_filePathsWithExtensions:extensions inDirectory:baseDir_];
expectedMatches = [allFiles pathsMatchingExtensions:extensions];
XCTAssertEqualObjects([NSSet setWithArray:matches],
[NSSet setWithArray:expectedMatches],
@"didn't get expected files");
// --------------------------------------------------------------------------
// test match an empty dir
// create the empty dir
NSString *emptyDir = [baseDir_ stringByAppendingPathComponent:@"emptyDir"];
NSError *error = nil;
XCTAssertTrue([fm createDirectoryAtPath:emptyDir
withIntermediateDirectories:YES
attributes:nil
error:&error],
@"Can't create %@ (%@)", emptyDir, error);
// single
matches = [fm gtm_filePathsWithExtension:@"txt" inDirectory:emptyDir];
XCTAssertEqualObjects([NSSet setWithArray:matches], [NSSet set],
@"expected empty dir");
// array
matches = [fm gtm_filePathsWithExtensions:[NSArray arrayWithObject:@"txt"]
inDirectory:emptyDir];
XCTAssertEqualObjects([NSSet setWithArray:matches], [NSSet set],
@"expected empty dir");
}
@end