aboutsummaryrefslogtreecommitdiffstats
path: root/tests/phpunit/includes/parser/LinkHolderArrayIntegrationTest.php
blob: 6500a3bfcde30f8be66cff9a38253c67a7679a99 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php

declare( strict_types = 1 );

namespace MediaWiki\Tests\Parser;

use MediaWiki\Language\ILanguageConverter;
use MediaWiki\MainConfigNames;
use MediaWiki\Parser\LinkHolderArray;
use MediaWiki\Parser\Parser;
use MediaWiki\Title\Title;
use MediaWikiLangTestCase;
use Wikimedia\TestingAccessWrapper;

/**
 * @covers \MediaWiki\Parser\LinkHolderArray
 */
class LinkHolderArrayIntegrationTest extends MediaWikiLangTestCase {

	/**
	 * @dataProvider provideIsBig
	 * @covers \MediaWiki\Parser\LinkHolderArray::isBig
	 *
	 * @param int $size
	 * @param int $global
	 * @param bool $expected
	 */
	public function testIsBig( int $size, int $global, bool $expected ) {
		$this->overrideConfigValue( MainConfigNames::LinkHolderBatchSize, $global );
		$linkHolderArray = new LinkHolderArray(
			$this->createMock( Parser::class ),
			$this->createMock( ILanguageConverter::class ),
			$this->createHookContainer()
		);
		/** @var LinkHolderArray $linkHolderArray */
		$linkHolderArray = TestingAccessWrapper::newFromObject( $linkHolderArray );
		$linkHolderArray->size = $size;

		$this->assertSame( $expected, $linkHolderArray->isBig() );
	}

	public static function provideIsBig() {
		yield [ 0, 0, false ];
		yield [ 0, 1, false ];
		yield [ 1, 0, true ];
		yield [ 1, 1, false ];
	}

	/**
	 * @dataProvider provideMakeHolder_withNsText
	 * @covers \MediaWiki\Parser\LinkHolderArray::makeHolder
	 *
	 * @param bool $isExternal
	 * @param string $expected
	 */
	public function testMakeHolder_withNsText(
		bool $isExternal,
		string $expected
	) {
		$link = new LinkHolderArray(
			$this->createMock( Parser::class ),
			$this->createMock( ILanguageConverter::class ),
			$this->createHookContainer()
		);
		/** @var LinkHolderArray $link */
		$link = TestingAccessWrapper::newFromObject( $link );
		$parser = $this->createMock( Parser::class );
		$parser->method( 'nextLinkID' )->willReturn( 9 );
		$link->parent = $parser;
		$title = $this->createMock( Title::class );
		$title->method( 'getPrefixedDBkey' )->willReturn( 'Talk:Dummy' );
		$title->method( 'getNamespace' )->willReturn( 1234 );
		$title->method( 'isExternal' )->willReturn( $isExternal );

		$this->assertSame( 0, $link->size );
		$result = $link->makeHolder(
			$title,
			'test1 text',
			'test2 trail',
			'test3 prefix'
		);
		$this->assertSame( $expected, $result );
		$this->assertSame( 1, $link->size );

		if ( $isExternal ) {
			$this->assertArrayEquals(
				[
					9 => [
						'title' => $title,
						'text' => 'test3 prefixtest1 texttest',
						'pdbk' => 'Talk:Dummy',
					],
				],
				$link->interwikis
			);
			$this->assertCount( 0, $link->internals );
		} else {
			$this->assertArrayEquals(
				[
					1234 => [
						9 => [
							'title' => $title,
							'text' => 'test3 prefixtest1 texttest',
							'pdbk' => 'Talk:Dummy',
						],
					],
				],
				$link->internals
			);
			$this->assertCount( 0, $link->interwikis );
		}
	}

	public static function provideMakeHolder_withNsText() {
		yield [
			false,
			'<!--LINK\'" 1234:9-->2 trail',
		];
		yield [
			true,
			'<!--IWLINK\'" 9-->2 trail',
		];
	}
}