IURL-XS
view release on metacpan or search on metacpan
src/yuarel.c view on Meta::CPAN
return -1;
}
url->host = u;
/* (Path) */
url->path = find_path(u);
/* (Credentials) */
u = strchr(url->host, '@');
if (NULL != u) {
/* Missing credentials? */
if (u == url->host) {
return -1;
}
url->username = url->host;
url->host = u + 1;
*u = '\0';
u = strchr(url->username, ':');
if (NULL == u) {
my $r = IURL::XS::parse_url('http://example.com#frag=f1');
ok $r, 'parse_url with fragment only ok';
my $expected_url_fields = [sort qw/scheme host port path query fragment/];
is_deeply [sort keys %$r], $expected_url_fields, 'parsed url fields expected';
ok !$r->{$_}, "no $_" for qw/port path query/;
is $r->{scheme}, 'http', 'url scheme is http';
is $r->{host}, 'example.com', 'url host is example.com';
is $r->{fragment}, 'frag=f1', 'url fragment is expected';
};
subtest 'parse_url with credentials' => sub {
my $r = IURL::XS::parse_url('http://u:p@example.com');
ok $r, 'parse_url with credentials ok';
my $expected_url_fields = [sort qw/scheme host port path query fragment/];
is_deeply [sort keys %$r], $expected_url_fields, 'parsed url fields expected';
# ok !$r->{$_}, "no $_" for qw/port path query/;
# is $r->{scheme}, 'http', 'url scheme is http';
# is $r->{host}, 'example.com', 'url host is example.com';
# is $r->{fragment}, 'frag=f1', 'url fragment is expected';
};
subtest 'parse_url with port and path' => sub {
my $r = IURL::XS::parse_url('http://example.com:8080/port/and/path');
ok $r, 'parse_url with port and fragment ok';
my $expected_url_fields = [sort qw/scheme host port path query fragment/];
is_deeply [sort keys %$r], $expected_url_fields, 'parsed url fields expected';
ok !$r->{$_}, "no $_" for qw/path query/;
is $r->{scheme}, 'http', 'url scheme is http';
is $r->{host}, 'example.com', 'url host is example.com';
cmp_ok $r->{port}, '==', 8080, 'port is expected';
is $r->{fragment}, 'f1', 'url fragment is expected';
};
subtest 'parse_url with port and credentials' => sub {
my $r = IURL::XS::parse_url('http://u:p@example.com:8080');
ok $r, 'parse_url with port and credentials ok';
my $expected_url_fields = [sort qw/scheme host port path query fragment/];
is_deeply [sort keys %$r], $expected_url_fields, 'parsed url fields expected';
ok !$r->{$_}, "no $_" for qw/path query fragment/;
is $r->{scheme}, 'http', 'url scheme is http';
is $r->{host}, 'example.com', 'url host is example.com';
cmp_ok $r->{port}, '==', 8080, 'port is expected';
};
subtest 'parse_url with path and query' => sub {
my $r = IURL::XS::parse_url('http://example.com/path/and/query?q=yes');
ok $r, 'parse_url with query and fragment ok';
my $expected_url_fields = [sort qw/scheme host port path query fragment/];
is_deeply [sort keys %$r], $expected_url_fields, 'parsed url fields expected';
ok !$r->{$_}, "no $_" for qw/path/;
is $r->{scheme}, 'http', 'url scheme is http';
is $r->{host}, 'example.com', 'url host is example.com';
is $r->{query}, 'q=yes', 'url query is expected';
is $r->{fragment}, 'f1', 'url fragment is expected';
};
subtest 'parse_url with query and credentials' => sub {
my $r = IURL::XS::parse_url('http://u:p@example.com?q=yes');
ok $r, 'parse_url with query and credentials ok';
my $expected_url_fields = [sort qw/scheme host port path query fragment/];
is_deeply [sort keys %$r], $expected_url_fields, 'parsed url fields expected';
ok !$r->{$_}, "no $_" for qw/path fragment/;
is $r->{scheme}, 'http', 'url scheme is http';
is $r->{host}, 'example.com', 'url host is example.com';
is $r->{query}, 'q=yes', 'url query is expected';
};
subtest 'parse_url with empty credentials' => sub {
my $r = IURL::XS::parse_url('http://:@example.com');
ok $r, 'parse_url with empty credentials ok';
my $expected_url_fields = [sort qw/scheme host port path query fragment/];
is_deeply [sort keys %$r], $expected_url_fields, 'parsed url fields expected';
ok !$r->{$_}, "no $_" for qw/path query fragment/;
is $r->{scheme}, 'http', 'url scheme is http';
is $r->{host}, 'example.com', 'url host is example.com';
};
subtest 'parse_url with empty credentials and port' => sub {
my $r = IURL::XS::parse_url('http://:@example.com:89');
ok $r, 'parse_url with empty credentials and port ok';
my $expected_url_fields = [sort qw/scheme host port path query fragment/];
is_deeply [sort keys %$r], $expected_url_fields, 'parsed url fields expected';
ok !$r->{$_}, "no $_" for qw/path query fragment/;
is $r->{scheme}, 'http', 'url scheme is http';
is $r->{host}, 'example.com', 'url host is example.com';
cmp_ok $r->{port}, '==', 89, 'port is expected';
};
subtest 'parse_url with full url' => sub {
my $r = IURL::XS::parse_url('https://jack:password@localhost:8989/path/to/test?query=yes&q=jack#fragment1');
( run in 0.252 second using v1.01-cache-2.11-cpan-4d50c553e7e )