mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-23 17:10:48 +00:00
105 lines
4.1 KiB
Objective-C
105 lines
4.1 KiB
Objective-C
#import <Foundation/Foundation.h>
|
|
#import "Testing.h"
|
|
#import "ObjectTesting.h"
|
|
|
|
|
|
int main()
|
|
{
|
|
NSURLComponents *components = nil;
|
|
|
|
START_SET("components");
|
|
|
|
components = [NSURLComponents componentsWithURL:
|
|
[NSURL URLWithString: @"https://user:password@some.host.com"]
|
|
resolvingAgainstBaseURL: NO];
|
|
|
|
[components setQueryItems: [NSArray arrayWithObjects:
|
|
[NSURLQueryItem queryItemWithName: @"lang" value: @"en"],
|
|
[NSURLQueryItem queryItemWithName: @"response_type" value: @"code"],
|
|
[NSURLQueryItem queryItemWithName: @"uri" value:
|
|
[[NSURL URLWithString: @"https://some.url.com/path?param1=one¶m2=two"]
|
|
absoluteString]], nil]];
|
|
// URL
|
|
PASS_EQUAL([components string],
|
|
@"https://user:password@some.host.com?lang=en&response_type=code"
|
|
@"&uri=https://some.url.com/path?param1%3Done%26param2%3Dtwo",
|
|
"URL string is correct")
|
|
|
|
// encoded...
|
|
PASS_EQUAL([components percentEncodedQuery],
|
|
@"lang=en&response_type=code&uri=https://some.url.com/path"
|
|
@"?param1%3Done%26param2%3Dtwo",
|
|
"percentEncodedQuery is correct")
|
|
PASS_EQUAL([components percentEncodedHost], @"some.host.com",
|
|
"percentEncodedHost is correct")
|
|
PASS_EQUAL([components percentEncodedUser], @"user",
|
|
"percentEncodedUser is correct")
|
|
PASS_EQUAL([components percentEncodedPassword], @"password",
|
|
"percentEncodedPassword is correct")
|
|
|
|
// unencoded...
|
|
PASS_EQUAL([components query],
|
|
@"lang=en&response_type=code&uri=https://some.url.com/path?"
|
|
@"param1=one¶m2=two",
|
|
"query is correct")
|
|
PASS_EQUAL([components host], @"some.host.com",
|
|
"host is correct")
|
|
PASS_EQUAL([components user], @"user",
|
|
"user is correct")
|
|
PASS_EQUAL([components password], @"password",
|
|
"password is correct")
|
|
|
|
[components setQuery: nil];
|
|
PASS_EQUAL([components query], nil,
|
|
"set query to nil")
|
|
PASS_EQUAL([components percentEncodedQuery], nil,
|
|
"percent encoded query is nil")
|
|
PASS_EQUAL([components queryItems], nil,
|
|
"query items is nil")
|
|
PASS_EQUAL([components percentEncodedQueryItems], nil,
|
|
"percent encoded query items is nil")
|
|
|
|
[components setQuery: @""];
|
|
NSArray *emptyArray = [NSArray array];
|
|
PASS_EQUAL([components query], @"",
|
|
"set query to empty")
|
|
PASS_EQUAL([components percentEncodedQuery], @"",
|
|
"percent encoded query is empty")
|
|
PASS_EQUAL([components queryItems], emptyArray,
|
|
"query items is empty")
|
|
PASS_EQUAL([components percentEncodedQueryItems], emptyArray,
|
|
"percent encoded query items is empty")
|
|
|
|
[components setQuery: @"&"];
|
|
PASS_EQUAL([components query], @"&",
|
|
"set query to ampersand")
|
|
PASS_EQUAL([components percentEncodedQuery], @"&",
|
|
"percent encoded ampersand query is still ampersand")
|
|
|
|
[components setPercentEncodedQuery: @"%26"];
|
|
PASS_EQUAL([components query], @"&",
|
|
"set query to item containing ampersand")
|
|
PASS_EQUAL([components percentEncodedQuery], @"%26",
|
|
"percent encoded query item encodes ampersand")
|
|
|
|
//NSURLQueryItem percent encoding/decoding test
|
|
NSString* urlString = @"http://domain/?%D0%90%D0%B0%D0%91%D0%B1=%D0%90%D0%B0%D0%91%D0%B1";
|
|
NSString* cyrillicStr = @"\U00000410\U00000430\U00000411\U00000431";
|
|
NSURLComponents* components = [NSURLComponents componentsWithString:urlString];
|
|
NSURLQueryItem* item = [[components queryItems] lastObject];
|
|
PASS_EQUAL(item.name, cyrillicStr, "Should return decoded query item name from url");
|
|
PASS_EQUAL(item.value, cyrillicStr, "Should return decoded query item value from url");
|
|
|
|
item = [NSURLQueryItem queryItemWithName:cyrillicStr value:cyrillicStr];
|
|
[components setQueryItems:[NSArray arrayWithObject:item]];
|
|
PASS_EQUAL([components string], urlString, "Encoded url string from unencoded item");
|
|
PASS_EQUAL([components URL], [NSURL URLWithString:urlString], "Encoded url query part from unencoded item");
|
|
|
|
NSString* invalidUrlString = @"\U00000410\U00000430\U00000411\U00000431";
|
|
PASS_EQUAL([NSURL URLWithString:invalidUrlString], nil, "nil NSURL from invalid string")
|
|
PASS_EQUAL([NSURLComponents componentsWithString:invalidUrlString], nil, "nil NSComponents from invalid string")
|
|
|
|
END_SET("components")
|
|
|
|
return 0;
|
|
}
|