Added Swift unit tests; bug fixes for Swift compatibility; verified settings for Xcode 7

This commit is contained in:
Gianluca Bertani
2015-09-20 18:55:05 +02:00
committed by Gianluca Bertani
parent 74cbccda01
commit f3ccab7a68
10 changed files with 812 additions and 229 deletions
+1 -1
View File
@@ -7,7 +7,7 @@
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>com.flyingdolphinstudio.$(PRODUCT_NAME:rfc1034identifier)</string>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
@@ -0,0 +1,5 @@
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
#import "Objective-Zip+NSError.h"
@@ -0,0 +1,5 @@
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
#import "Objective-Zip+NSError.h"
@@ -0,0 +1,476 @@
//
// Objective-Zip_Swift_Tests.swift
// Objective-Zip
//
// Created by Gianluca Bertani on 20/09/15.
// Copyright 2009-2015 Gianluca Bertani. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither the name of Gianluca Bertani nor the names of its contributors
// may be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR PROFITS OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
import XCTest
let HUGE_TEST_BLOCK_LENGTH = 50000
let HUGE_TEST_NUMBER_OF_BLOCKS = 100000
let MAC_TEST_ZIP = "UEsDBBQACAAIAPWF10IAAAAAAAAAAAAAAAANABAAdGVzdF9maWxlLnR4dFVYDACQCsdRjQrHUfYB9gHzT8pKTS7JLEvVjcosUPBNTFYoSS0uUUjLzEnlAgBQSwcIlXE92h4AAAAcAAAAUEsDBAoAAAAAAACG10IAAAAAAAAAAAAAAAAJABAAX19NQUNPU1gvVVgMAKAKx1GgCsdR9gH2AVBLAwQUAAgACAD1hddCAAAAAAAAAAAAAAAAGAAQAF9fTUFDT1NYLy5fdGVzdF9maWxlLnR4dFVYDACQCsdRjQrHUfYB9gFjYBVjZ2BiYPBNTFbwD1aIUIACkBgDJxAbAXElEIP4qxmIAo4hIUFQJkjHHCDmR1PCiBAXT87P1UssKMhJ1QtJrShxzUvOT8nMSwdKlpak6VpYGxqbGBmaW1qYAABQSwcIcBqNwF0AAACrAAAAUEsBAhUDFAAIAAgA9YXXQpVxPdoeAAAAHAAAAA0ADAAAAAAAAAAAQKSBAAAAAHRlc3RfZmlsZS50eHRVWAgAkArHUY0Kx1FQSwECFQMKAAAAAAAAhtdCAAAAAAAAAAAAAAAACQAMAAAAAAAAAABA/UFpAAAAX19NQUNPU1gvVVgIAKAKx1GgCsdRUEsBAhUDFAAIAAgA9YXXQnAajcBdAAAAqwAAABgADAAAAAAAAAAAQKSBoAAAAF9fTUFDT1NYLy5fdGVzdF9maWxlLnR4dFVYCACQCsdRjQrHUVBLBQYAAAAAAwADANwAAABTAQAAAAA="
let WIN_TEST_ZIP = "UEsDBBQAAAAAAMmF10L4VbPKIQAAACEAAAANAAAAdGVzdF9maWxlLnR4dE9iamVjdGl2ZS1aaXAgV2luZG93cyB0ZXN0IGZpbGUNClBLAQIUABQAAAAAAMmF10L4VbPKIQAAACEAAAANAAAAAAAAAAEAIAAAAAAAAAB0ZXN0X2ZpbGUudHh0UEsFBgAAAAABAAEAOwAAAEwAAAAAAA=="
class Objective_Zip_Swift_Tests: XCTestCase {
override func setUp() {
super.setUp()
}
override func tearDown() {
super.tearDown()
}
func test01ZipAndUnzip() {
let documentsUrl = NSURL(fileURLWithPath:NSHomeDirectory(), isDirectory:true).URLByAppendingPathComponent("Documents")
let fileUrl = documentsUrl.URLByAppendingPathComponent("test.zip")
let filePath = fileUrl.path!
do {
try NSFileManager.defaultManager().removeItemAtPath(filePath)
} catch {}
defer {
do {
try NSFileManager.defaultManager().removeItemAtPath(filePath)
} catch {}
}
do {
NSLog("Test 1: opening zip file for writing...")
let zipFile = try OZZipFile(fileName:filePath, mode:OZZipFileMode.Create)
XCTAssertNotNil(zipFile)
NSLog("Test 1: adding first file...")
let stream1 = try zipFile.writeFileInZipWithName("abc.txt", fileDate:NSDate(timeIntervalSinceNow:-86400.0), compressionLevel:OZZipCompressionLevel.Best)
XCTAssertNotNil(stream1)
NSLog("Test 1: writing to first file's stream...")
let text = "abc"
try stream1.writeData(text.dataUsingEncoding(NSUTF8StringEncoding)!)
NSLog("Test 1: closing first file's stream...")
try stream1.finishedWriting()
NSLog("Test 1: adding second file...")
let file2name = "x/y/z/xyz.txt"
let stream2 = try zipFile.writeFileInZipWithName(file2name, compressionLevel:OZZipCompressionLevel.None)
XCTAssertNotNil(stream2)
NSLog("Test 1: writing to second file's stream...")
let text2 = "XYZ"
try stream2.writeData(text2.dataUsingEncoding(NSUTF8StringEncoding)!)
NSLog("Test 1: closing second file's stream...")
try stream2.finishedWriting()
NSLog("Test 1: closing zip file...")
try zipFile.close()
NSLog("Test 1: opening zip file for reading...")
let unzipFile = try OZZipFile(fileName:filePath, mode:OZZipFileMode.Unzip)
XCTAssertNotNil(unzipFile)
NSLog("Test 1: reading file infos...")
let infos = try unzipFile.listFileInZipInfos()
XCTAssertEqual(2, infos.count)
let info1 = infos[0] as! OZFileInZipInfo
XCTAssertEqualWithAccuracy(NSDate().timeIntervalSinceReferenceDate, info1.date.timeIntervalSinceReferenceDate + 86400, accuracy:5.0)
NSLog("Test 1: - \(info1.name) \(info1.date) \(info1.size) (\(info1.level))")
let info2 = infos[1] as! OZFileInZipInfo
XCTAssertEqualWithAccuracy(NSDate().timeIntervalSinceReferenceDate, info2.date.timeIntervalSinceReferenceDate, accuracy:5.0)
NSLog("Test 1: - \(info2.name) \(info2.date) \(info2.size) (\(info2.level))")
NSLog("Test 1: opening first file...")
try unzipFile.goToFirstFileInZip()
let read1 = try unzipFile.readCurrentFileInZip()
XCTAssertNotNil(read1)
NSLog("Test 1: reading from first file's stream...")
let data1 = NSMutableData(length:256)!
var error : NSError?
let bytesRead1 = read1.readDataWithBuffer(data1, error:&error)
if error != nil {
throw error!
}
XCTAssertEqual(3, bytesRead1)
let fileText1 = NSString(bytes:data1.bytes, length:Int(bytesRead1), encoding:NSUTF8StringEncoding)
XCTAssertEqual("abc", fileText1)
NSLog("Test 1: closing first file's stream...")
try read1.finishedReading()
NSLog("Test 1: opening second file...")
try unzipFile.locateFileInZip(file2name)
let read2 = try unzipFile.readCurrentFileInZip()
XCTAssertNotNil(read2)
NSLog("Test 1: reading from second file's stream...")
let data2 = NSMutableData(length:256)!
let bytesRead2 = read2.readDataWithBuffer(data2, error:&error)
if error != nil {
throw error!
}
XCTAssertEqual(3, bytesRead2)
let fileText2 = NSString(bytes:data2.bytes, length:Int(bytesRead2), encoding:NSUTF8StringEncoding)
XCTAssertEqual("XYZ", fileText2)
NSLog("Test 1: closing second file's stream...")
try read2.finishedReading()
NSLog("Test 1: closing zip file...")
try unzipFile.close()
NSLog("Test 1: test terminated succesfully")
} catch let error as NSError {
NSLog("Test 1: error caught: \(error.code) - \(error.userInfo[NSLocalizedFailureReasonErrorKey])")
XCTFail("Error caught: \(error.code) - \(error.userInfo[NSLocalizedFailureReasonErrorKey])")
} catch let error {
NSLog("Test 1: generic error caught: \(error)")
XCTFail("Generic error caught: \(error)")
}
}
func test02ZipAndUnzip5GB() {
// TODO Remove to enable this test, but be careful: takes 5 minutes and consumes 5 GB of disk space
return
let documentsUrl = NSURL(fileURLWithPath:NSHomeDirectory(), isDirectory:true).URLByAppendingPathComponent("Documents")
let fileUrl = documentsUrl.URLByAppendingPathComponent("huge_test.zip")
let filePath = fileUrl.path!
do {
try NSFileManager.defaultManager().removeItemAtPath(filePath)
} catch {}
defer {
do {
try NSFileManager.defaultManager().removeItemAtPath(filePath)
} catch {}
}
do {
NSLog("Test 2: opening zip file for writing...")
let zipFile = try OZZipFile(fileName:filePath, mode:OZZipFileMode.Create)
XCTAssertNotNil(zipFile)
NSLog("Test 2: adding file...")
let stream = try zipFile.writeFileInZipWithName("huge_file.txt", compressionLevel:OZZipCompressionLevel.Best)
XCTAssertNotNil(stream)
NSLog("Test 2: writing to file's stream...")
let data = NSMutableData(length:HUGE_TEST_BLOCK_LENGTH)!
SecRandomCopyBytes(kSecRandomDefault, data.length, UnsafeMutablePointer<UInt8>(data.mutableBytes))
let checkData = data.subdataWithRange(NSMakeRange(0, 100))
let buffer = NSMutableData(length:HUGE_TEST_BLOCK_LENGTH)! // For use later
for (var i = 0; i < HUGE_TEST_NUMBER_OF_BLOCKS; i++) {
try stream.writeData(data)
if (i % 100 == 0) {
NSLog("Test 2: written \((data.length / 1024) * (i + 1)) KB...")
}
}
NSLog("Test 2: closing file's stream...")
try stream.finishedWriting()
NSLog("Test 2: closing zip file...")
try zipFile.close()
NSLog("Test 2: opening zip file for reading...")
let unzipFile = try OZZipFile(fileName:filePath, mode:OZZipFileMode.Unzip)
XCTAssertNotNil(unzipFile)
NSLog("Test 1: reading file infos...")
let infos = try unzipFile.listFileInZipInfos()
XCTAssertEqual(1, infos.count)
let info1 = infos[0] as! OZFileInZipInfo
XCTAssertEqual(info1.length, UInt64(HUGE_TEST_NUMBER_OF_BLOCKS) * UInt64(HUGE_TEST_BLOCK_LENGTH))
NSLog("Test 1: - \(info1.name) \(info1.date) \(info1.size) (\(info1.level))")
NSLog("Test 2: opening file...")
try unzipFile.goToFirstFileInZip()
let read = try unzipFile.readCurrentFileInZip()
XCTAssertNotNil(read)
NSLog("Test 2: reading from file's stream...")
for (var i = 0; i < HUGE_TEST_NUMBER_OF_BLOCKS; i++) {
var error : NSError?
let bytesRead = read.readDataWithBuffer(buffer, error:&error)
if error != nil {
throw error!
}
XCTAssertEqual(UInt(data.length), bytesRead)
let range = buffer.rangeOfData(checkData, options:NSDataSearchOptions(), range:NSMakeRange(0, buffer.length))
XCTAssertEqual(0, range.location)
if (i % 100 == 0) {
NSLog("Test 2: read \((buffer.length / 1024) * (i + 1))) KB...")
}
}
NSLog("Test 2: closing file's stream...")
try read.finishedReading()
NSLog("Test 2: closing zip file...")
try unzipFile.close()
NSLog("Test 2: test terminated succesfully")
} catch let error as NSError {
NSLog("Test 2: error caught: \(error.code) - \(error.userInfo[NSLocalizedFailureReasonErrorKey])")
XCTFail("Error caught: \(error.code) - \(error.userInfo[NSLocalizedFailureReasonErrorKey])")
}
}
func test03UnzipMacZipFile() -> () {
let documentsUrl = NSURL(fileURLWithPath:NSHomeDirectory(), isDirectory:true).URLByAppendingPathComponent("Documents")
let fileUrl = documentsUrl.URLByAppendingPathComponent("mac_test_file.zip")
let filePath = fileUrl.path!
do {
try NSFileManager.defaultManager().removeItemAtPath(filePath)
} catch {}
let macZipData = NSData(base64EncodedString:MAC_TEST_ZIP, options:NSDataBase64DecodingOptions())!
macZipData.writeToFile(filePath, atomically:false)
defer {
do {
try NSFileManager.defaultManager().removeItemAtPath(filePath)
} catch {}
}
do {
NSLog("Test 3: opening zip file for reading...")
let unzipFile = try OZZipFile(fileName:filePath, mode:OZZipFileMode.Unzip)
XCTAssertNotNil(unzipFile)
NSLog("Test 3: opening file...")
try unzipFile.goToFirstFileInZip()
let read = try unzipFile.readCurrentFileInZip()
XCTAssertNotNil(read)
NSLog("Test 3: reading from file's stream...")
let buffer = NSMutableData(length:1024)!
var error : NSError?
let bytesRead = read.readDataWithBuffer(buffer, error:&error)
if error != nil {
throw error!
}
let fileText = NSString(bytes:buffer.bytes, length:Int(bytesRead), encoding:NSUTF8StringEncoding)
XCTAssertEqual("Objective-Zip Mac test file\n", fileText)
NSLog("Test 3: closing file's stream...")
try read.finishedReading()
NSLog("Test 3: closing zip file...")
try unzipFile.close()
NSLog("Test 3: test terminated succesfully")
} catch let error as NSError {
NSLog("Test 3: error caught: \(error.code) - \(error.userInfo[NSLocalizedFailureReasonErrorKey])")
XCTFail("Error caught: \(error.code) - \(error.userInfo[NSLocalizedFailureReasonErrorKey])")
}
}
func test04UnzipWinZipFile() {
let documentsUrl = NSURL(fileURLWithPath:NSHomeDirectory(), isDirectory:true).URLByAppendingPathComponent("Documents")
let fileUrl = documentsUrl.URLByAppendingPathComponent("win_test_file.zip")
let filePath = fileUrl.path!
do {
try NSFileManager.defaultManager().removeItemAtPath(filePath)
} catch {}
let winZipData = NSData(base64EncodedString:WIN_TEST_ZIP, options:NSDataBase64DecodingOptions())!
winZipData.writeToFile(filePath, atomically:false)
defer {
do {
try NSFileManager.defaultManager().removeItemAtPath(filePath)
} catch {}
}
do {
NSLog("Test 4: opening zip file for reading...")
let unzipFile = try OZZipFile(fileName:filePath, mode:OZZipFileMode.Unzip)
XCTAssertNotNil(unzipFile)
NSLog("Test 4: opening file...")
try unzipFile.goToFirstFileInZip()
let read = try unzipFile.readCurrentFileInZip()
XCTAssertNotNil(read)
NSLog("Test 4: reading from file's stream...")
let buffer = NSMutableData(length:1024)!
var error : NSError?
let bytesRead = read.readDataWithBuffer(buffer, error:&error)
if error != nil {
throw error!
}
let fileText = NSString(bytes:buffer.bytes, length:Int(bytesRead), encoding:NSUTF8StringEncoding)
XCTAssertEqual("Objective-Zip Windows test file\r\n", fileText)
NSLog("Test 4: closing file's stream...")
try read.finishedReading()
NSLog("Test 4: closing zip file...")
try unzipFile.close()
NSLog("Test 4: test terminated succesfully")
} catch let error as NSError {
NSLog("Test 4: error caught: \(error.code) - \(error.userInfo[NSLocalizedFailureReasonErrorKey])")
XCTFail("Error caught: \(error.code) - \(error.userInfo[NSLocalizedFailureReasonErrorKey])")
}
}
func test05ErrorWrapping() {
let fileUrl = NSURL(fileURLWithPath:"/root.zip", isDirectory:false)
let filePath = fileUrl.path!
defer {
do {
try NSFileManager.defaultManager().removeItemAtPath(filePath)
} catch {}
}
do {
NSLog("Test 5: opening impossible zip file for writing...")
let zipFile = try OZZipFile(fileName:filePath, mode:OZZipFileMode.Create)
try zipFile.close()
NSLog("Test 5: test failed, no error reported")
XCTFail("No error reported")
} catch let error as NSError {
XCTAssertEqual(OZ_ERROR_NO_SUCH_FILE, error.code)
NSLog("Test 5: test terminated succesfully")
}
}
}
+3 -3
View File
@@ -177,7 +177,7 @@
NSMutableData *data2= [[NSMutableData alloc] initWithLength:256];
NSUInteger bytesRead2= [read2 readDataWithBuffer:data2];
XCTAssertEqual(3, bytesRead1);
XCTAssertEqual(3, bytesRead2);
NSString *fileText2= [[NSString alloc] initWithBytes:[data2 bytes] length:bytesRead2 encoding:NSUTF8StringEncoding];
@@ -448,7 +448,7 @@
} @catch (OZZipException *ze) {
XCTAssertEqual(ERROR_NO_SUCH_FILE, ze.error);
XCTAssertEqual(OZ_ERROR_NO_SUCH_FILE, ze.error);
} @catch (NSException *e) {
NSLog(@"Test 5: generic exception caught: %@ - %@", [[e class] description], [e description]);
@@ -469,7 +469,7 @@
XCTAssertNil(zipFile);
XCTAssertNotNil(error);
XCTAssertEqual(ERROR_NO_SUCH_FILE, error.code);
XCTAssertEqual(OZ_ERROR_NO_SUCH_FILE, error.code);
NSLog(@"Test 5: test terminated succesfully");