1#import <Foundation/Foundation.h> 2 3#import "Testing.h" 4 5int main() 6{ 7 NSAutoreleasePool *arp = [NSAutoreleasePool new]; 8 NSData *data; 9 NSData *ref; 10 NSString *str1; 11 NSString *str2; 12 NSString *strEnc; 13 14 PASS_EXCEPTION([[NSData alloc] initWithBase64EncodedString: nil options: 0], 15 NSInvalidArgumentException, "nil argument causes exception"); 16 17 data = [[NSData alloc] initWithBase64EncodedString: @"" options: 0]; 18 ref = [NSData data]; 19 PASS_EQUAL(data, ref, "base64 decoding vector 1") 20 [data release]; 21 22 data = [[NSData alloc] initWithBase64EncodedString: @"Zg==" options: 0]; 23 ref = [NSData dataWithBytes: "f" length: 1]; 24 PASS_EQUAL(data, ref, "base64 decoding vector 2") 25 [data release]; 26 27 data = [[NSData alloc] initWithBase64EncodedString: @"Zm8=" options: 0]; 28 ref = [NSData dataWithBytes: "fo" length: 2]; 29 PASS_EQUAL(data, ref, "base64 decoding vector 3") 30 [data release]; 31 32 data = [[NSData alloc] initWithBase64EncodedString: @"Zm9v" options: 0]; 33 ref = [NSData dataWithBytes: "foo" length: 3]; 34 PASS_EQUAL(data, ref, "base64 decoding vector 4") 35 [data release]; 36 37 data = [[NSData alloc] initWithBase64EncodedString: @"Zm9vYg==" options: 0]; 38 ref = [NSData dataWithBytes: "foob" length: 4]; 39 PASS_EQUAL(data, ref, "base64 decoding vector 5") 40 [data release]; 41 42 data = [[NSData alloc] initWithBase64EncodedString: @"Zm9vYmE=" options: 0]; 43 ref = [NSData dataWithBytes: "fooba" length: 5]; 44 PASS_EQUAL(data, ref, "base64 decoding vector 6") 45 [data release]; 46 47 data = [[NSData alloc] initWithBase64EncodedString: @"Zm9vYmE==" options: 0]; 48 ref = [NSData dataWithBytes: "fooba" length: 5]; 49 PASS_EQUAL(data, ref, "base64 decoding vector 6 with 1 extra padding") 50 [data release]; 51 52 data = [[NSData alloc] initWithBase64EncodedString: @"Zm9vYmE=====" 53 options: 0]; 54 ref = [NSData dataWithBytes: "fooba" length: 5]; 55 PASS_EQUAL(data, ref, "base64 decoding vector 6 with 4 extra padding") 56 [data release]; 57 58 data = [[NSData alloc] initWithBase64EncodedString: @"Zm9vYmFy" options: 0]; 59 ref = [NSData dataWithBytes: "foobar" length: 6]; 60 PASS_EQUAL(data, ref, "base64 decoding vector 7") 61 [data release]; 62 63 data = [[NSData alloc] initWithBase64EncodedString: @"Zm9vYmFy=====" 64 options: 0]; 65 ref = [NSData dataWithBytes: "foobar\0" length: 7]; 66 PASS_EQUAL(data, ref, "base64 decoding excess padding gives single nul byte") 67 [data release]; 68 69 data = [[NSData alloc] initWithBase64EncodedString: @"Zm9v YmFy" options: 0]; 70 PASS_EQUAL(data, nil, "base64 decoding with space returns nil") 71 [data release]; 72 73 data = [[NSData alloc] initWithBase64EncodedString: @"Zm9v YmFy" 74 options: NSDataBase64DecodingIgnoreUnknownCharacters]; 75 ref = [NSData dataWithBytes: "foobar" length: 6]; 76 PASS_EQUAL(data, ref, "base64 decoding vector 8") 77 [data release]; 78 79 str1 = @"In principio creavit Deus caelum et terram.\nTerra autem erat inanis et vacua, et tenebrae super faciem abyssi, et spiritus Dei ferebatur super aquas.\nDixitque Deus: \"Fiat lux\". Et facta est lux."; 80 data = [str1 dataUsingEncoding: NSASCIIStringEncoding]; 81 strEnc = [data base64EncodedStringWithOptions:0]; 82 data = [[NSData alloc] initWithBase64EncodedString: strEnc options: 0]; 83 str2 = [[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding]; 84 PASS_EQUAL(str1, str2, "Encode / Decode no lines") 85 [str2 release]; 86 87 str1 = @"In principio creavit Deus caelum et terram.\nTerra autem erat inanis et vacua, et tenebrae super faciem abyssi, et spiritus Dei ferebatur super aquas.\nDixitque Deus: \"Fiat lux\". Et facta est lux."; 88 data = [str1 dataUsingEncoding: NSASCIIStringEncoding]; 89 strEnc = [data base64EncodedStringWithOptions: (NSDataBase64Encoding64CharacterLineLength | NSDataBase64EncodingEndLineWithLineFeed)]; 90 data = [[NSData alloc] initWithBase64EncodedString: strEnc 91 options: NSDataBase64DecodingIgnoreUnknownCharacters]; 92 str2 = [[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding]; 93 PASS_EQUAL(str1, str2, "Encode / Decode 64 - LF") 94 [str2 release]; 95 96 str1 = @"In principio creavit Deus caelum et terram.\nTerra autem erat inanis et vacua, et tenebrae super faciem abyssi, et spiritus Dei ferebatur super aquas.\nDixitque Deus: \"Fiat lux\". Et facta est lux."; 97 data = [str1 dataUsingEncoding: NSASCIIStringEncoding]; 98 strEnc = [data base64EncodedStringWithOptions: (NSDataBase64Encoding76CharacterLineLength | NSDataBase64EncodingEndLineWithLineFeed)]; 99 data = [[NSData alloc] initWithBase64EncodedString: strEnc 100 options: NSDataBase64DecodingIgnoreUnknownCharacters]; 101 str2 = [[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding]; 102 PASS_EQUAL(str1, str2, "Encode / Decode 76 - LF") 103 [str2 release]; 104 105 str1 = @"In principio creavit Deus caelum et terram.\nTerra autem erat inanis et vacua, et tenebrae super faciem abyssi, et spiritus Dei ferebatur super aquas.\nDixitque Deus: \"Fiat lux\". Et facta est lux."; 106 data = [str1 dataUsingEncoding: NSASCIIStringEncoding]; 107 strEnc = [data base64EncodedStringWithOptions: (NSDataBase64Encoding64CharacterLineLength | NSDataBase64EncodingEndLineWithCarriageReturn)]; 108 data = [[NSData alloc] initWithBase64EncodedString: strEnc 109 options: NSDataBase64DecodingIgnoreUnknownCharacters]; 110 str2 = [[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding]; 111 PASS_EQUAL(str1, str2, "Encode / Decode 64 - CR") 112 [str2 release]; 113 114 str1 = @"In principio creavit Deus caelum et terram.\nTerra autem erat inanis et vacua, et tenebrae super faciem abyssi, et spiritus Dei ferebatur super aquas.\nDixitque Deus: \"Fiat lux\". Et facta est lux."; 115 data = [str1 dataUsingEncoding: NSASCIIStringEncoding]; 116 strEnc = [data base64EncodedStringWithOptions: NSDataBase64Encoding64CharacterLineLength]; 117 data = [[NSData alloc] initWithBase64EncodedString: strEnc 118 options: NSDataBase64DecodingIgnoreUnknownCharacters]; 119 str2 = [[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding]; 120 PASS_EQUAL(str1, str2, "Encode / Decode 64 - implicit CR LF") 121 [str2 release]; 122 123 data = [[NSData alloc] initWithBase64EncodedString: 124 @"Yml0bWFya2V0cyB1c2VyIGluZGVudGl0eQ==\n" 125 options: NSDataBase64DecodingIgnoreUnknownCharacters]; 126 ref = [NSData dataWithBytes: "bitmarkets user indentity" length: 25]; 127 PASS_EQUAL(data, ref, "base64 decoding Yml0bWFya2V0cyB1c2VyIGluZGVudGl0eQ==") 128 [data release]; 129 130 [arp release]; arp = nil; 131 return 0; 132} 133