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) {

t/base.t  view on Meta::CPAN

    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');

t/base.t  view on Meta::CPAN

    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');

t/base.t  view on Meta::CPAN

    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 )