summaryrefslogtreecommitdiff
blob: 93f35c8dc3237f7008f6f4a658ca08e4da4a1b51 (plain)
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
<?php
declare( strict_types = 1 );

namespace MediaWiki\Extension\Translate\PageTranslation;

use InvalidArgumentException;
use Language;
use MediaWikiUnitTestCase;

/**
 * @author Niklas Laxström
 * @license GPL-2.0-or-later
 * @covers \MediaWiki\Extension\Translate\PageTranslation\ParserOutput
 */
class ParserOutputTest extends MediaWikiUnitTestCase {
	public function testConstructor() {
		$actual = new ParserOutput( '', [], [] );
		$this->assertInstanceOf( ParserOutput::class, $actual );
	}

	public function testConstructorFail() {
		$this->expectException( InvalidArgumentException::class );
		$actual = new ParserOutput( '', [ (object)[] ], [] );
		$this->assertInstanceOf( ParserOutput::class, $actual );
	}

	public function testConstructorFail2() {
		$this->expectException( InvalidArgumentException::class );
		$actual = new ParserOutput( '', [], [ (object)[] ] );
		$this->assertInstanceOf( ParserOutput::class, $actual );
	}

	public function testSourcePageTemplate() {
		$output = new ParserOutput(
			'A<0>B',
			[ '<0>' => new Section( '<translate>', '<1>', '</translate>' ) ],
			[]
		);

		$this->assertSame( 'A<translate><1></translate>B', $output->sourcePageTemplate() );
	}

	public function testTranslationPageTemplate() {
		$output = new ParserOutput(
			'A<0>B',
			[ '<0>' => new Section( '<translate>', '<1>', '</translate>' ) ],
			[]
		);

		$this->assertSame( 'A<1>B', $output->translationPageTemplate() );
	}

	public function testUnits() {
		$units = [];
		$units['<1>'] = new TranslationUnit();

		$output = new ParserOutput(
			'A<0>B',
			[ '<0>' => new Section( '<translate>', '<1>', '</translate>' ) ],
			$units
		);

		$this->assertSame( $units, $output->units() );
	}

	public function testSourcePageTextForRendering() {
		$units = [];
		$units['<1>'] = new TranslationUnit();
		$units['<1>']->text = 'Hello';

		$output = new ParserOutput(
			'A<0>B',
			[ '<0>' => new Section( '<translate>', '<1>', '</translate>' ) ],
			$units
		);

		$language = $this->createStub( Language::class );
		$language->method( 'getHtmlCode' )->willReturn( 'en-GB' );

		$this->assertSame( 'AHelloB', $output->sourcePageTextForRendering( $language ) );
	}

	public function testSourcePageTextForSaving() {
		$units = [];
		$units['<1>'] = new TranslationUnit();
		$units['<1>']->text = 'Hello';
		$units['<1>']->id = 'abc';
		$units['<1>']->setIsInline( true );

		$output = new ParserOutput(
			'A<0>B',
			[ '<0>' => new Section( '<translate>', '<1>', '</translate>' ) ],
			$units
		);

		$this->assertSame( 'A<translate><!--T:abc--> Hello</translate>B', $output->sourcePageTextForSaving() );
	}
}