@@ -25,19 +25,21 @@ @implementation TestsAppDelegate (OFURLTests) - (void)URLTests { void *pool = objc_autoreleasePoolPush(); - OFURL *u1, *u2, *u3, *u4, *u5; + OFURL *u1, *u2, *u3, *u4, *u5, *u6, *u7; OFMutableURL *mu; TEST(@"+[URLWithString:]", R(u1 = [OFURL URLWithString: url_str]) && R(u2 = [OFURL URLWithString: @"http://foo:80"]) && R(u3 = [OFURL URLWithString: @"http://bar/"]) && R(u4 = [OFURL URLWithString: @"file:///etc/passwd"]) && - R(u5 = [OFURL URLWithString: @"http://foo/bar/qux/foo%2fbar"])) + R(u5 = [OFURL URLWithString: @"http://foo/bar/qux/foo%2fbar"]) && + R(u6 = [OFURL URLWithString: @"https://[12:34::56:abcd]/"]) && + R(u7 = [OFURL URLWithString: @"https://[12:34::56:abcd]:234/"])) EXPECT_EXCEPTION(@"+[URLWithString:] fails with invalid characters #1", OFInvalidFormatException, [OFURL URLWithString: @"ht,tp://foo"]) @@ -54,10 +56,22 @@ [OFURL URLWithString: @"http://foo/foo?`"]) EXPECT_EXCEPTION(@"+[URLWithString:] fails with invalid characters #5", OFInvalidFormatException, [OFURL URLWithString: @"http://foo/foo?foo#`"]) + + EXPECT_EXCEPTION(@"+[URLWithString:] fails with invalid characters #6", + OFInvalidFormatException, + [OFURL URLWithString: @"https://[g]/"]) + + EXPECT_EXCEPTION(@"+[URLWithString:] fails with invalid characters #7", + OFInvalidFormatException, + [OFURL URLWithString: @"https://[f]:/"]) + + EXPECT_EXCEPTION(@"+[URLWithString:] fails with invalid characters #8", + OFInvalidFormatException, + [OFURL URLWithString: @"https://[f]:f/"]) TEST(@"+[URLWithString:relativeToURL:]", [[[OFURL URLWithString: @"/foo" relativeToURL: u1] string] isEqual: @"ht%3atp://us%3Aer:p%40w@ho%3Ast:1234/foo"] && @@ -137,12 +151,16 @@ [u1.scheme isEqual: @"ht:tp"] && [u4.scheme isEqual: @"file"]) TEST(@"-[user]", [u1.user isEqual: @"us:er"] && u4.user == nil) TEST(@"-[password]", [u1.password isEqual: @"p@w"] && u4.password == nil) - TEST(@"-[host]", [u1.host isEqual: @"ho:st"] && [u4 port] == nil) - TEST(@"-[port]", [u1.port isEqual: [OFNumber numberWithUInt16: 1234]]) + TEST(@"-[host]", [u1.host isEqual: @"ho:st"] && + [u6.host isEqual: @"[12:34::56:abcd]"] && + [u7.host isEqual: @"[12:34::56:abcd]"]) + TEST(@"-[port]", [u1.port isEqual: [OFNumber numberWithUInt16: 1234]] && + [u4 port] == nil && + [u7.port isEqual: [OFNumber numberWithUInt16: 234]]) TEST(@"-[path]", [u1.path isEqual: @"/pa?th"] && [u4.path isEqual: @"/etc/passwd"]) TEST(@"-[pathComponents]", [u1.pathComponents isEqual: [OFArray arrayWithObjects: @"/", @"pa?th", nil]] &&