QuietUnrar/Carthage/Checkouts/UnzipKit/Tests/ListFileInfoTests.m

183 lines
7.8 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// ListFileInfoTests.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 ListFileInfoTests : UZKArchiveTestCase
@end
@implementation ListFileInfoTests
- (void)testListFileInfo {
UZKArchive *archive = [[UZKArchive alloc] initWithURL:self.testFileURLs[@"Test Archive.zip"] error:nil];
NSSet *expectedFileSet = self.nonZipTestFilePaths;
NSArray *expectedFiles = [expectedFileSet.allObjects sortedArrayUsingSelector:@selector(compare:)];
NSDate *expectedDate = [[UZKArchiveTestCase dateFormatter] dateFromString:@"3/22/2014 11:17 PM"];
NSDictionary *expectedCompressionMethods = @{@"Test File A.txt": @(UZKCompressionMethodNone),
@"Test File B.jpg": @(UZKCompressionMethodDefault),
@"Test File C.m4a": @(UZKCompressionMethodDefault),};
NSError *error = nil;
NSArray *filesInArchive = [archive listFileInfo:&error];
XCTAssertNil(error, @"Error returned by listFileInfo");
XCTAssertNotNil(filesInArchive, @"No list of files returned");
XCTAssertEqual(filesInArchive.count, expectedFileSet.count, @"Incorrect number of files listed in archive");
NSFileManager *fm = [NSFileManager defaultManager];
for (NSUInteger i = 0; i < filesInArchive.count; i++) {
UZKFileInfo *fileInfo = filesInArchive[i];
// Test Filename
NSString *expectedFilename = expectedFiles[i];
XCTAssertEqualObjects(fileInfo.filename, expectedFilename, @"Incorrect filename");
// Test CRC
NSUInteger expectedFileCRC = [self crcOfTestFile:expectedFilename];
XCTAssertEqual(fileInfo.CRC, expectedFileCRC, @"Incorrect CRC checksum");
// Test Last Modify Date
NSTimeInterval archiveFileTimeInterval = [fileInfo.timestamp timeIntervalSinceReferenceDate];
NSTimeInterval expectedFileTimeInterval = [expectedDate timeIntervalSinceReferenceDate];
XCTAssertEqualWithAccuracy(archiveFileTimeInterval, expectedFileTimeInterval, 60, @"Incorrect file timestamp (more than 60 seconds off)");
// Test Uncompressed Size
NSError *attributesError = nil;
NSString *expectedFilePath = [[self urlOfTestFile:expectedFilename] path];
NSDictionary *expectedFileAttributes = [fm attributesOfItemAtPath:expectedFilePath
error:&attributesError];
XCTAssertNil(attributesError, @"Error getting file attributes of %@", expectedFilename);
unsigned long long expectedFileSize = expectedFileAttributes.fileSize;
XCTAssertEqual(fileInfo.uncompressedSize, expectedFileSize, @"Incorrect uncompressed file size");
// Test Compression method
UZKCompressionMethod expectedCompressionMethod = ((NSNumber *)expectedCompressionMethods[fileInfo.filename]).integerValue;
XCTAssertEqual(fileInfo.compressionMethod, expectedCompressionMethod, @"Incorrect compression method");
}
}
- (void)testListFileInfo_Unicode
{
NSSet *expectedFileSet = self.nonZipUnicodeFilePaths;
NSArray *expectedFiles = [expectedFileSet.allObjects sortedArrayUsingSelector:@selector(compare:)];
NSURL *testArchiveURL = self.unicodeFileURLs[@"Ⓣest Ⓐrchive.zip"];
UZKArchive *archive = [[UZKArchive alloc] initWithURL:testArchiveURL error:nil];
NSError *error = nil;
NSArray *filesInArchive = [archive listFileInfo:&error];
XCTAssertNil(error, @"Error returned by listFileInfo");
XCTAssertNotNil(filesInArchive, @"No list of files returned");
XCTAssertEqual(filesInArchive.count, expectedFileSet.count,
@"Incorrect number of files listed in archive");
for (NSUInteger i = 0; i < filesInArchive.count; i++) {
UZKFileInfo *fileInfo = filesInArchive[i];
XCTAssertEqualObjects(fileInfo.filename, expectedFiles[i], @"Incorrect filename listed");
}
}
- (void)testListFileInfo_WinZip
{
NSURL *testArchiveURL = self.testFileURLs[@"L'incertain.zip"];
UZKArchive *archive = [[UZKArchive alloc] initWithURL:testArchiveURL error:nil];
NSArray *expectedFiles = @[@"Acribora - T01 - L'incertain/Test File A.txt",
@"Acribora - T01 - L'incertain/Test File B.jpg",
@"Acribora - T01 - L'incertain/Test File C.m4a",
@"Acribora - T01 - L'incertain"];
NSArray *isDirectoryValues = @[@NO,
@NO,
@NO,
@YES];
NSError *error = nil;
NSArray *filesInArchive = [archive listFileInfo:&error];
XCTAssertNil(error, @"Error returned by listFilenames");
XCTAssertNotNil(filesInArchive, @"No list of files returned");
XCTAssertEqual(filesInArchive.count, expectedFiles.count, @"Incorrect number of files listed in archive");
for (NSUInteger i = 0; i < filesInArchive.count; i++) {
UZKFileInfo *fileInfo = (UZKFileInfo *)filesInArchive[i];
XCTAssertEqualObjects(fileInfo.filename, expectedFiles[i], @"Incorrect filename listed");
BOOL expectedIsDirectory = ((NSNumber *)isDirectoryValues[i]).boolValue;
XCTAssertEqual(fileInfo.isDirectory, expectedIsDirectory, @"Incorrect isDirectory value listed");
}
}
- (void)testListFileInfo_Password
{
NSURL *testArchiveURL = self.testFileURLs[@"Test Archive (Password).zip"];
UZKArchive *archive = [[UZKArchive alloc] initWithURL:testArchiveURL password:@"password" error:nil];
NSSet *expectedFileSet = self.nonZipTestFilePaths;
NSArray *expectedFiles = [expectedFileSet.allObjects sortedArrayUsingSelector:@selector(compare:)];
NSArray *filesInArchive = nil;
NSError *error = nil;
filesInArchive = [archive listFileInfo:&error];
XCTAssertNil(error, @"Error returned by listFilenames");
XCTAssertEqual(filesInArchive.count, expectedFileSet.count,
@"Incorrect number of files listed in archive");
for (NSUInteger i = 0; i < filesInArchive.count; i++) {
UZKFileInfo *fileInfo = filesInArchive[i];
NSString *expectedFilename = expectedFiles[i];
XCTAssertEqualObjects(fileInfo.filename, expectedFilename, @"Incorrect filename listed");
}
}
- (void)testListFileInfo_NoPasswordGiven {
NSURL *testArchiveURL = self.testFileURLs[@"Test Archive (Password).zip"];
UZKArchive *archive = [[UZKArchive alloc] initWithURL:testArchiveURL error:nil];
NSSet *expectedFileSet = self.nonZipTestFilePaths;
NSArray *expectedFiles = [expectedFileSet.allObjects sortedArrayUsingSelector:@selector(compare:)];
NSArray *filesInArchive = nil;
NSError *error = nil;
filesInArchive = [archive listFileInfo:&error];
XCTAssertNil(error, @"Error returned by listFilenames");
XCTAssertEqual(filesInArchive.count, expectedFileSet.count,
@"Incorrect number of files listed in archive");
for (NSUInteger i = 0; i < filesInArchive.count; i++) {
UZKFileInfo *fileInfo = filesInArchive[i];
NSString *expectedFilename = expectedFiles[i];
XCTAssertEqualObjects(fileInfo.filename, expectedFilename, @"Incorrect filename listed");
}
}
- (void)testListFileInfo_InvalidArchive
{
UZKArchive *archive = [[UZKArchive alloc] initWithURL:self.testFileURLs[@"Test File A.txt"] error:nil];
NSError *error = nil;
NSArray *files = [archive listFileInfo:&error];
XCTAssertNotNil(error, @"List files of invalid archive succeeded");
XCTAssertNil(files, @"List returned for invalid archive");
XCTAssertEqual(error.code, UZKErrorCodeBadZipFile, @"Unexpected error code returned");
}
@end