Merge "oojs update scripts: Use quotes to prevent globbing and word splitting"
[lhc/web/wiklou.git] / tests / phpunit / includes / GlobalFunctions / wfAssembleUrlTest.php
1 <?php
2 /**
3 * @group GlobalFunctions
4 * @covers ::wfAssembleUrl
5 */
6 class WfAssembleUrlTest extends MediaWikiTestCase {
7 /**
8 * @dataProvider provideURLParts
9 */
10 public function testWfAssembleUrl( $parts, $output ) {
11 $partsDump = print_r( $parts, true );
12 $this->assertEquals(
13 $output,
14 wfAssembleUrl( $parts ),
15 "Testing $partsDump assembles to $output"
16 );
17 }
18
19 /**
20 * Provider of URL parts for testing wfAssembleUrl()
21 *
22 * @return array
23 */
24 public static function provideURLParts() {
25 $schemes = array(
26 '' => array(),
27 '//' => array(
28 'delimiter' => '//',
29 ),
30 'http://' => array(
31 'scheme' => 'http',
32 'delimiter' => '://',
33 ),
34 );
35
36 $hosts = array(
37 '' => array(),
38 'example.com' => array(
39 'host' => 'example.com',
40 ),
41 'example.com:123' => array(
42 'host' => 'example.com',
43 'port' => 123,
44 ),
45 'id@example.com' => array(
46 'user' => 'id',
47 'host' => 'example.com',
48 ),
49 'id@example.com:123' => array(
50 'user' => 'id',
51 'host' => 'example.com',
52 'port' => 123,
53 ),
54 'id:key@example.com' => array(
55 'user' => 'id',
56 'pass' => 'key',
57 'host' => 'example.com',
58 ),
59 'id:key@example.com:123' => array(
60 'user' => 'id',
61 'pass' => 'key',
62 'host' => 'example.com',
63 'port' => 123,
64 ),
65 );
66
67 $cases = array();
68 foreach ( $schemes as $scheme => $schemeParts ) {
69 foreach ( $hosts as $host => $hostParts ) {
70 foreach ( array( '', '/path' ) as $path ) {
71 foreach ( array( '', 'query' ) as $query ) {
72 foreach ( array( '', 'fragment' ) as $fragment ) {
73 $parts = array_merge(
74 $schemeParts,
75 $hostParts
76 );
77 $url = $scheme .
78 $host .
79 $path;
80
81 if ( $path ) {
82 $parts['path'] = $path;
83 }
84 if ( $query ) {
85 $parts['query'] = $query;
86 $url .= '?' . $query;
87 }
88 if ( $fragment ) {
89 $parts['fragment'] = $fragment;
90 $url .= '#' . $fragment;
91 }
92
93 $cases[] = array(
94 $parts,
95 $url,
96 );
97 }
98 }
99 }
100 }
101 }
102
103 $complexURL = 'http://id:key@example.org:321' .
104 '/over/there?name=ferret&foo=bar#nose';
105 $cases[] = array(
106 wfParseUrl( $complexURL ),
107 $complexURL,
108 );
109
110 return $cases;
111 }
112 }