Skip to content

Commit 17c7300

Browse files
committed
Add more tests for verifying the behavior of withers
1 parent ea81d80 commit 17c7300

File tree

9 files changed

+251
-133
lines changed

9 files changed

+251
-133
lines changed

ext/uri/php_lexbor.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ static zend_result lexbor_write_host(uri_internal_t *internal_uri, zval *value,
392392

393393
ZVAL_TO_LEXBOR_STR(value, str);
394394

395-
lxb_status_t status = lxb_url_api_host_set(lexbor_uri, lexbor_parser, str.data, str.length);
395+
lxb_status_t status = lxb_url_api_hostname_set(lexbor_uri, lexbor_parser, str.data, str.length);
396396

397397
CHECK_WRITE_RESULT(status, lexbor_uri, str, errors);
398398
}

ext/uri/tests/023.phpt

+22-10
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,39 @@ $uri1 = Uri\Rfc3986\Uri::parse("https://example.com");
99
$uri2 = $uri1->withScheme("http");
1010
$uri3 = $uri2->withScheme(null);
1111

12-
var_dump($uri1->toString());
13-
var_dump($uri2->toString());
14-
var_dump($uri3->toString());
12+
var_dump($uri2->getScheme());
13+
var_dump($uri3->getScheme());
14+
15+
try {
16+
$uri3->withScheme("http%73");
17+
} catch (Uri\InvalidUriException $e) {
18+
echo $e->getMessage() . "\n";
19+
}
1520

1621
$url1 = Uri\WhatWg\Url::parse("https://example.com");
1722
$url2 = $url1->withScheme("http");
1823

19-
var_dump($url1->toString());
20-
var_dump($url2->toString());
24+
var_dump($url1->getScheme());
25+
var_dump($url2->getScheme());
2126

2227
try {
2328
$url2->withScheme("");
2429
} catch (Uri\InvalidUriException $e) {
2530
echo $e->getMessage() . "\n";
2631
}
2732

33+
try {
34+
$url2->withScheme("http%73");
35+
} catch (Uri\InvalidUriException $e) {
36+
echo $e->getMessage() . "\n";
37+
}
38+
2839
?>
2940
--EXPECT--
30-
string(19) "https://example.com"
31-
string(18) "http://example.com"
32-
string(11) "example.com"
33-
string(20) "https://example.com/"
34-
string(19) "http://example.com/"
41+
string(4) "http"
42+
NULL
43+
URI parsing failed
44+
string(5) "https"
45+
string(4) "http"
46+
URI parsing failed
3547
URI parsing failed

ext/uri/tests/024.phpt

+19-6
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,26 @@ uri
88
$url1 = Uri\WhatWg\Url::parse("https://example.com");
99
$url2 = $url1->withUser("user");
1010
$url3 = $url2->withUser(null);
11+
$url4 = $url3->withUser("%75s%2Fr"); // us/r
12+
$url5 = $url4->withUser("u:s/r");
1113

12-
var_dump($url1->toString());
13-
var_dump($url2->toString());
14-
var_dump($url3->toString());
14+
$url6 = Uri\WhatWg\Url::parse("file:///foo/bar/");
15+
$url6 = $url6->withUser("user");
16+
17+
var_dump($url2->getRawUser());
18+
var_dump($url3->getRawUser());
19+
var_dump($url4->getRawUser());
20+
var_dump($url4->getUser());
21+
var_dump($url5->getRawUser());
22+
var_dump($url5->getUser());
23+
var_dump($url6->getRawUser());
1524

1625
?>
1726
--EXPECT--
18-
string(20) "https://example.com/"
19-
string(25) "https://[email protected]/"
20-
string(20) "https://example.com/"
27+
string(4) "user"
28+
NULL
29+
string(8) "%75s%2Fr"
30+
string(4) "us/r"
31+
string(9) "u%3As%2Fr"
32+
string(5) "u:s/r"
33+
NULL

ext/uri/tests/025.phpt

