diff options
author | thomasvl <thomasvl@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2008-04-14 17:21:02 +0000 |
---|---|---|
committer | thomasvl <thomasvl@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2008-04-14 17:21:02 +0000 |
commit | cdf070c8d76ffc4eaa24e8671756cbbe9ceb2890 (patch) | |
tree | faa9ae3a72a6591d6a6add7ceed7f91e92ade11f /Foundation/GTMNSData+zlibTest.m | |
parent | 0aaecac6ff2bc89e58a0c8c6d6ad62e02fb2b011 (diff) |
See the ReleaseNotes for the full details, highlights:
- bug fixes
- code coverage support
- more complete unittests
- full support for unittesting UIs
- support for the iphone sdk (include ui unittesting)
Diffstat (limited to 'Foundation/GTMNSData+zlibTest.m')
-rw-r--r-- | Foundation/GTMNSData+zlibTest.m | 118 |
1 files changed, 112 insertions, 6 deletions
diff --git a/Foundation/GTMNSData+zlibTest.m b/Foundation/GTMNSData+zlibTest.m index 0d863d5..38dbce3 100644 --- a/Foundation/GTMNSData+zlibTest.m +++ b/Foundation/GTMNSData+zlibTest.m @@ -16,7 +16,6 @@ // the License. // -#import <SenTestingKit/SenTestingKit.h> #import "GTMSenTestCase.h" #import "GTMNSData+zlib.h" @@ -36,11 +35,9 @@ static void FillWithRandom(char *data, unsigned long len) { static BOOL HasGzipHeader(NSData *data) { // very simple check - if ([data length] > 2) { - const unsigned char *bytes = [data bytes]; - return (bytes[0] == 0x1f) && (bytes[1] == 0x8b); - } - return NO; + const unsigned char *bytes = [data bytes]; + return ([data length] > 2) && + ((bytes[0] == 0x1f) && (bytes[1] == 0x8b)); } @@ -51,6 +48,115 @@ static BOOL HasGzipHeader(NSData *data) { srandomdev(); } +- (void)testBoundryValues { + NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init]; + STAssertNotNil(localPool, @"failed to alloc local pool"); + + // build some test data + NSMutableData *data = [NSMutableData data]; + STAssertNotNil(data, @"failed to alloc data block"); + [data setLength:512]; + FillWithRandom([data mutableBytes], [data length]); + + // bogus args to start + STAssertNil([NSData gtm_dataByDeflatingData:nil], nil); + STAssertNil([NSData gtm_dataByDeflatingBytes:nil length:666], nil); + STAssertNil([NSData gtm_dataByDeflatingBytes:[data bytes] length:0], nil); + STAssertNil([NSData gtm_dataByGzippingData:nil], nil); + STAssertNil([NSData gtm_dataByGzippingBytes:nil length:666], nil); + STAssertNil([NSData gtm_dataByGzippingBytes:[data bytes] length:0], nil); + STAssertNil([NSData gtm_dataByInflatingData:nil], nil); + STAssertNil([NSData gtm_dataByInflatingBytes:nil length:666], nil); + STAssertNil([NSData gtm_dataByInflatingBytes:[data bytes] length:0], nil); + + // test deflate w/ compression levels out of range + NSData *deflated = [NSData gtm_dataByDeflatingData:data + compressionLevel:-4]; + STAssertNotNil(deflated, nil); + STAssertFalse(HasGzipHeader(deflated), nil); + NSData *dataPrime = [NSData gtm_dataByInflatingData:deflated]; + STAssertNotNil(dataPrime, nil); + STAssertEqualObjects(data, dataPrime, nil); + deflated = [NSData gtm_dataByDeflatingData:data + compressionLevel:20]; + STAssertNotNil(deflated, nil); + STAssertFalse(HasGzipHeader(deflated), nil); + dataPrime = [NSData gtm_dataByInflatingData:deflated]; + STAssertNotNil(dataPrime, nil); + STAssertEqualObjects(data, dataPrime, nil); + + // test gzip w/ compression levels out of range + NSData *gzipped = [NSData gtm_dataByGzippingData:data + compressionLevel:-4]; + STAssertNotNil(gzipped, nil); + STAssertTrue(HasGzipHeader(gzipped), nil); + dataPrime = [NSData gtm_dataByInflatingData:gzipped]; + STAssertNotNil(dataPrime, nil); + STAssertEqualObjects(data, dataPrime, nil); + gzipped = [NSData gtm_dataByGzippingData:data + compressionLevel:20]; + STAssertNotNil(gzipped, nil); + STAssertTrue(HasGzipHeader(gzipped), nil); + dataPrime = [NSData gtm_dataByInflatingData:gzipped]; + STAssertNotNil(dataPrime, nil); + STAssertEqualObjects(data, dataPrime, nil); + + // test non-compressed data data itself + STAssertNil([NSData gtm_dataByInflatingData:data], nil); + + // test deflated data runs that end before they are done + for (int x = 1 ; x < [deflated length] ; ++x) { + STAssertNil([NSData gtm_dataByInflatingBytes:[deflated bytes] length:x], nil); + } + + // test gzipped data runs that end before they are done + for (int x = 1 ; x < [gzipped length] ; ++x) { + STAssertNil([NSData gtm_dataByInflatingBytes:[gzipped bytes] length:x], nil); + } + + // test extra data before the deflated/gzipped data (just to make sure we + // don't seek to the "real" data) + NSMutableData *prefixedDeflated = [NSMutableData data]; + STAssertNotNil(prefixedDeflated, @"failed to alloc data block"); + [prefixedDeflated setLength:20]; + FillWithRandom([prefixedDeflated mutableBytes], [prefixedDeflated length]); + [prefixedDeflated appendData:deflated]; + STAssertNil([NSData gtm_dataByInflatingData:prefixedDeflated], nil); + STAssertNil([NSData gtm_dataByInflatingBytes:[prefixedDeflated bytes] + length:[prefixedDeflated length]], + nil); + NSMutableData *prefixedGzipped = [NSMutableData data]; + STAssertNotNil(prefixedDeflated, @"failed to alloc data block"); + [prefixedGzipped setLength:20]; + FillWithRandom([prefixedGzipped mutableBytes], [prefixedGzipped length]); + [prefixedGzipped appendData:gzipped]; + STAssertNil([NSData gtm_dataByInflatingData:prefixedGzipped], nil); + STAssertNil([NSData gtm_dataByInflatingBytes:[prefixedGzipped bytes] + length:[prefixedGzipped length]], + nil); + + // test extra data after the deflated/gzipped data (just to make sure we + // don't ignore some of the data) + NSMutableData *suffixedDeflated = [NSMutableData data]; + STAssertNotNil(suffixedDeflated, @"failed to alloc data block"); + [suffixedDeflated appendData:deflated]; + [suffixedDeflated appendBytes:[data bytes] length:20]; + STAssertNil([NSData gtm_dataByInflatingData:suffixedDeflated], nil); + STAssertNil([NSData gtm_dataByInflatingBytes:[suffixedDeflated bytes] + length:[suffixedDeflated length]], + nil); + NSMutableData *suffixedGZipped = [NSMutableData data]; + STAssertNotNil(suffixedGZipped, @"failed to alloc data block"); + [suffixedGZipped appendData:gzipped]; + [suffixedGZipped appendBytes:[data bytes] length:20]; + STAssertNil([NSData gtm_dataByInflatingData:suffixedGZipped], nil); + STAssertNil([NSData gtm_dataByInflatingBytes:[suffixedGZipped bytes] + length:[suffixedGZipped length]], + nil); + + [localPool release]; +} + - (void)testInflateDeflate { // generate a range of sizes w/ random content for (int n = 0 ; n < 2 ; ++n) { |