Improved interface of locateFileInZip and readDataWithBuffer in NSError variant
This commit is contained in:
committed by
Gianluca Bertani
parent
07288c8e00
commit
f1f4fee67f
@@ -140,12 +140,7 @@ class Objective_Zip_Swift_Tests: XCTestCase {
|
|||||||
NSLog("Test 1: reading from first file's stream...")
|
NSLog("Test 1: reading from first file's stream...")
|
||||||
|
|
||||||
let data1 = NSMutableData(length:256)!
|
let data1 = NSMutableData(length:256)!
|
||||||
|
let bytesRead1 = try read1.readDataWithBuffer(data1)
|
||||||
var error : NSError?
|
|
||||||
let bytesRead1 = read1.readDataWithBuffer(data1, error:&error)
|
|
||||||
if error != nil {
|
|
||||||
throw error!
|
|
||||||
}
|
|
||||||
|
|
||||||
XCTAssertEqual(3, bytesRead1)
|
XCTAssertEqual(3, bytesRead1)
|
||||||
|
|
||||||
@@ -167,11 +162,7 @@ class Objective_Zip_Swift_Tests: XCTestCase {
|
|||||||
NSLog("Test 1: reading from second file's stream...")
|
NSLog("Test 1: reading from second file's stream...")
|
||||||
|
|
||||||
let data2 = NSMutableData(length:256)!
|
let data2 = NSMutableData(length:256)!
|
||||||
|
let bytesRead2 = try read2.readDataWithBuffer(data2)
|
||||||
let bytesRead2 = read2.readDataWithBuffer(data2, error:&error)
|
|
||||||
if error != nil {
|
|
||||||
throw error!
|
|
||||||
}
|
|
||||||
|
|
||||||
XCTAssertEqual(3, bytesRead2)
|
XCTAssertEqual(3, bytesRead2)
|
||||||
|
|
||||||
@@ -201,11 +192,11 @@ class Objective_Zip_Swift_Tests: XCTestCase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Uncomment to execute this test, but be careful: takes 5 minutes and consumes 5 GB of disk space
|
||||||
|
*
|
||||||
func test02ZipAndUnzip5GB() {
|
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 documentsUrl = NSURL(fileURLWithPath:NSHomeDirectory(), isDirectory:true).URLByAppendingPathComponent("Documents")
|
||||||
let fileUrl = documentsUrl.URLByAppendingPathComponent("huge_test.zip")
|
let fileUrl = documentsUrl.URLByAppendingPathComponent("huge_test.zip")
|
||||||
let filePath = fileUrl.path!
|
let filePath = fileUrl.path!
|
||||||
@@ -286,13 +277,9 @@ class Objective_Zip_Swift_Tests: XCTestCase {
|
|||||||
NSLog("Test 2: reading from file's stream...")
|
NSLog("Test 2: reading from file's stream...")
|
||||||
|
|
||||||
for (var i = 0; i < HUGE_TEST_NUMBER_OF_BLOCKS; i++) {
|
for (var i = 0; i < HUGE_TEST_NUMBER_OF_BLOCKS; i++) {
|
||||||
var error : NSError?
|
let bytesRead = try read.readDataWithBuffer(buffer)
|
||||||
let bytesRead = read.readDataWithBuffer(buffer, error:&error)
|
|
||||||
if error != nil {
|
|
||||||
throw error!
|
|
||||||
}
|
|
||||||
|
|
||||||
XCTAssertEqual(UInt(data.length), bytesRead)
|
XCTAssertEqual(data.length, bytesRead)
|
||||||
|
|
||||||
let range = buffer.rangeOfData(checkData, options:NSDataSearchOptions(), range:NSMakeRange(0, buffer.length))
|
let range = buffer.rangeOfData(checkData, options:NSDataSearchOptions(), range:NSMakeRange(0, buffer.length))
|
||||||
|
|
||||||
@@ -319,6 +306,7 @@ class Objective_Zip_Swift_Tests: XCTestCase {
|
|||||||
XCTFail("Error caught: \(error.code) - \(error.userInfo[NSLocalizedFailureReasonErrorKey])")
|
XCTFail("Error caught: \(error.code) - \(error.userInfo[NSLocalizedFailureReasonErrorKey])")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
func test03UnzipMacZipFile() -> () {
|
func test03UnzipMacZipFile() -> () {
|
||||||
let documentsUrl = NSURL(fileURLWithPath:NSHomeDirectory(), isDirectory:true).URLByAppendingPathComponent("Documents")
|
let documentsUrl = NSURL(fileURLWithPath:NSHomeDirectory(), isDirectory:true).URLByAppendingPathComponent("Documents")
|
||||||
@@ -355,12 +343,7 @@ class Objective_Zip_Swift_Tests: XCTestCase {
|
|||||||
NSLog("Test 3: reading from file's stream...")
|
NSLog("Test 3: reading from file's stream...")
|
||||||
|
|
||||||
let buffer = NSMutableData(length:1024)!
|
let buffer = NSMutableData(length:1024)!
|
||||||
|
let bytesRead = try read.readDataWithBuffer(buffer)
|
||||||
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)
|
let fileText = NSString(bytes:buffer.bytes, length:Int(bytesRead), encoding:NSUTF8StringEncoding)
|
||||||
|
|
||||||
@@ -418,12 +401,7 @@ class Objective_Zip_Swift_Tests: XCTestCase {
|
|||||||
NSLog("Test 4: reading from file's stream...")
|
NSLog("Test 4: reading from file's stream...")
|
||||||
|
|
||||||
let buffer = NSMutableData(length:1024)!
|
let buffer = NSMutableData(length:1024)!
|
||||||
|
let bytesRead = try read.readDataWithBuffer(buffer)
|
||||||
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)
|
let fileText = NSString(bytes:buffer.bytes, length:Int(bytesRead), encoding:NSUTF8StringEncoding)
|
||||||
|
|
||||||
|
|||||||
@@ -208,11 +208,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Uncomment to execute this test, but be careful: takes 5 minutes and consumes 5 GB of disk space
|
||||||
|
*
|
||||||
- (void) test02ZipAndUnzip5GB {
|
- (void) test02ZipAndUnzip5GB {
|
||||||
|
|
||||||
// TODO Remove to enable this test, but be careful: takes 5 minutes and consumes 5 GB of disk space
|
|
||||||
return;
|
|
||||||
|
|
||||||
NSString *documentsDir= [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
|
NSString *documentsDir= [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
|
||||||
NSString *filePath= [documentsDir stringByAppendingPathComponent:@"huge_test.zip"];
|
NSString *filePath= [documentsDir stringByAppendingPathComponent:@"huge_test.zip"];
|
||||||
|
|
||||||
@@ -319,6 +319,7 @@
|
|||||||
[[NSFileManager defaultManager] removeItemAtPath:filePath error:NULL];
|
[[NSFileManager defaultManager] removeItemAtPath:filePath error:NULL];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
- (void) test03UnzipMacZipFile {
|
- (void) test03UnzipMacZipFile {
|
||||||
NSString *documentsDir= [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
|
NSString *documentsDir= [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
|
||||||
|
|||||||
@@ -34,6 +34,17 @@
|
|||||||
#import "OZZipFile.h"
|
#import "OZZipFile.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief Indicates the file could not be located in the zip file.
|
||||||
|
*/
|
||||||
|
static const NSInteger OZLocateFileResultNotFound= -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief Indicates the file has been successfully located in the zip file.
|
||||||
|
*/
|
||||||
|
static const NSInteger OZLocateFileResultFound= 1;
|
||||||
|
|
||||||
|
|
||||||
@interface OZZipFile (NSError)
|
@interface OZZipFile (NSError)
|
||||||
|
|
||||||
|
|
||||||
@@ -211,13 +222,16 @@
|
|||||||
<code>readCurrentFileInZip</code>.</p>
|
<code>readCurrentFileInZip</code>.</p>
|
||||||
@param error If passed, may be filled with an NSError is case the file can't
|
@param error If passed, may be filled with an NSError is case the file can't
|
||||||
be located.
|
be located.
|
||||||
@return <code>YES</code> if the file has been located and selected,
|
@return <code>OZLocateFileResultFound</code> if the file has been located
|
||||||
<code>NO</code> if the specified file name is not present in the zip file or
|
and selected, <code>OZLocateFileResultNotFound</code> if the specified
|
||||||
the file could not be located due to an error.
|
file name is not present in the zip file, or <code>0</code> if the file could
|
||||||
|
not be located due to an error.
|
||||||
|
<br/>NOTE: return value convention is different in the standard (non-NSError
|
||||||
|
compliant) interface.
|
||||||
@throws OZZipException If the zip file has been opened with a mode other than
|
@throws OZZipException If the zip file has been opened with a mode other than
|
||||||
Unzip.
|
Unzip.
|
||||||
*/
|
*/
|
||||||
- (BOOL) locateFileInZip:(nonnull NSString *)fileNameInZip error:(NSError * __autoreleasing __nullable * __nullable)error;
|
- (NSInteger) __attribute__((swift_error(zero_result))) locateFileInZip:(nonnull NSString *)fileNameInZip error:(NSError * __autoreleasing __nullable * __nullable)error;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@brief Returns the number of files contained in the zip file.
|
@brief Returns the number of files contained in the zip file.
|
||||||
@@ -228,7 +242,7 @@
|
|||||||
@throws OZZipException If the zip file has been opened with a mode other
|
@throws OZZipException If the zip file has been opened with a mode other
|
||||||
than Unzip.
|
than Unzip.
|
||||||
*/
|
*/
|
||||||
- (NSUInteger) numFilesInZipWithError:(NSError * __autoreleasing __nullable * __nullable)error;
|
- (NSUInteger) __attribute__((swift_error(zero_result))) numFilesInZipWithError:(NSError * __autoreleasing __nullable * __nullable)error;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@brief Returns a list of OZFileInZipInfo with the information on all the files
|
@brief Returns a list of OZFileInZipInfo with the information on all the files
|
||||||
|
|||||||
@@ -199,6 +199,8 @@
|
|||||||
<code>readCurrentFileInZip</code>.</p>
|
<code>readCurrentFileInZip</code>.</p>
|
||||||
@return <code>YES</code> if the file has been located and selected,
|
@return <code>YES</code> if the file has been located and selected,
|
||||||
<code>NO</code> if the specified file name is not present in the zip file.
|
<code>NO</code> if the specified file name is not present in the zip file.
|
||||||
|
<br/>NOTE: return value convention is different in NSError compliant
|
||||||
|
interface.
|
||||||
@throws OZZipException If the file can't be located due to an error or if the
|
@throws OZZipException If the file can't be located due to an error or if the
|
||||||
zip file has been opened with a mode other than Unzip.
|
zip file has been opened with a mode other than Unzip.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -444,12 +444,13 @@
|
|||||||
} ERROR_WRAP_END_AND_RETURN(error, NO);
|
} ERROR_WRAP_END_AND_RETURN(error, NO);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) locateFileInZip:(NSString *)fileNameInZip error:(NSError * __autoreleasing *)error {
|
- (NSInteger) locateFileInZip:(NSString *)fileNameInZip error:(NSError * __autoreleasing *)error {
|
||||||
ERROR_WRAP_BEGIN {
|
ERROR_WRAP_BEGIN {
|
||||||
|
|
||||||
return [self locateFileInZip:fileNameInZip];
|
BOOL located= [self locateFileInZip:fileNameInZip];
|
||||||
|
return (located ? OZLocateFileResultFound : OZLocateFileResultNotFound);
|
||||||
|
|
||||||
} ERROR_WRAP_END_AND_RETURN(error, NO);
|
} ERROR_WRAP_END_AND_RETURN(error, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSUInteger) numFilesInZipWithError:(NSError * __autoreleasing *)error {
|
- (NSUInteger) numFilesInZipWithError:(NSError * __autoreleasing *)error {
|
||||||
|
|||||||
@@ -34,6 +34,12 @@
|
|||||||
#import "OZZipReadStream.h"
|
#import "OZZipReadStream.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief Indicates the end of the file has been reached.
|
||||||
|
*/
|
||||||
|
static const NSInteger OZReadStreamResultEndOfFile= -1;
|
||||||
|
|
||||||
|
|
||||||
@interface OZZipReadStream (NSError)
|
@interface OZZipReadStream (NSError)
|
||||||
|
|
||||||
|
|
||||||
@@ -46,10 +52,13 @@
|
|||||||
@param buffer The buffer where read and uncompressed data must be stored.
|
@param buffer The buffer where read and uncompressed data must be stored.
|
||||||
@param error If passed, may be filled with an NSError is case data could
|
@param error If passed, may be filled with an NSError is case data could
|
||||||
not be read.
|
not be read.
|
||||||
@return The number of uncompressed bytes read, <code>0</code> if the end of
|
@return The number of uncompressed bytes read, <code>OZReadStreamResultEndOfFile</code>
|
||||||
the file has been reached or data could not be read due to an error.
|
if the end of the file has been reached, or <code>0</code>
|
||||||
|
if data could not be read due to an error.
|
||||||
|
<br/>NOTE: return value convention is different in the standard (non-NSError
|
||||||
|
compliant) interface.
|
||||||
*/
|
*/
|
||||||
- (NSUInteger) readDataWithBuffer:(nonnull NSMutableData *)buffer error:(NSError * __autoreleasing __nullable * __nullable)error;
|
- (NSInteger) __attribute__((swift_error(zero_result))) readDataWithBuffer:(nonnull NSMutableData *)buffer error:(NSError * __autoreleasing __nullable * __nullable)error;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@brief Closes the read steam.
|
@brief Closes the read steam.
|
||||||
|
|||||||
@@ -46,6 +46,8 @@
|
|||||||
@param buffer The buffer where read and uncompressed data must be stored.
|
@param buffer The buffer where read and uncompressed data must be stored.
|
||||||
@return The number of uncompressed bytes read, <code>0</code> if the end of
|
@return The number of uncompressed bytes read, <code>0</code> if the end of
|
||||||
the file has been reached.
|
the file has been reached.
|
||||||
|
<br/>NOTE: return value convention is different in NSError compliant
|
||||||
|
interface.
|
||||||
@throws OZZipException If the data could not be read due to an error.
|
@throws OZZipException If the data could not be read due to an error.
|
||||||
*/
|
*/
|
||||||
- (NSUInteger) readDataWithBuffer:(nonnull NSMutableData *)buffer;
|
- (NSUInteger) readDataWithBuffer:(nonnull NSMutableData *)buffer;
|
||||||
|
|||||||
@@ -93,10 +93,11 @@
|
|||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark Reading data (NSError variants)
|
#pragma mark Reading data (NSError variants)
|
||||||
|
|
||||||
- (NSUInteger) readDataWithBuffer:(NSMutableData *)buffer error:(NSError * __autoreleasing *)error {
|
- (NSInteger) readDataWithBuffer:(NSMutableData *)buffer error:(NSError * __autoreleasing *)error {
|
||||||
ERROR_WRAP_BEGIN {
|
ERROR_WRAP_BEGIN {
|
||||||
|
|
||||||
return [self readDataWithBuffer:buffer];
|
NSUInteger bytesRead= [self readDataWithBuffer:buffer];
|
||||||
|
return (bytesRead == 0) ? OZReadStreamResultEndOfFile : bytesRead;
|
||||||
|
|
||||||
} ERROR_WRAP_END_AND_RETURN(error, 0);
|
} ERROR_WRAP_END_AND_RETURN(error, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,8 @@
|
|||||||
@param data The data to be compressed and written.
|
@param data The data to be compressed and written.
|
||||||
@param error If passed, may be filled with an NSError is case data could
|
@param error If passed, may be filled with an NSError is case data could
|
||||||
not be written.
|
not be written.
|
||||||
|
@return <code>YES</code> if data has been written, <code>NO</code> if
|
||||||
|
data could not be written due to an error.
|
||||||
*/
|
*/
|
||||||
- (BOOL) writeData:(nonnull NSData *)data error:(NSError * __autoreleasing __nullable * __nullable)error;
|
- (BOOL) writeData:(nonnull NSData *)data error:(NSError * __autoreleasing __nullable * __nullable)error;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user