File: HtmlHelperTest.php

package info (click to toggle)
mediawiki 1%3A1.39.13-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 320,416 kB
  • sloc: php: 815,516; javascript: 601,264; sql: 11,218; python: 4,863; xml: 3,080; sh: 990; ruby: 82; makefile: 78
file content (44 lines) | stat: -rw-r--r-- 1,577 bytes parent folder | download
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
<?php

namespace MediaWiki\Tests\Unit;

use MediaWiki\HtmlHelper;
use MediaWikiUnitTestCase;
use Wikimedia\RemexHtml\HTMLData;
use Wikimedia\RemexHtml\Serializer\SerializerNode;
use Wikimedia\RemexHtml\Tokenizer\PlainAttributes;

class HtmlHelperTest extends MediaWikiUnitTestCase {

	/**
	 * @covers \MediaWiki\HtmlHelper::modifyElements
	 */
	public function testModifyElements() {
		$shouldModifyCallback = static function ( SerializerNode $node ) {
			return $node->namespace === HTMLData::NS_HTML
				&& $node->name === 'a'
				&& isset( $node->attrs['href'] );
		};
		$modifyCallbackInPlace = static function ( SerializerNode $node ) {
			$node->attrs['href'] = 'https://tracker.org/' . $node->attrs['href'];
			return $node;
		};
		$input = '<p>Foo <a href="https://example.org/">bar</a> baz</p>';
		$expectedOutput = '<p>Foo <a href="https://tracker.org/https://example.org/">bar</a> baz</p>';

		$output = HtmlHelper::modifyElements( $input, $shouldModifyCallback, $modifyCallbackInPlace );
		$this->assertSame( $expectedOutput, $output );

		$modifyCallbackNew = static function ( SerializerNode $node ) {
			$href = 'https://tracker.org/' . $node->attrs['href'];
			$newNode = new SerializerNode( $node->id, $node->parentId, $node->namespace, $node->name,
				new PlainAttributes( [ 'href' => $href ] ), $node->void );
			$node->attrs['href'] = 'https://tracker.org/' . $node->attrs['href'];
			return $newNode;
		};

		$output = HtmlHelper::modifyElements( $input, $shouldModifyCallback, $modifyCallbackNew );
		$this->assertSame( $expectedOutput, $output );
	}

}