-
Notifications
You must be signed in to change notification settings - Fork 95
/
Copy pathPerformOnFilesTests.m
141 lines (108 loc) · 5.16 KB
/
PerformOnFilesTests.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
//
// PerformOnFilesTests.m
// UnrarKit
//
//
#import "URKArchiveTestCase.h"
@interface PerformOnFilesTests : URKArchiveTestCase
@end
@implementation PerformOnFilesTests
- (void)testPerformOnFiles
{
NSArray *testArchives = @[@"Test Archive.rar",
@"Test Archive (Password).rar",
@"Test Archive (Header Password).rar"];
NSSet *expectedFileSet = [self.testFileURLs keysOfEntriesPassingTest:^BOOL(NSString *key, id obj, BOOL *stop) {
return ![key hasSuffix:@"rar"] && ![key hasSuffix:@"md"];
}];
NSArray *expectedFiles = [[expectedFileSet allObjects] sortedArrayUsingSelector:@selector(compare:)];
for (NSString *testArchiveName in testArchives) {
NSURL *testArchiveURL = self.testFileURLs[testArchiveName];
NSString *password = ([testArchiveName rangeOfString:@"Password"].location != NSNotFound
? @"password"
: nil);
URKArchive *archive = [[URKArchive alloc] initWithURL:testArchiveURL password:password error:nil];
__block NSUInteger fileIndex = 0;
NSError *error = nil;
[archive performOnFilesInArchive:
^(URKFileInfo *fileInfo, BOOL *stop) {
NSString *expectedFilename = expectedFiles[fileIndex++];
XCTAssertEqualObjects(fileInfo.filename, expectedFilename, @"Unexpected filename encountered");
} error:&error];
XCTAssertNil(error, @"Error iterating through files");
XCTAssertEqual(fileIndex, expectedFiles.count, @"Incorrect number of files encountered");
}
}
- (void)testPerformOnFiles_ModifiedCRC
{
NSURL *testArchiveURL = self.testFileURLs[@"Modified CRC Archive.rar"];
NSString *password = nil;
URKArchive *archive = [[URKArchive alloc] initWithURL:testArchiveURL password:password error:nil];
__block BOOL blockCalled = NO;
NSError *error = nil;
[archive performOnFilesInArchive:
^(URKFileInfo *fileInfo, BOOL *stop) {
blockCalled = YES;
} error:&error];
XCTAssertNotNil(error, @"Error iterating through files");
XCTAssertFalse(blockCalled);
}
- (void)testPerformOnFiles_ModifiedCRC_MismatchesIgnored
{
NSURL *testArchiveURL = self.testFileURLs[@"Modified CRC Archive.rar"];
NSString *password = nil;
URKArchive *archive = [[URKArchive alloc] initWithURL:testArchiveURL password:password error:nil];
archive.ignoreCRCMismatches = YES;
__block NSUInteger fileIndex = 0;
NSError *error = nil;
[archive performOnFilesInArchive:
^(URKFileInfo *fileInfo, BOOL *stop) {
XCTAssertEqual(fileIndex++, 0, @"performOnFilesInArchive called too many times");
XCTAssertEqualObjects(fileInfo.filename, @"README.md");
} error:&error];
XCTAssertNil(error, @"Error iterating through files");
}
- (void)testPerformOnFiles_Unicode
{
NSSet *expectedFileSet = [self.unicodeFileURLs keysOfEntriesPassingTest:^BOOL(NSString *key, id obj, BOOL *stop) {
return ![key hasSuffix:@"rar"] && ![key hasSuffix:@"md"];
}];
NSArray *expectedFiles = [[expectedFileSet allObjects] sortedArrayUsingSelector:@selector(compare:)];
NSURL *testArchiveURL = self.unicodeFileURLs[@"Ⓣest Ⓐrchive.rar"];
URKArchive *archive = [[URKArchive alloc] initWithURL:testArchiveURL error:nil];
__block NSUInteger fileIndex = 0;
NSError *error = nil;
[archive performOnFilesInArchive:
^(URKFileInfo *fileInfo, BOOL *stop) {
NSString *expectedFilename = expectedFiles[fileIndex++];
XCTAssertEqualObjects(fileInfo.filename, expectedFilename, @"Unexpected filename encountered");
} error:&error];
XCTAssertNil(error, @"Error iterating through files");
XCTAssertEqual(fileIndex, expectedFiles.count, @"Incorrect number of files encountered");
}
#if !TARGET_OS_IPHONE
- (void)testPerformOnFiles_Ordering
{
NSArray *testFilenames = @[@"AAA.txt",
@"BBB.txt",
@"CCC.txt"];
NSFileManager *fm = [NSFileManager defaultManager];
NSMutableArray *testFileURLs = [NSMutableArray array];
// Touch test files
[testFilenames enumerateObjectsUsingBlock:^(NSString *filename, NSUInteger idx, BOOL *stop) {
NSURL *outputURL = [self.tempDirectory URLByAppendingPathComponent:filename];
XCTAssertTrue([fm createFileAtPath:outputURL.path contents:nil attributes:nil], @"Failed to create test file: %@", filename);
[testFileURLs addObject:outputURL];
}];
// Create RAR archive with test files, reversed
NSURL *reversedArchiveURL = [self archiveWithFiles:testFileURLs.reverseObjectEnumerator.allObjects];
NSError *error = nil;
__block NSUInteger index = 0;
URKArchive *archive = [[URKArchive alloc] initWithURL:reversedArchiveURL error:nil];
[archive performOnFilesInArchive:^(URKFileInfo *fileInfo, BOOL *stop) {
NSString *expectedFilename = testFilenames[index++];
XCTAssertEqualObjects(fileInfo.filename, expectedFilename, @"Archive files not iterated through in correct order");
} error:&error];
}
#endif
@end