+15-6
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,22 @@ uri
88
$url1 = Uri\WhatWg\Url::parse("https://example.com");
99
$url2 = $url1->withPassword("pass");
1010
$url3 = $url2->withPassword(null);
11+
$url4 = $url3->withPassword("p%61ss");
12+
$url5 = $url4->withPassword("p:s/");
1113

12-
var_dump($url1->toString());
13-
var_dump($url2->toString());
14-
var_dump($url3->toString());
14+
$url6 = Uri\WhatWg\Url::parse("file:///foo/bar/");
15+
$url6 = $url6->withUser("pass");
16+
17+
var_dump($url2->getRawPassword());
18+
var_dump($url3->getRawPassword());
19+
var_dump($url4->getRawPassword());
20+
var_dump($url5->getRawPassword());
21+
var_dump($url6->getRawPassword());
1522

1623
?>
1724
--EXPECT--
18-
string(20) "https://example.com/"
19-
string(26) "https://:[email protected]/"
20-
string(20) "https://example.com/"
25+
string(4) "pass"
26+
NULL
27+
string(6) "p%61ss"
28+
string(8) "p%3As%2F"
29+
NULL

ext/uri/tests/026.phpt

+57-22
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,56 @@ uri
88
$uri1 = Uri\Rfc3986\Uri::parse("https://example.com");
99
$uri2 = $uri1->withHost("test.com");
1010
$uri3 = $uri2->withHost(null);
11+
$uri4 = $uri3->withHost("t%65st.com"); // test.com
12+
$uri5 = $uri4->withHost("t%3As%2Ft.com"); // t:s/t.com
13+
$uri6 = $uri5->withHost("test.com:8080"); // TODO should fail
1114

12-
var_dump($uri1->toString());
13-
var_dump($uri2->toString());
14-
var_dump($uri3->toString());
15+
var_dump($uri2->getRawHost());
16+
var_dump($uri3->getRawHost());
17+
var_dump($uri4->getRawHost());
18+
var_dump($uri5->getRawHost());
19+
var_dump($uri6->getRawHost());
20+
21+
try {
22+
$uri4->withHost("t:s/t.com");
23+
} catch (Uri\InvalidUriException $e) {
24+
echo $e->getMessage() . "\n";
25+
}
1526

1627
$uri1 = Uri\Rfc3986\Uri::parse("ftp://foo.com?query=abc#foo");
1728
$uri2 = $uri1->withHost("test.com");
1829

19-
var_dump($uri1->toString());
20-
var_dump($uri2->toString());
30+
var_dump($uri1->getRawHost());
31+
var_dump($uri2->getRawHost());
2132

2233
$uri1 = Uri\Rfc3986\Uri::parse("/path?query=abc#foo");
2334
$uri2 = $uri1->withHost("test.com");
2435

25-
var_dump($uri1->toString());
26-
var_dump($uri2->toString());
36+
var_dump($uri1->getRawHost());
37+
var_dump($uri2->getRawHost());
2738

2839
$url1 = Uri\WhatWg\Url::parse("https://example.com");
2940
$url2 = $url1->withHost("test.com");
41+
$url3 = $url2->withHost("t%65st.com"); // test.com
42+
$url4 = $url3->withHost("test.com:8080");
3043

31-
var_dump($url1->toString());
32-
var_dump($url2->toString());
44+
var_dump($url1->getHost());
45+
var_dump($url2->getHost());
46+
var_dump($url3->getHost());
47+
var_dump($url4->getHost());
48+
var_dump($url4->getPort());
49+
50+
try {
51+
$url4->withHost("t%3As%2Ft.com"); // t:s/t.com
52+
} catch (Uri\InvalidUriException $e) {
53+
echo $e->getMessage() . "\n";
54+
}
55+
56+
try {
57+
$url4->withHost("t:s/t.com");
58+
} catch (Uri\InvalidUriException $e) {
59+
echo $e->getMessage() . "\n";
60+
}
3361

