mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/DiscussionTools
synced 2024-11-24 08:23:52 +00:00
PHP tests: Move some test utils to a parent class
Change-Id: I6ae5aa85f8aaa02e1b9323820a841c06c5d62b64
This commit is contained in:
parent
a000b8c7b1
commit
745101c02b
|
@ -229,6 +229,9 @@
|
||||||
"DiscussionToolsData": "includes/DiscussionToolsData.php",
|
"DiscussionToolsData": "includes/DiscussionToolsData.php",
|
||||||
"DiscussionToolsHooks": "includes/DiscussionToolsHooks.php"
|
"DiscussionToolsHooks": "includes/DiscussionToolsHooks.php"
|
||||||
},
|
},
|
||||||
|
"TestAutoloadClasses": {
|
||||||
|
"DiscussionToolsTestCase": "tests/phpunit/DiscussionToolsTestCase.php"
|
||||||
|
},
|
||||||
"Hooks": {
|
"Hooks": {
|
||||||
"BeforePageDisplay": "DiscussionToolsHooks::onBeforePageDisplay",
|
"BeforePageDisplay": "DiscussionToolsHooks::onBeforePageDisplay",
|
||||||
"ResourceLoaderGetConfigVars": "DiscussionToolsHooks::onResourceLoaderGetConfigVars",
|
"ResourceLoaderGetConfigVars": "DiscussionToolsHooks::onResourceLoaderGetConfigVars",
|
||||||
|
|
|
@ -1,21 +1,11 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use MediaWiki\MediaWikiServices;
|
|
||||||
use Wikimedia\TestingAccessWrapper;
|
use Wikimedia\TestingAccessWrapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @coversDefaultClass DiscussionToolsCommentParser
|
* @coversDefaultClass DiscussionToolsCommentParser
|
||||||
*/
|
*/
|
||||||
class DiscussionToolsCommentParserTest extends MediaWikiTestCase {
|
class DiscussionToolsCommentParserTest extends DiscussionToolsTestCase {
|
||||||
|
|
||||||
private static function getJson( $relativePath ) {
|
|
||||||
$json = json_decode(
|
|
||||||
// TODO: Move cases out of /qunit
|
|
||||||
file_get_contents( __DIR__ . '/../qunit/' . $relativePath ),
|
|
||||||
true
|
|
||||||
);
|
|
||||||
return $json;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function getOffsetPath( $ancestor, $node, $nodeOffset ) {
|
private static function getOffsetPath( $ancestor, $node, $nodeOffset ) {
|
||||||
$path = [ $nodeOffset ];
|
$path = [ $nodeOffset ];
|
||||||
|
@ -173,36 +163,17 @@ class DiscussionToolsCommentParserTest extends MediaWikiTestCase {
|
||||||
* @covers ::groupThreads
|
* @covers ::groupThreads
|
||||||
*/
|
*/
|
||||||
public function testGetComments( $name, $dom, $expected, $config, $data ) {
|
public function testGetComments( $name, $dom, $expected, $config, $data ) {
|
||||||
$dom = file_get_contents( __DIR__ . '/../qunit/' . $dom );
|
$dom = self::getHtml( $dom );
|
||||||
$expected = self::getJson( $expected );
|
$expected = self::getJson( $expected );
|
||||||
$config = self::getJson( $config );
|
$config = self::getJson( $config );
|
||||||
$data = self::getJson( $data );
|
$data = self::getJson( $data );
|
||||||
|
|
||||||
// Remove all but the body tags from full Parsoid docs
|
$this->setupEnv( $config, $data );
|
||||||
if ( strpos( $dom, '<body' ) !== false ) {
|
$parserOrig = self::createParser( $data );
|
||||||
preg_match( '`<body[^>]*>(.*)</body>`s', $dom, $match );
|
|
||||||
$dom = $match[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->setMwGlobals( $config );
|
|
||||||
$this->setMwGlobals( [
|
|
||||||
'wgArticlePath' => $config['wgArticlePath'],
|
|
||||||
'wgNamespaceAliases' => $config['wgNamespaceIds'],
|
|
||||||
'wgLocaltimezone' => $data['localTimezone']
|
|
||||||
] );
|
|
||||||
$this->setUserLang( $config['wgContentLang'] );
|
|
||||||
$this->setContentLang( $config['wgContentLang'] );
|
|
||||||
|
|
||||||
$services = MediaWikiServices::getInstance();
|
|
||||||
$parserOrig = new DiscussionToolsCommentParser(
|
|
||||||
$services->getContentLanguage(),
|
|
||||||
$services->getMainConfig(),
|
|
||||||
$data
|
|
||||||
);
|
|
||||||
$parser = TestingAccessWrapper::newFromObject( $parserOrig );
|
$parser = TestingAccessWrapper::newFromObject( $parserOrig );
|
||||||
|
|
||||||
$doc = new DOMDocument();
|
$doc = self::createDocument( $dom );
|
||||||
$doc->loadHTML( '<?xml encoding="utf-8" ?>' . $dom, LIBXML_NOERROR );
|
|
||||||
$container = $doc->documentElement->childNodes[0];
|
$container = $doc->documentElement->childNodes[0];
|
||||||
|
|
||||||
$comments = $parserOrig->getComments( $container );
|
$comments = $parserOrig->getComments( $container );
|
||||||
|
|
89
tests/phpunit/DiscussionToolsTestCase.php
Normal file
89
tests/phpunit/DiscussionToolsTestCase.php
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use MediaWiki\MediaWikiServices;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @coversDefaultClass DiscussionToolsCommentModifier
|
||||||
|
*/
|
||||||
|
class DiscussionToolsTestCase extends MediaWikiTestCase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a DOMDocument from a string
|
||||||
|
*
|
||||||
|
* @param string $html
|
||||||
|
* @return DOMDocument
|
||||||
|
*/
|
||||||
|
protected static function createDocument( string $html ) : DOMDocument {
|
||||||
|
$doc = new DOMDocument();
|
||||||
|
$doc->preserveWhiteSpace = false;
|
||||||
|
$doc->loadHTML( '<?xml encoding="utf-8" ?>' . $html, LIBXML_NOERROR );
|
||||||
|
return $doc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get parsed JSON from path
|
||||||
|
*
|
||||||
|
* @param string $relativePath
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected static function getJson( string $relativePath ) : array {
|
||||||
|
$json = json_decode(
|
||||||
|
// TODO: Move cases out of /qunit
|
||||||
|
file_get_contents( __DIR__ . '/../qunit/' . $relativePath ),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
return $json;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get HTML from path
|
||||||
|
*
|
||||||
|
* @param string $relativePath
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected static function getHtml( string $relativePath ) : string {
|
||||||
|
// TODO: Move cases out of /qunit
|
||||||
|
$html = file_get_contents( __DIR__ . '/../qunit/' . $relativePath );
|
||||||
|
|
||||||
|
// Remove all but the body tags from full Parsoid docs
|
||||||
|
if ( strpos( $html, '<body' ) !== false ) {
|
||||||
|
preg_match( '`<body[^>]*>(.*)</body>`s', $html, $match );
|
||||||
|
$html = $match[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a comment pareser
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
|
* @return DiscussionToolsCommentParser
|
||||||
|
*/
|
||||||
|
protected static function createParser( array $data ) : DiscussionToolsCommentParser {
|
||||||
|
$services = MediaWikiServices::getInstance();
|
||||||
|
return new DiscussionToolsCommentParser(
|
||||||
|
$services->getContentLanguage(),
|
||||||
|
$services->getMainConfig(),
|
||||||
|
$data
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup the MW environment
|
||||||
|
*
|
||||||
|
* @param array $config
|
||||||
|
* @param array $data
|
||||||
|
*/
|
||||||
|
protected function setupEnv( array $config, array $data ) : void {
|
||||||
|
$this->setMwGlobals( $config );
|
||||||
|
$this->setMwGlobals( [
|
||||||
|
'wgArticlePath' => $config['wgArticlePath'],
|
||||||
|
'wgNamespaceAliases' => $config['wgNamespaceIds'],
|
||||||
|
// TODO: Move this to $config
|
||||||
|
'wgLocaltimezone' => $data['localTimezone']
|
||||||
|
] );
|
||||||
|
$this->setUserLang( $config['wgContentLang'] );
|
||||||
|
$this->setContentLang( $config['wgContentLang'] );
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue