115 lines
4.3 KiB
Mathematica
115 lines
4.3 KiB
Mathematica
|
//
|
||
|
// ModesTests.m
|
||
|
// UnzipKit
|
||
|
//
|
||
|
// Created by Dov Frankel on 7/16/15.
|
||
|
// Copyright (c) 2015 Abbey Code. All rights reserved.
|
||
|
//
|
||
|
|
||
|
#import "UZKArchiveTestCase.h"
|
||
|
#import "UnzipKit.h"
|
||
|
|
||
|
|
||
|
@interface ModesTests : UZKArchiveTestCase
|
||
|
@end
|
||
|
|
||
|
@implementation ModesTests
|
||
|
|
||
|
|
||
|
- (void)testModes_WriteWhileReading
|
||
|
{
|
||
|
NSURL *testArchiveURL = self.testFileURLs[@"Test Archive.zip"];
|
||
|
UZKArchive *archive = [[UZKArchive alloc] initWithURL:testArchiveURL error:nil];
|
||
|
NSError *readError = nil;
|
||
|
|
||
|
[archive performOnDataInArchive:^(UZKFileInfo *fileInfo, NSData *fileData, BOOL *stop) {
|
||
|
NSError *writeError = nil;
|
||
|
[archive writeData:fileData filePath:@"newPath.txt" error:&writeError];
|
||
|
XCTAssertNotNil(writeError, @"Write operation during a read succeeded");
|
||
|
XCTAssertEqual(writeError.code, UZKErrorCodeMixedModeAccess, @"Wrong error code returned");
|
||
|
} error:&readError];
|
||
|
|
||
|
XCTAssertNil(readError, @"readError was also non-nil");
|
||
|
}
|
||
|
|
||
|
- (void)testModes_NestedReads
|
||
|
{
|
||
|
NSArray *expectedFiles = [self.nonZipTestFilePaths.allObjects sortedArrayUsingSelector:@selector(compare:)];
|
||
|
|
||
|
NSURL *testArchiveURL = self.testFileURLs[@"Test Archive.zip"];
|
||
|
UZKArchive *archive = [[UZKArchive alloc] initWithURL:testArchiveURL error:nil];
|
||
|
|
||
|
NSError *performOnFilesError = nil;
|
||
|
__block NSInteger i = 0;
|
||
|
|
||
|
[archive performOnFilesInArchive:^(UZKFileInfo *fileInfo, BOOL *stop) {
|
||
|
NSString *expectedFilename = expectedFiles[i++];
|
||
|
|
||
|
NSError *extractError = nil;
|
||
|
NSData *extractedData = [archive extractDataFromFile:expectedFilename
|
||
|
error:&extractError];
|
||
|
|
||
|
XCTAssertNil(extractError, @"Error in extractData:error:");
|
||
|
|
||
|
NSData *expectedFileData = [NSData dataWithContentsOfURL:self.testFileURLs[expectedFilename]];
|
||
|
|
||
|
XCTAssertNotNil(extractedData, @"No data extracted");
|
||
|
XCTAssertTrue([expectedFileData isEqualToData:extractedData], @"Extracted data doesn't match original file");
|
||
|
|
||
|
extractError = nil;
|
||
|
NSData *dataFromFileInfo = [archive extractData:fileInfo
|
||
|
error:&extractError];
|
||
|
XCTAssertNil(extractError, @"Error extracting data by file info");
|
||
|
XCTAssertTrue([expectedFileData isEqualToData:dataFromFileInfo], @"Extracted data from file info doesn't match original file");
|
||
|
} error:&performOnFilesError];
|
||
|
|
||
|
XCTAssertNil(performOnFilesError, @"Error iterating through archive");
|
||
|
}
|
||
|
|
||
|
- (void)testModes_ReadWhileWriting
|
||
|
{
|
||
|
NSURL *testArchiveURL = self.testFileURLs[@"Test Archive.zip"];
|
||
|
UZKArchive *archive = [[UZKArchive alloc] initWithURL:testArchiveURL error:nil];
|
||
|
NSError *writeError = nil;
|
||
|
|
||
|
[archive writeIntoBuffer:@"newFile.zip"
|
||
|
error:&writeError
|
||
|
block:
|
||
|
^BOOL(BOOL(^writeData)(const void *bytes, unsigned int length), NSError**(actionError)) {
|
||
|
NSError *readError = nil;
|
||
|
[archive listFilenames:&readError];
|
||
|
XCTAssertNotNil(readError, @"Read operation during a read succeeded");
|
||
|
XCTAssertEqual(readError.code, UZKErrorCodeMixedModeAccess, @"Wrong error code returned");
|
||
|
|
||
|
return YES;
|
||
|
}];
|
||
|
|
||
|
XCTAssertNil(writeError, @"writeError was also non-nil");
|
||
|
}
|
||
|
|
||
|
- (void)testModes_NestedWrites
|
||
|
{
|
||
|
NSURL *testArchiveURL = self.testFileURLs[@"Test Archive.zip"];
|
||
|
UZKArchive *archive = [[UZKArchive alloc] initWithURL:testArchiveURL error:nil];
|
||
|
NSError *outerWriteError = nil;
|
||
|
|
||
|
[archive writeIntoBuffer:@"newFile.zip"
|
||
|
error:&outerWriteError
|
||
|
block:
|
||
|
^BOOL(BOOL(^writeData)(const void *bytes, unsigned int length), NSError**(actionError)) {
|
||
|
NSError *innerWriteError = nil;
|
||
|
[archive writeIntoBuffer:@"newFile.zip"
|
||
|
error:&innerWriteError
|
||
|
block:^BOOL(BOOL(^writeData)(const void *bytes, unsigned int length), NSError**(actionError)) {return YES;}];
|
||
|
XCTAssertNotNil(innerWriteError, @"Nested write operation succeeded");
|
||
|
XCTAssertEqual(innerWriteError.code, UZKErrorCodeFileWrite, @"Wrong error code returned");
|
||
|
|
||
|
return YES;
|
||
|
}];
|
||
|
|
||
|
XCTAssertNil(outerWriteError, @"outerWriteError was also non-nil");
|
||
|
}
|
||
|
|
||
|
|
||
|
@end
|