3462
try {
3563
$url2->withHost(null);
@@ -40,20 +68,27 @@ try {
4068
$url1 = Uri\WhatWg\Url::parse("ftp://foo.com?query=abc#foo");
4169
$url2 = $url1->withHost("test.com");
4270

43-
var_dump($url1->toString());
44-
var_dump($url2->toString());
71+
var_dump($url1->getHost());
72+
var_dump($url2->getHost());
4573

4674
?>
4775
--EXPECT--
48-
string(19) "https://example.com"
49-
string(16) "https://test.com"
50-
string(8) "https://"
51-
string(27) "ftp://foo.com?query=abc#foo"
52-
string(28) "ftp://test.com?query=abc#foo"
53-
string(19) "/path?query=abc#foo"
54-
string(27) "test.com/path?query=abc#foo"
55-
string(20) "https://example.com/"
56-
string(17) "https://test.com/"
76+
string(8) "test.com"
77+
NULL
78+
string(10) "t%65st.com"
79+
string(13) "t%3As%2Ft.com"
80+
string(8) "test.com"
81+
URI parsing failed
82+
string(7) "foo.com"
83+
string(8) "test.com"
84+
NULL
85+
NULL
86+
string(11) "example.com"
87+
string(8) "test.com"
88+
string(8) "test.com"
89+
string(8) "test.com"
90+
NULL
91+
URI parsing failed
5792
URI parsing failed
58-
string(28) "ftp://foo.com/?query=abc#foo"
59-
string(29) "ftp://test.com/?query=abc#foo"
93+
string(7) "foo.com"
94+
string(8) "test.com"

ext/uri/tests/027.phpt

+28-20
Original file line numberDiff line numberDiff line change
@@ -9,39 +9,47 @@ $uri1 = Uri\Rfc3986\Uri::parse("https://example.com:8080");
99
$uri2 = $uri1->withPort(22);
1010
$uri3 = $uri2->withPort(null);
1111

12-
var_dump($uri1->toString());
13-
var_dump($uri2->toString());
14-
var_dump($uri3->toString());
12+
var_dump($uri1->getPort());
13+
var_dump($uri2->getPort());
14+
var_dump($uri3->getPort());
1515

1616
$uri1 = Uri\Rfc3986\Uri::parse("ftp://foo.com:443?query=abc#foo");
1717
$uri2 = $uri1->withPort(8080);
1818

19-
var_dump($uri1->toString());
20-
var_dump($uri2->toString());
19+
var_dump($uri1->getPort());
20+
var_dump($uri2->getPort());
2121

2222
$url1 = Uri\WhatWg\Url::parse("https://example.com:8080");
2323
$url2 = $url1->withPort(22);
2424
$url3 = $url2->withPort(null);
2525

26-
var_dump($url1->toString());
27-
var_dump($url2->toString());
28-
var_dump($url3->toString());
26+
var_dump($url1->getPort());
27+
var_dump($url2->getPort());
28+
var_dump($url3->getPort());
2929

3030
$url1 = Uri\WhatWg\Url::parse("ftp://foo.com:443?query=abc#foo");
3131
$url2 = $url1->withPort(8080);
3232

33-
var_dump($url1->toString());
34-
var_dump($url2->toString());
33+
var_dump($url1->getPort());
34+
var_dump($url2->getPort());
35+
36+
$url1 = Uri\WhatWg\Url::parse("file:///foo/bar");
37+
$url2 = $url1->withPort(80);
38+
39+
var_dump($url1->getPort());
40+
var_dump($url2->getPort());
3541

3642
?>
3743
--EXPECT--
38-
string(24) "https://example.com:8080"
39-
string(22) "https://example.com:22"
40-
string(19) "https://example.com"
41-
string(31) "ftp://foo.com:443?query=abc#foo"
42-
string(32) "ftp://foo.com:8080?query=abc#foo"
43-
string(25) "https://example.com:8080/"
44-
string(23) "https://example.com:22/"
45-
string(20) "https://example.com/"
46-
string(32) "ftp://foo.com:443/?query=abc#foo"
47-
string(33) "ftp://foo.com:8080/?query=abc#foo"
44+
int(8080)
45+
int(22)
46+
NULL
47+
int(443)
48+
int(8080)
49+
int(8080)
50+
int(22)
51+
NULL
52+
int(443)
53+
int(8080)
54+
NULL
55+
NULL

ext/uri/tests/028.phpt

+44-24
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,74 @@
22
Test property mutation - path
33
--EXTENSIONS--
44
uri
5+
--XFAIL--
6+
uriparser percent-encoded paths
57
--FILE--
68
<?php
79

810
$uri1 = Uri\Rfc3986\Uri::parse("https://example.com/foo/bar");
911
$uri2 = $uri1->withPath("/foo");
1012
$uri3 = $uri2->withPath(null);
13+
$uri4 = $uri3->withPath("t%65st");
14+
$uri5 = $uri4->withPath("/foo%2Fbar");
15+
$uri6 = $uri5->withPath("/#");
1116

12-
var_dump($uri1->toString());
13-
var_dump($uri2->toString());
14-
var_dump($uri3->toString());
17+
var_dump($uri1->getRawPath());
18+
var_dump($uri2->getRawPath());
19+
var_dump($uri3->getRawPath());
20+
var_dump($uri4->getRawPath());
21+
var_dump($uri5->getRawPath());
22+
var_dump($uri6->getRawPath());
1523

1624
$uri1 = Uri\Rfc3986\Uri::parse("https://example.com");
1725
$uri2 = $uri1->withPath("/foo");
1826

19-
var_dump($uri1->toString());
20-
var_dump($uri2->toString());
27+
var_dump($uri1->getRawPath());
28+
var_dump($uri2->getRawPath());
2129

2230
$uri1 = Uri\Rfc3986\Uri::parse("/path?query=abc#foo");
2331
$uri2 = $uri1->withPath("/");
2432

25-
var_dump($uri1->toString());
26-
var_dump($uri2->toString());
33+
var_dump($uri1->getRawPath());
34+
var_dump($uri2->getRawPath());
2735

2836
$url1 = Uri\WhatWg\Url::parse("https://example.com/foo/bar");
2937
$url2 = $url1->withPath("/foo");
3038
$url3 = $url2->withPath(null);
39+
$url4 = $url3->withPath("t%65st");
40+
$url5 = $url4->withPath("/foo%2Fbar");
41+
$url6 = $url5->withPath("/#");
3142

32-
var_dump($url1->toString());
33-
var_dump($url2->toString());
34-
var_dump($url3->toString());
43+
var_dump($url1->getRawPath());
44+
var_dump($url2->getRawPath());
45+
var_dump($url3->getRawPath());
46+
var_dump($url4->getRawPath());
47+
var_dump($url5->getRawPath());
48+
var_dump($url6->getRawPath());
3549

3650
$url1 = Uri\WhatWg\Url::parse("https://example.com");
3751
$uri2 = $url1->withPath("/foo");
3852

39-
var_dump($url1->toString());
40-
var_dump($url2->toString());
53+
var_dump($url1->getRawPath());
54+
var_dump($url2->getRawPath());
4155

4256
?>
4357
--EXPECT--
44-
string(27) "https://example.com/foo/bar"
45-
string(23) "https://example.com/foo"
46-
string(19) "https://example.com"
47-
string(19) "https://example.com"
48-
string(23) "https://example.com/foo"
49-
string(19) "/path?query=abc#foo"
50-
string(15) "/?query=abc#foo"
51-
string(27) "https://example.com/foo/bar"
52-
string(23) "https://example.com/foo"
53-
string(20) "https://example.com/"
54-
string(20) "https://example.com/"
55-
string(23) "https://example.com/foo"
58+
string(8) "/foo/bar"
59+
string(4) "/foo"
60+
NULL
61+
NULL
62+
string(10) "/foo%2Fbar"
63+
string(4) "/%3F"
64+
NULL
65+
string(4) "/foo"
66+
string(5) "/path"
67+
string(1) "/"
68+
string(8) "/foo/bar"
69+
string(4) "/foo"
70+
string(1) "/"
71+
string(7) "/t%65st"
72+
string(10) "/foo%2Fbar"
73+
string(4) "/%23"
74+
string(1) "/"
75+
string(4) "/foo"

0 commit comments

Comments
 (0)