1<?php 2 3namespace Sabre\Uri; 4 5class ParseTest extends \PHPUnit_Framework_TestCase{ 6 7 /** 8 * @dataProvider parseData 9 */ 10 function testParse($in, $out) { 11 12 $this->assertEquals( 13 $out, 14 parse($in) 15 ); 16 17 } 18 19 /** 20 * @dataProvider parseData 21 */ 22 function testParseFallback($in, $out) { 23 24 $result = _parse_fallback($in); 25 $result = $result + [ 26 'scheme' => null, 27 'host' => null, 28 'path' => null, 29 'port' => null, 30 'user' => null, 31 'query' => null, 32 'fragment' => null, 33 ]; 34 35 $this->assertEquals( 36 $out, 37 $result 38 ); 39 40 } 41 42 function parseData() { 43 44 return [ 45 [ 46 'http://example.org/hello?foo=bar#test', 47 [ 48 'scheme' => 'http', 49 'host' => 'example.org', 50 'path' => '/hello', 51 'port' => null, 52 'user' => null, 53 'query' => 'foo=bar', 54 'fragment' => 'test' 55 ] 56 ], 57 // See issue #6. parse_url corrupts strings like this, but only on 58 // macs. 59 [ 60 'http://example.org/有词法别名.zh', 61 [ 62 'scheme' => 'http', 63 'host' => 'example.org', 64 'path' => '/%E6%9C%89%E8%AF%8D%E6%B3%95%E5%88%AB%E5%90%8D.zh', 65 'port' => null, 66 'user' => null, 67 'query' => null, 68 'fragment' => null 69 ] 70 ], 71 [ 72 'ftp://user:password@ftp.example.org/', 73 [ 74 'scheme' => 'ftp', 75 'host' => 'ftp.example.org', 76 'path' => '/', 77 'port' => null, 78 'user' => 'user', 79 'pass' => 'password', 80 'query' => null, 81 'fragment' => null, 82 ] 83 ], 84 // See issue #9, parse_url doesn't like colons followed by numbers even 85 // though they are allowed since RFC 3986 86 [ 87 'http://example.org/hello:12?foo=bar#test', 88 [ 89 'scheme' => 'http', 90 'host' => 'example.org', 91 'path' => '/hello:12', 92 'port' => null, 93 'user' => null, 94 'query' => 'foo=bar', 95 'fragment' => 'test' 96 ] 97 ], 98 [ 99 '/path/to/colon:34', 100 [ 101 'scheme' => null, 102 'host' => null, 103 'path' => '/path/to/colon:34', 104 'port' => null, 105 'user' => null, 106 'query' => null, 107 'fragment' => null, 108 ] 109 ], 110 // File scheme 111 [ 112 'file:///foo/bar', 113 [ 114 'scheme' => 'file', 115 'host' => '', 116 'path' => '/foo/bar', 117 'port' => null, 118 'user' => null, 119 'query' => null, 120 'fragment' => null, 121 ] 122 ], 123 // Weird scheme with triple-slash. See Issue #11. 124 [ 125 'vfs:///somefile', 126 [ 127 'scheme' => 'vfs', 128 'host' => '', 129 'path' => '/somefile', 130 'port' => null, 131 'user' => null, 132 'query' => null, 133 'fragment' => null, 134 ] 135 ], 136 // Examples from RFC3986 137 [ 138 'ldap://[2001:db8::7]/c=GB?objectClass?one', 139 [ 140 'scheme' => 'ldap', 141 'host' => '[2001:db8::7]', 142 'path' => '/c=GB', 143 'port' => null, 144 'user' => null, 145 'query' => 'objectClass?one', 146 'fragment' => null, 147 ] 148 ], 149 [ 150 'news:comp.infosystems.www.servers.unix', 151 [ 152 'scheme' => 'news', 153 'host' => null, 154 'path' => 'comp.infosystems.www.servers.unix', 155 'port' => null, 156 'user' => null, 157 'query' => null, 158 'fragment' => null, 159 ] 160 ], 161 // Port 162 [ 163 'http://example.org:8080/', 164 [ 165 'scheme' => 'http', 166 'host' => 'example.org', 167 'path' => '/', 168 'port' => 8080, 169 'user' => null, 170 'query' => null, 171 'fragment' => null, 172 ] 173 ], 174 // Parial url 175 [ 176 '#foo', 177 [ 178 'scheme' => null, 179 'host' => null, 180 'path' => null, 181 'port' => null, 182 'user' => null, 183 'query' => null, 184 'fragment' => 'foo', 185 ] 186 187 ] 188 189 ]; 190 191 } 192 193} 194