Add tests for ParserOptions
[lhc/web/wiklou.git] / tests / phpunit / includes / parser / ParserOptionsTest.php
1 <?php
2
3 use Wikimedia\TestingAccessWrapper;
4 use Wikimedia\ScopedCallback;
5
6 class ParserOptionsTest extends MediaWikiTestCase {
7
8 /**
9 * @dataProvider provideOptionsHash
10 * @param array $usedOptions Used options
11 * @param string $expect Expected value
12 * @param array $options Options to set
13 * @param array $globals Globals to set
14 */
15 public function testOptionsHash( $usedOptions, $expect, $options, $globals = [] ) {
16 global $wgHooks;
17
18 $globals += [
19 'wgRenderHashAppend' => '',
20 'wgHooks' => [],
21 ];
22 $globals['wgHooks'] += [
23 'PageRenderingHash' => [],
24 ] + $wgHooks;
25 $this->setMwGlobals( $globals );
26
27 $popt = new ParserOptions();
28 foreach ( $options as $setter => $value ) {
29 $popt->$setter( $value );
30 }
31 $this->assertSame( $expect, $popt->optionsHash( $usedOptions ) );
32 }
33
34 public static function provideOptionsHash() {
35 $used = [ 'wrapclass', 'editsection', 'printable' ];
36
37 return [
38 'Canonical options, nothing used' => [ [], '*!*!*!*!*!*', [] ],
39 'Canonical options, used some options' => [ $used, '*!*!*!*!*', [] ],
40 'Used some options, non-default values' => [
41 $used,
42 '*!*!*!*!*!printable=1!wrapclass=foobar',
43 [
44 'setWrapOutputClass' => 'foobar',
45 'setIsPrintable' => true,
46 ]
47 ],
48 'Canonical options, nothing used, but with hooks and $wgRenderHashAppend' => [
49 [],
50 '*!*!*!*!*!wgRenderHashAppend!*!onPageRenderingHash',
51 [],
52 [
53 'wgRenderHashAppend' => '!wgRenderHashAppend',
54 'wgHooks' => [ 'PageRenderingHash' => [ [ __CLASS__ . '::onPageRenderingHash' ] ] ],
55 ]
56 ],
57 ];
58 }
59
60 public static function onPageRenderingHash( &$confstr ) {
61 $confstr .= '!onPageRenderingHash';
62 }
63
64 public function testMatches() {
65 $popt1 = new ParserOptions();
66 $popt2 = new ParserOptions();
67 $this->assertTrue( $popt1->matches( $popt2 ) );
68
69 $popt1->enableLimitReport( true );
70 $popt2->enableLimitReport( false );
71 $this->assertTrue( $popt1->matches( $popt2 ) );
72
73 $popt2->setTidy( !$popt2->getTidy() );
74 $this->assertFalse( $popt1->matches( $popt2 ) );
75 }
76
77 }