2015-06-04 08:42:20 +00:00
# import < Foundation / Foundation . h >
# import "Testing.h"
int main ( )
{
NSAutoreleasePool * arp = [ NSAutoreleasePool new ] ;
NSData * data ;
NSData * ref ;
2015-06-14 17:34:18 +00:00
NSString * str1 ;
NSString * str2 ;
NSString * strEnc ;
2015-06-04 08:42:20 +00:00
2015-06-04 09:10:50 +00:00
PASS_EXCEPTION ( [ [ NSData alloc ] initWithBase64EncodedString : nil options : 0 ] ,
NSInvalidArgumentException , "nil argument causes exception" ) ;
2015-06-04 08:42:20 +00:00
data = [ [ NSData alloc ] initWithBase64EncodedString : @ "" options : 0 ] ;
ref = [ NSData data ] ;
PASS_EQUAL ( data , ref , "base64 decoding vector 1" )
[ data release ] ;
2015-06-04 09:10:50 +00:00
data = [ [ NSData alloc ] initWithBase64EncodedString : @ "Zg==" options : 0 ] ;
2015-06-04 08:42:20 +00:00
ref = [ NSData dataWithBytes : "f" length : 1 ] ;
PASS_EQUAL ( data , ref , "base64 decoding vector 2" )
[ data release ] ;
2015-06-04 09:10:50 +00:00
data = [ [ NSData alloc ] initWithBase64EncodedString : @ "Zm8=" options : 0 ] ;
ref = [ NSData dataWithBytes : "fo" length : 2 ] ;
PASS_EQUAL ( data , ref , "base64 decoding vector 3" )
[ data release ] ;
data = [ [ NSData alloc ] initWithBase64EncodedString : @ "Zm9v" options : 0 ] ;
ref = [ NSData dataWithBytes : "foo" length : 3 ] ;
PASS_EQUAL ( data , ref , "base64 decoding vector 4" )
[ data release ] ;
data = [ [ NSData alloc ] initWithBase64EncodedString : @ "Zm9vYg==" options : 0 ] ;
ref = [ NSData dataWithBytes : "foob" length : 4 ] ;
PASS_EQUAL ( data , ref , "base64 decoding vector 5" )
[ data release ] ;
data = [ [ NSData alloc ] initWithBase64EncodedString : @ "Zm9vYmE=" options : 0 ] ;
ref = [ NSData dataWithBytes : "fooba" length : 5 ] ;
PASS_EQUAL ( data , ref , "base64 decoding vector 6" )
[ data release ] ;
2015-06-08 07:45:14 +00:00
data = [ [ NSData alloc ] initWithBase64EncodedString : @ "Zm9vYmE==" options : 0 ] ;
ref = [ NSData dataWithBytes : "fooba" length : 5 ] ;
PASS_EQUAL ( data , ref , "base64 decoding vector 6 with 1 extra padding" )
[ data release ] ;
data = [ [ NSData alloc ] initWithBase64EncodedString : @ "Zm9vYmE====="
options : 0 ] ;
ref = [ NSData dataWithBytes : "fooba" length : 5 ] ;
PASS_EQUAL ( data , ref , "base64 decoding vector 6 with 4 extra padding" )
[ data release ] ;
2015-06-04 09:10:50 +00:00
data = [ [ NSData alloc ] initWithBase64EncodedString : @ "Zm9vYmFy" options : 0 ] ;
ref = [ NSData dataWithBytes : "foobar" length : 6 ] ;
PASS_EQUAL ( data , ref , "base64 decoding vector 7" )
[ data release ] ;
2015-06-04 08:42:20 +00:00
2015-06-08 07:45:14 +00:00
data = [ [ NSData alloc ] initWithBase64EncodedString : @ "Zm9vYmFy====="
options : 0 ] ;
ref = [ NSData dataWithBytes : "foobar\0" length : 7 ] ;
PASS_EQUAL ( data , ref , "base64 decoding excess padding gives single nul byte" )
[ data release ] ;
2015-06-08 06:26:39 +00:00
data = [ [ NSData alloc ] initWithBase64EncodedString : @ "Zm9v YmFy" options : 0 ] ;
PASS_EQUAL ( data , nil , "base64 decoding with space returns nil" )
[ data release ] ;
data = [ [ NSData alloc ] initWithBase64EncodedString : @ "Zm9v YmFy"
options : NSDataBase64DecodingIgnoreUnknownCharacters ] ;
ref = [ NSData dataWithBytes : "foobar" length : 6 ] ;
PASS_EQUAL ( data , ref , "base64 decoding vector 8" )
[ data release ] ;
2015-06-14 17:34:18 +00:00
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." ;
2015-06-15 09:26:52 +00:00
data = [ str1 dataUsingEncoding : NSASCIIStringEncoding ] ;
2015-06-14 17:34:18 +00:00
strEnc = [ data base64EncodedStringWithOptions : 0 ] ;
2015-06-15 09:26:52 +00:00
data = [ [ NSData alloc ] initWithBase64EncodedString : strEnc options : 0 ] ;
str2 = [ [ NSString alloc ] initWithData : data encoding : NSASCIIStringEncoding ] ;
2015-06-14 17:34:18 +00:00
PASS_EQUAL ( str1 , str2 , "Encode / Decode no lines" )
[ str2 release ] ;
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." ;
2015-06-15 09:26:52 +00:00
data = [ str1 dataUsingEncoding : NSASCIIStringEncoding ] ;
strEnc = [ data base64EncodedStringWithOptions : ( NSDataBase64Encoding64CharacterLineLength | NSDataBase64EncodingEndLineWithLineFeed ) ] ;
data = [ [ NSData alloc ] initWithBase64EncodedString : strEnc
options : NSDataBase64DecodingIgnoreUnknownCharacters ] ;
str2 = [ [ NSString alloc ] initWithData : data encoding : NSASCIIStringEncoding ] ;
2015-06-14 17:34:18 +00:00
PASS_EQUAL ( str1 , str2 , "Encode / Decode 64 - LF" )
[ str2 release ] ;
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." ;
2015-06-15 09:26:52 +00:00
data = [ str1 dataUsingEncoding : NSASCIIStringEncoding ] ;
strEnc = [ data base64EncodedStringWithOptions : ( NSDataBase64Encoding76CharacterLineLength | NSDataBase64EncodingEndLineWithLineFeed ) ] ;
data = [ [ NSData alloc ] initWithBase64EncodedString : strEnc
options : NSDataBase64DecodingIgnoreUnknownCharacters ] ;
str2 = [ [ NSString alloc ] initWithData : data encoding : NSASCIIStringEncoding ] ;
2015-06-14 17:34:18 +00:00
PASS_EQUAL ( str1 , str2 , "Encode / Decode 76 - LF" )
[ str2 release ] ;
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." ;
2015-06-15 09:26:52 +00:00
data = [ str1 dataUsingEncoding : NSASCIIStringEncoding ] ;
strEnc = [ data base64EncodedStringWithOptions : ( NSDataBase64Encoding64CharacterLineLength | NSDataBase64EncodingEndLineWithCarriageReturn ) ] ;
data = [ [ NSData alloc ] initWithBase64EncodedString : strEnc
options : NSDataBase64DecodingIgnoreUnknownCharacters ] ;
str2 = [ [ NSString alloc ] initWithData : data encoding : NSASCIIStringEncoding ] ;
2015-06-14 17:34:18 +00:00
PASS_EQUAL ( str1 , str2 , "Encode / Decode 64 - CR" )
[ str2 release ] ;
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." ;
2015-06-15 09:26:52 +00:00
data = [ str1 dataUsingEncoding : NSASCIIStringEncoding ] ;
strEnc = [ data base64EncodedStringWithOptions : NSDataBase64Encoding64CharacterLineLength ] ;
data = [ [ NSData alloc ] initWithBase64EncodedString : strEnc
options : NSDataBase64DecodingIgnoreUnknownCharacters ] ;
str2 = [ [ NSString alloc ] initWithData : data encoding : NSASCIIStringEncoding ] ;
2015-06-14 17:34:18 +00:00
PASS_EQUAL ( str1 , str2 , "Encode / Decode 64 - implicit CR LF" )
[ str2 release ] ;
2016-02-04 16:02:49 +00:00
data = [ [ NSData alloc ] initWithBase64EncodedString :
2016-02-04 22:29:22 +00:00
@ "Yml0bWFya2V0cyB1c2VyIGluZGVudGl0eQ==\n"
options : NSDataBase64DecodingIgnoreUnknownCharacters ] ;
2016-02-04 16:02:49 +00:00
ref = [ NSData dataWithBytes : "bitmarkets user indentity" length : 25 ] ;
PASS_EQUAL ( data , ref , "base64 decoding Yml0bWFya2V0cyB1c2VyIGluZGVudGl0eQ==" )
[ data release ] ;
2015-06-04 08:42:20 +00:00
[ arp release ] ; arp = nil ;
return 0 ;
}