200 lines
5.1 KiB
PHP
200 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace SMW\Tests\Factbox;
|
|
|
|
use MediaWiki\Parser\ParserOutput;
|
|
use MediaWiki\Title\Title;
|
|
use ReflectionClass;
|
|
use SMW\Factbox\CheckMagicWords;
|
|
use SMW\Factbox\Factbox;
|
|
use SMW\ParserData;
|
|
use SMW\Services\ServicesFactory as ApplicationFactory;
|
|
use SMW\Tests\PHPUnitCompat;
|
|
use SMW\Tests\TestEnvironment;
|
|
|
|
/**
|
|
* @covers \SMW\Factbox\Factbox
|
|
* @group semantic-mediawiki
|
|
*
|
|
* @license GPL-2.0-or-later
|
|
* @since 1.9
|
|
*
|
|
* @author mwjames
|
|
*/
|
|
class FactboxMagicWordsTest extends \PHPUnit\Framework\TestCase {
|
|
|
|
use PHPUnitCompat;
|
|
|
|
private $testEnvironment;
|
|
private $displayTitleFinder;
|
|
|
|
protected function setUp(): void {
|
|
parent::setUp();
|
|
|
|
$this->testEnvironment = new TestEnvironment();
|
|
|
|
$store = $this->getMockBuilder( '\SMW\Store' )
|
|
->disableOriginalConstructor()
|
|
->getMockForAbstractClass();
|
|
|
|
$this->testEnvironment->registerObject( 'Store', $store );
|
|
|
|
$this->displayTitleFinder = $this->getMockBuilder( '\SMW\DisplayTitleFinder' )
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
}
|
|
|
|
protected function tearDown(): void {
|
|
$this->testEnvironment->tearDown();
|
|
parent::tearDown();
|
|
}
|
|
|
|
/**
|
|
* @dataProvider textDataProvider
|
|
*/
|
|
public function testMagicWordsFromParserOutputExtension( $text, array $expected ) {
|
|
$title = Title::newFromText( __METHOD__ );
|
|
$parserOutput = new ParserOutput();
|
|
|
|
$this->testEnvironment->withConfiguration(
|
|
[
|
|
'smwgNamespacesWithSemanticLinks' => [ $title->getNamespace() => true ],
|
|
'smwgParserFeatures' => SMW_PARSER_STRICT | SMW_PARSER_INL_ERROR
|
|
]
|
|
);
|
|
|
|
$parserData = new ParserData( $title, $parserOutput );
|
|
|
|
$inTextAnnotationParser = ApplicationFactory::getInstance()->newInTextAnnotationParser( $parserData );
|
|
$inTextAnnotationParser->parse( $text );
|
|
|
|
$this->assertEquals(
|
|
$expected['magicWords'],
|
|
$this->getMagicwords( $parserOutput )
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider textDataProvider
|
|
*/
|
|
// @codingStandardsIgnoreStart phpcs, ignore --sniffs=Generic.CodeAnalysis.UnusedFunctionParameter
|
|
public function testGetMagicWords( $text, array $expected ) { // @codingStandardsIgnoreEnd
|
|
|
|
$title = Title::newFromText( __METHOD__ );
|
|
|
|
$this->testEnvironment->withConfiguration( [
|
|
'smwgShowFactboxEdit' => SMW_FACTBOX_HIDDEN,
|
|
'smwgShowFactbox' => SMW_FACTBOX_HIDDEN
|
|
]
|
|
);
|
|
|
|
$parserOutput = $this->getMockBuilder( '\MediaWiki\Parser\ParserOutput' )
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$parserOutput->expects( $this->any() )
|
|
->method( 'getExtensionData' )
|
|
->willReturn( $expected['magicWords'] );
|
|
|
|
$store = $this->getMockBuilder( '\SMW\Store' )
|
|
->disableOriginalConstructor()
|
|
->getMockForAbstractClass();
|
|
|
|
$checkMagicWords = new CheckMagicWords(
|
|
[
|
|
'preview' => isset( $expected['preview'] ) && $expected['preview'],
|
|
'showFactboxEdit' => SMW_FACTBOX_HIDDEN,
|
|
'showFactbox' => SMW_FACTBOX_HIDDEN
|
|
]
|
|
);
|
|
|
|
$instance = new Factbox(
|
|
$store,
|
|
new ParserData( $title, $parserOutput ),
|
|
$this->displayTitleFinder
|
|
);
|
|
|
|
$instance->setCheckMagicWords(
|
|
$checkMagicWords
|
|
);
|
|
|
|
$reflector = new ReflectionClass( '\SMW\Factbox\Factbox' );
|
|
|
|
$magic = $reflector->getMethod( 'getMagicWords' );
|
|
$magic->setAccessible( true );
|
|
|
|
$result = $magic->invoke( $instance );
|
|
|
|
$this->assertIsInt( $result );
|
|
$this->assertEquals( $expected['constants'], $result );
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function textDataProvider() {
|
|
$provider = [];
|
|
|
|
// #0 __NOFACTBOX__, this test should not generate a factbox output
|
|
$provider[] = [
|
|
'Lorem ipsum dolor sit amet consectetuer auctor at quis' .
|
|
' [[Foo::dictumst cursus]]. Nisl sit condimentum Quisque facilisis' .
|
|
' Suspendisse [[Bar::tincidunt semper]] facilisi dolor Aenean. Ut' .
|
|
' __NOFACTBOX__ ',
|
|
[
|
|
'magicWords' => [ 'SMW_NOFACTBOX' ],
|
|
'constants' => SMW_FACTBOX_HIDDEN,
|
|
'textOutput' => ''
|
|
]
|
|
];
|
|
|
|
// #1 __SHOWFACTBOX__, this test should generate a factbox output
|
|
$provider[] = [
|
|
'Lorem ipsum dolor sit amet consectetuer auctor at quis' .
|
|
' [[Foo::dictumst cursus]]. Nisl sit condimentum Quisque facilisis' .
|
|
' Suspendisse [[Bar::tincidunt semper]] facilisi dolor Aenean. Ut' .
|
|
' __SHOWFACTBOX__',
|
|
[
|
|
'magicWords' => [ 'SMW_SHOWFACTBOX' ],
|
|
'constants' => SMW_FACTBOX_NONEMPTY,
|
|
'textOutput' => 'smwfactboxhead' // lazy check because we use assertContains
|
|
]
|
|
];
|
|
|
|
// #2 empty
|
|
$provider[] = [
|
|
'Lorem ipsum dolor sit amet consectetuer auctor at quis' .
|
|
' [[Foo::dictumst cursus]]. Nisl sit condimentum Quisque facilisis' .
|
|
' Suspendisse [[Bar::tincidunt semper]] facilisi dolor Aenean. Ut',
|
|
[
|
|
'magicWords' => null,
|
|
'constants' => SMW_FACTBOX_HIDDEN,
|
|
'textOutput' => ''
|
|
]
|
|
];
|
|
|
|
// #3 empty + preview option
|
|
$provider[] = [
|
|
'Lorem ipsum dolor sit amet consectetuer auctor at quis' .
|
|
' [[Foo::dictumst cursus]]. Nisl sit condimentum Quisque facilisis' .
|
|
' Suspendisse [[Bar::tincidunt semper]] facilisi dolor Aenean. Ut',
|
|
[
|
|
'magicWords' => null,
|
|
'preview' => true,
|
|
'constants' => SMW_FACTBOX_HIDDEN,
|
|
'textOutput' => ''
|
|
]
|
|
];
|
|
|
|
return $provider;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
protected function getMagicwords( $parserOutput ) {
|
|
return $parserOutput->getExtensionData( 'smwmagicwords' );
|
|
}
|
|
|
|
}
|