wiki.techinc.nl/tests/phpunit/includes/content/JavascriptContentTest.php
Timo Tijhof a4aef7d495 Fix warnings and enforce conventions in ContentHandler tests.
Syntax:
* Call parent setUp from setUp.
* Set required globals for the test inside the test class instead
  of assuming the default settings.
* Data providers are called statically and outside setUp/tearDown
  ("public static function")
* Test function names should be prefixed with "test"
  ("testIsRedirect")
* Marked 2 functions as unused. JavascriptContentTest has 2 data
  providers for tests that don't exist in it (nor in TextContentText)
  but do exist in WikitextContentTest.

Style:
* Single quotes
* Remove odd comment "# =====" lines
* Consistent tree wrapping with arrays.
  array(
      array(
          .. ) );
  array(
      array(
          ..
      )
  );
  Some were closing on the previous line instead.
  Made it consistent now.
* Remove odd indentation to make nested arrays line up:
  array( 'foo' => array(  'bar' => true,
                          'baz' => array() ) )
  array( 'foo' => array(
      'bar' => true,
      'baz' => array()
  ) )

  We don't do this kind of indentation because it is fragile
  and becomes outdates when any of the earlier keys ("foo")
  change. Converted to a regular tree instead.

  Also triggered git warnings for mixing spaces with tabs, which
  is almost always an detector for this style.

* Not using @annotations in inline comments, reserved (and only
  parsed/meaningful) for block comments.

Follows-up 8b568be5e2

Change-Id: Ic55d539b9a58f448b550bcd98894d389764e0694
2012-10-25 22:37:32 +02:00

273 lines
5.7 KiB
PHP

<?php
/**
* @group ContentHandler
* @group Database
* ^--- needed, because we do need the database to test link updates
*/
class JavascriptContentTest extends TextContentTest {
public function newContent( $text ) {
return new JavascriptContent( $text );
}
public static function dataGetParserOutput() {
return array(
array(
'MediaWiki:Test.js',
null,
"hello <world>\n",
"<pre class=\"mw-code mw-js\" dir=\"ltr\">\nhello &lt;world&gt;\n\n</pre>"
),
array(
'MediaWiki:Test.js',
null,
"hello(); // [[world]]\n",
"<pre class=\"mw-code mw-js\" dir=\"ltr\">\nhello(); // [[world]]\n\n</pre>",
array(
'Links' => array(
array( 'World' => 0 )
)
)
),
// TODO: more...?
);
}
// XXX: Unused function
public static function dataGetSection() {
return array(
array( WikitextContentTest::$sections,
'0',
null
),
array( WikitextContentTest::$sections,
'2',
null
),
array( WikitextContentTest::$sections,
'8',
null
),
);
}
// XXX: Unused function
public static function dataReplaceSection() {
return array(
array( WikitextContentTest::$sections,
'0',
'No more',
null,
null
),
array( WikitextContentTest::$sections,
'',
'No more',
null,
null
),
array( WikitextContentTest::$sections,
'2',
"== TEST ==\nmore fun",
null,
null
),
array( WikitextContentTest::$sections,
'8',
'No more',
null,
null
),
array( WikitextContentTest::$sections,
'new',
'No more',
'New',
null
),
);
}
public function testAddSectionHeader( ) {
$content = $this->newContent( 'hello world' );
$c = $content->addSectionHeader( 'test' );
$this->assertTrue( $content->equals( $c ) );
}
// XXX: currently, preSaveTransform is applied to scripts. this may change or become optional.
public static function dataPreSaveTransform() {
return array(
array( 'hello this is ~~~',
"hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
),
array( 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
),
array( " Foo \n ",
" Foo",
),
);
}
public static function dataPreloadTransform() {
return array(
array( 'hello this is ~~~',
'hello this is ~~~',
),
array( 'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
),
);
}
public static function dataGetRedirectTarget() {
return array(
array( '#REDIRECT [[Test]]',
null,
),
array( '#REDIRECT Test',
null,
),
array( '* #REDIRECT [[Test]]',
null,
),
);
}
/**
* @todo: test needs database!
*/
/*
public function getRedirectChain() {
$text = $this->getNativeData();
return Title::newFromRedirectArray( $text );
}
*/
/**
* @todo: test needs database!
*/
/*
public function getUltimateRedirectTarget() {
$text = $this->getNativeData();
return Title::newFromRedirectRecurse( $text );
}
*/
public static function dataIsCountable() {
return array(
array( '',
null,
'any',
true
),
array( 'Foo',
null,
'any',
true
),
array( 'Foo',
null,
'comma',
false
),
array( 'Foo, bar',
null,
'comma',
false
),
array( 'Foo',
null,
'link',
false
),
array( 'Foo [[bar]]',
null,
'link',
false
),
array( 'Foo',
true,
'link',
false
),
array( 'Foo [[bar]]',
false,
'link',
false
),
array( '#REDIRECT [[bar]]',
true,
'any',
true
),
array( '#REDIRECT [[bar]]',
true,
'comma',
false
),
array( '#REDIRECT [[bar]]',
true,
'link',
false
),
);
}
public static function dataGetTextForSummary() {
return array(
array( "hello\nworld.",
16,
'hello world.',
),
array( 'hello world.',
8,
'hello...',
),
array( '[[hello world]].',
8,
'[[hel...',
),
);
}
public function testMatchMagicWord( ) {
$mw = MagicWord::get( "staticredirect" );
$content = $this->newContent( "#REDIRECT [[FOO]]\n__STATICREDIRECT__" );
$this->assertFalse( $content->matchMagicWord( $mw ), "should not have matched magic word, since it's not wikitext" );
}
public function testUpdateRedirect( ) {
$target = Title::newFromText( "testUpdateRedirect_target" );
$content = $this->newContent( "#REDIRECT [[Someplace]]" );
$newContent = $content->updateRedirect( $target );
$this->assertTrue( $content->equals( $newContent ), "content should be unchanged since it's not wikitext" );
}
public function testGetModel() {
$content = $this->newContent( "hello world." );
$this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getModel() );
}
public function testGetContentHandler() {
$content = $this->newContent( "hello world." );
$this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getContentHandler()->getModelID() );
}
public static function dataEquals( ) {
return array(
array( new JavascriptContent( "hallo" ), null, false ),
array( new JavascriptContent( "hallo" ), new JavascriptContent( "hallo" ), true ),
array( new JavascriptContent( "hallo" ), new CssContent( "hallo" ), false ),
array( new JavascriptContent( "hallo" ), new JavascriptContent( "HALLO" ), false ),
);
}
}