MediaWiki  1.23.1
MediaWikiPageLinkRendererTest.php
Go to the documentation of this file.
1 <?php
28 class MediaWikiPageLinkRendererTest extends MediaWikiTestCase {
29 
35  private function getGenderCache() {
36  $genderCache = $this->getMockBuilder( 'GenderCache' )
37  ->disableOriginalConstructor()
38  ->getMock();
39 
40  $genderCache->expects( $this->any() )
41  ->method( 'getGenderOf' )
42  ->will( $this->returnValue( 'female' ) );
43 
44  return $genderCache;
45  }
46 
47  public function provideGetPageUrl() {
48  return array(
49  array(
50  new TitleValue( NS_MAIN, 'Foo_Bar' ),
51  array(),
52  '/Foo_Bar'
53  ),
54  array(
55  new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
56  array( 'foo' => 'bar' ),
57  '/User:Hansi_Maier?foo=bar#stuff'
58  ),
59  );
60  }
61 
65  public function testGetPageUrl( TitleValue $title, $params, $url ) {
66  // NOTE: was of Feb 2014, MediaWikiPageLinkRenderer *ignores* the
67  // WikitextTitleFormatter we pass here, and relies on the Linker
68  // class for generating the link! This may break the test e.g.
69  // of Linker uses a different language for the namespace names.
70 
71  $lang = Language::factory( 'en' );
72 
73  $formatter = new MediaWikiTitleCodec( $lang, $this->getGenderCache() );
74  $renderer = new MediaWikiPageLinkRenderer( $formatter, '/' );
75  $actual = $renderer->getPageUrl( $title, $params );
76 
77  $this->assertEquals( $url, $actual );
78  }
79 
80  public function provideRenderHtmlLink() {
81  return array(
82  array(
83  new TitleValue( NS_MAIN, 'Foo_Bar' ),
84  'Foo Bar',
85  '!<a .*href=".*?Foo_Bar.*?".*?>Foo Bar</a>!'
86  ),
87  array(
88  //NOTE: Linker doesn't include fragments in "broken" links
89  //NOTE: once this no longer uses Linker, we will get "2" instead of "User" for the namespace.
90  new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
91  'Hansi Maier\'s Stuff',
92  '!<a .*href=".*?User:Hansi_Maier.*?>Hansi Maier\'s Stuff</a>!'
93  ),
94  array(
95  //NOTE: Linker doesn't include fragments in "broken" links
96  //NOTE: once this no longer uses Linker, we will get "2" instead of "User" for the namespace.
97  new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
98  null,
99  '!<a .*href=".*?User:Hansi_Maier.*?>User:Hansi Maier#stuff</a>!'
100  ),
101  );
102  }
103 
107  public function testRenderHtmlLink( TitleValue $title, $text, $pattern ) {
108  // NOTE: was of Feb 2014, MediaWikiPageLinkRenderer *ignores* the
109  // WikitextTitleFormatter we pass here, and relies on the Linker
110  // class for generating the link! This may break the test e.g.
111  // of Linker uses a different language for the namespace names.
112 
113  $lang = Language::factory( 'en' );
114 
115  $formatter = new MediaWikiTitleCodec( $lang, $this->getGenderCache() );
116  $renderer = new MediaWikiPageLinkRenderer( $formatter );
117  $actual = $renderer->renderHtmlLink( $title, $text );
118 
119  $this->assertRegExp( $pattern, $actual );
120  }
121 
122  public function provideRenderWikitextLink() {
123  return array(
124  array(
125  new TitleValue( NS_MAIN, 'Foo_Bar' ),
126  'Foo Bar',
127  '[[:0:Foo Bar|Foo Bar]]'
128  ),
129  array(
130  new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
131  'Hansi Maier\'s Stuff',
132  '[[:2:Hansi Maier#stuff|Hansi Maier&#39;s Stuff]]'
133  ),
134  array(
135  new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
136  null,
137  '[[:2:Hansi Maier#stuff|2:Hansi Maier#stuff]]'
138  ),
139  );
140  }
141 
145  public function testRenderWikitextLink( TitleValue $title, $text, $expected ) {
146  $formatter = $this->getMock( 'TitleFormatter' );
147  $formatter->expects( $this->any() )
148  ->method( 'getFullText' )
149  ->will( $this->returnCallback(
150  function( TitleValue $title ) {
151  return str_replace( '_', ' ', "$title" );
152  }
153  ));
154 
155  $renderer = new MediaWikiPageLinkRenderer( $formatter, '/' );
156  $actual = $renderer->renderWikitextLink( $title, $text );
157 
158  $this->assertEquals( $expected, $actual );
159  }
160 }
MediaWikiTitleCodec
A codec for MediaWiki page titles.
Definition: MediaWikiTitleCodec.php:35
php
skin txt MediaWiki includes four core it has been set as the default in MediaWiki since the replacing Monobook it had been been the default skin since before being replaced by Vector largely rewritten in while keeping its appearance Several legacy skins were removed in the as the burden of supporting them became too heavy to bear Those in etc for skin dependent CSS etc for skin dependent JavaScript These can also be customised on a per user by etc This feature has led to a wide variety of user styles becoming that gallery is a good place to ending in php
Definition: skin.txt:62
$params
$params
Definition: styleTest.css.php:40
NS_MAIN
const NS_MAIN
Definition: Defines.php:79
MediaWikiTestCase
Definition: MediaWikiTestCase.php:6
array
the array() calling protocol came about after MediaWiki 1.4rc1.
List of Api Query prop modules.
$title
presenting them properly to the user as errors is done by the caller $title
Definition: hooks.txt:1324
NS_USER
const NS_USER
Definition: Defines.php:81
Language\factory
static factory( $code)
Get a cached or new language object for a given language code.
Definition: Language.php:184
MediaWikiPageLinkRenderer
A service for generating links from page titles.
Definition: MediaWikiPageLinkRenderer.php:30
TitleValue
Represents a page (or page fragment) title within MediaWiki.
Definition: TitleValue.php:36