4 * @group ContentHandler
6 class WikitextContentHandlerTest
extends MediaWikiLangTestCase
{
12 protected function setUp() {
15 $this->handler
= ContentHandler
::getForModelID( CONTENT_MODEL_WIKITEXT
);
19 * @covers WikitextContentHandler::serializeContent
21 public function testSerializeContent() {
22 $content = new WikitextContent( 'hello world' );
24 $this->assertEquals( 'hello world', $this->handler
->serializeContent( $content ) );
27 $this->handler
->serializeContent( $content, CONTENT_FORMAT_WIKITEXT
)
31 $this->handler
->serializeContent( $content, 'dummy/foo' );
32 $this->fail( "serializeContent() should have failed on unknown format" );
33 } catch ( MWException
$e ) {
39 * @covers WikitextContentHandler::unserializeContent
41 public function testUnserializeContent() {
42 $content = $this->handler
->unserializeContent( 'hello world' );
43 $this->assertEquals( 'hello world', $content->getNativeData() );
45 $content = $this->handler
->unserializeContent( 'hello world', CONTENT_FORMAT_WIKITEXT
);
46 $this->assertEquals( 'hello world', $content->getNativeData() );
49 $this->handler
->unserializeContent( 'hello world', 'dummy/foo' );
50 $this->fail( "unserializeContent() should have failed on unknown format" );
51 } catch ( MWException
$e ) {
57 * @covers WikitextContentHandler::makeEmptyContent
59 public function testMakeEmptyContent() {
60 $content = $this->handler
->makeEmptyContent();
62 $this->assertTrue( $content->isEmpty() );
63 $this->assertEquals( '', $content->getNativeData() );
66 public static function dataIsSupportedFormat() {
69 array( CONTENT_FORMAT_WIKITEXT
, true ),
70 array( 99887766, false ),
75 * @dataProvider provideMakeRedirectContent
76 * @param Title|string $title Title object or string for Title::newFromText()
77 * @param string $expected Serialized form of the content object built
78 * @covers WikitextContentHandler::makeRedirectContent
80 public function testMakeRedirectContent( $title, $expected ) {
82 $wgContLang->resetNamespaces();
84 MagicWord
::clearCache();
86 if ( is_string( $title ) ) {
87 $title = Title
::newFromText( $title );
89 $content = $this->handler
->makeRedirectContent( $title );
90 $this->assertEquals( $expected, $content->serialize() );
93 public static function provideMakeRedirectContent() {
95 array( 'Hello', '#REDIRECT [[Hello]]' ),
96 array( 'Template:Hello', '#REDIRECT [[Template:Hello]]' ),
97 array( 'Hello#section', '#REDIRECT [[Hello#section]]' ),
98 array( 'user:john_doe#section', '#REDIRECT [[User:John doe#section]]' ),
99 array( 'MEDIAWIKI:FOOBAR', '#REDIRECT [[MediaWiki:FOOBAR]]' ),
100 array( 'Category:Foo', '#REDIRECT [[:Category:Foo]]' ),
101 array( Title
::makeTitle( NS_MAIN
, 'en:Foo' ), '#REDIRECT [[en:Foo]]' ),
102 array( Title
::makeTitle( NS_MAIN
, 'Foo', '', 'en' ), '#REDIRECT [[:en:Foo]]' ),
104 Title
::makeTitle( NS_MAIN
, 'Bar', 'fragment', 'google' ),
105 '#REDIRECT [[google:Bar#fragment]]'
111 * @dataProvider dataIsSupportedFormat
112 * @covers WikitextContentHandler::isSupportedFormat
114 public function testIsSupportedFormat( $format, $supported ) {
115 $this->assertEquals( $supported, $this->handler
->isSupportedFormat( $format ) );
118 public static function dataMerge3() {
138 array( "first paragraph
151 * @dataProvider dataMerge3
152 * @covers WikitextContentHandler::merge3
154 public function testMerge3( $old, $mine, $yours, $expected ) {
155 $this->checkHasDiff3();
158 $oldContent = new WikitextContent( $old );
159 $myContent = new WikitextContent( $mine );
160 $yourContent = new WikitextContent( $yours );
162 $merged = $this->handler
->merge3( $oldContent, $myContent, $yourContent );
164 $this->assertEquals( $expected, $merged ?
$merged->getNativeData() : $merged );
167 public static function dataGetAutosummary() {
170 'Hello there, world!',
173 '/^Redirected page .*Foo/'
180 '/^Created page .*Hello/'
184 'Hello there, world!',
191 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
192 eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
193 voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
194 clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.',
197 '/^Replaced .*Hello/'
210 * @dataProvider dataGetAutosummary
211 * @covers WikitextContentHandler::getAutosummary
213 public function testGetAutosummary( $old, $new, $flags, $expected ) {
214 $oldContent = is_null( $old ) ?
null : new WikitextContent( $old );
215 $newContent = is_null( $new ) ?
null : new WikitextContent( $new );
217 $summary = $this->handler
->getAutosummary( $oldContent, $newContent, $flags );
220 (bool)preg_match( $expected, $summary ),
221 "Autosummary didn't match expected pattern $expected: $summary"
226 * @todo Text case requires database, should be done by a test class in the Database group
229 public function testGetAutoDeleteReason( Title $title, &$hasHistory ) {}
233 * @todo Text case requires database, should be done by a test class in the Database group
236 public function testGetUndoContent( Revision $current, Revision $undo,
237 Revision $undoafter = null