PHPUnit: Add Database tags
[lhc/web/wiklou.git] / tests / phpunit / includes / title / MediaWikiPageLinkRendererTest.php
1 <?php
2 /**
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 * http://www.gnu.org/copyleft/gpl.html
17 *
18 * @file
19 * @license GPL 2+
20 * @author Daniel Kinzler
21 */
22
23 /**
24 * @covers MediaWikiPageLinkRenderer
25 *
26 * @group Title
27 * @group Database
28 */
29 class MediaWikiPageLinkRendererTest extends MediaWikiTestCase {
30
31 protected function setUp() {
32 parent::setUp();
33
34 $this->setMwGlobals( array(
35 'wgContLang' => Language::factory( 'en' ),
36 ) );
37 }
38
39 /**
40 * Returns a mock GenderCache that will return "female" always.
41 *
42 * @return GenderCache
43 */
44 private function getGenderCache() {
45 $genderCache = $this->getMockBuilder( 'GenderCache' )
46 ->disableOriginalConstructor()
47 ->getMock();
48
49 $genderCache->expects( $this->any() )
50 ->method( 'getGenderOf' )
51 ->will( $this->returnValue( 'female' ) );
52
53 return $genderCache;
54 }
55
56 public function provideGetPageUrl() {
57 return array(
58 array(
59 new TitleValue( NS_MAIN, 'Foo_Bar' ),
60 array(),
61 '/Foo_Bar'
62 ),
63 array(
64 new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
65 array( 'foo' => 'bar' ),
66 '/User:Hansi_Maier?foo=bar#stuff'
67 ),
68 );
69 }
70
71 /**
72 * @dataProvider provideGetPageUrl
73 */
74 public function testGetPageUrl( TitleValue $title, $params, $url ) {
75 // NOTE: was of Feb 2014, MediaWikiPageLinkRenderer *ignores* the
76 // WikitextTitleFormatter we pass here, and relies on the Linker
77 // class for generating the link! This may break the test e.g.
78 // of Linker uses a different language for the namespace names.
79
80 $lang = Language::factory( 'en' );
81
82 $formatter = new MediaWikiTitleCodec( $lang, $this->getGenderCache() );
83 $renderer = new MediaWikiPageLinkRenderer( $formatter, '/' );
84 $actual = $renderer->getPageUrl( $title, $params );
85
86 $this->assertEquals( $url, $actual );
87 }
88
89 public function provideRenderHtmlLink() {
90 return array(
91 array(
92 new TitleValue( NS_MAIN, 'Foo_Bar' ),
93 'Foo Bar',
94 '!<a .*href=".*?Foo_Bar.*?".*?>Foo Bar</a>!'
95 ),
96 array(
97 //NOTE: Linker doesn't include fragments in "broken" links
98 //NOTE: once this no longer uses Linker, we will get "2" instead of "User" for the namespace.
99 new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
100 'Hansi Maier\'s Stuff',
101 '!<a .*href=".*?User:Hansi_Maier.*?>Hansi Maier\'s Stuff</a>!'
102 ),
103 array(
104 //NOTE: Linker doesn't include fragments in "broken" links
105 //NOTE: once this no longer uses Linker, we will get "2" instead of "User" for the namespace.
106 new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
107 null,
108 '!<a .*href=".*?User:Hansi_Maier.*?>User:Hansi Maier#stuff</a>!'
109 ),
110 );
111 }
112
113 /**
114 * @dataProvider provideRenderHtmlLink
115 */
116 public function testRenderHtmlLink( TitleValue $title, $text, $pattern ) {
117 // NOTE: was of Feb 2014, MediaWikiPageLinkRenderer *ignores* the
118 // WikitextTitleFormatter we pass here, and relies on the Linker
119 // class for generating the link! This may break the test e.g.
120 // of Linker uses a different language for the namespace names.
121
122 $lang = Language::factory( 'en' );
123
124 $formatter = new MediaWikiTitleCodec( $lang, $this->getGenderCache() );
125 $renderer = new MediaWikiPageLinkRenderer( $formatter );
126 $actual = $renderer->renderHtmlLink( $title, $text );
127
128 $this->assertRegExp( $pattern, $actual );
129 }
130
131 public function provideRenderWikitextLink() {
132 return array(
133 array(
134 new TitleValue( NS_MAIN, 'Foo_Bar' ),
135 'Foo Bar',
136 '[[:0:Foo Bar|Foo Bar]]'
137 ),
138 array(
139 new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
140 'Hansi Maier\'s Stuff',
141 '[[:2:Hansi Maier#stuff|Hansi Maier&#39;s Stuff]]'
142 ),
143 array(
144 new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
145 null,
146 '[[:2:Hansi Maier#stuff|2:Hansi Maier#stuff]]'
147 ),
148 );
149 }
150
151 /**
152 * @dataProvider provideRenderWikitextLink
153 */
154 public function testRenderWikitextLink( TitleValue $title, $text, $expected ) {
155 $formatter = $this->getMock( 'TitleFormatter' );
156 $formatter->expects( $this->any() )
157 ->method( 'getFullText' )
158 ->will( $this->returnCallback(
159 function ( TitleValue $title ) {
160 return str_replace( '_', ' ', "$title" );
161 }
162 ));
163
164 $renderer = new MediaWikiPageLinkRenderer( $formatter, '/' );
165 $actual = $renderer->renderWikitextLink( $title, $text );
166
167 $this->assertEquals( $expected, $actual );
168 }
169 }