File: FakeQqxMessageLocalizer.php

package info (click to toggle)
mediawiki 1%3A1.43.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 417,464 kB
  • sloc: php: 1,062,949; javascript: 664,290; sql: 9,714; python: 5,458; xml: 3,489; sh: 1,131; makefile: 64
file content (78 lines) | stat: -rw-r--r-- 1,820 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
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
<?php

declare( strict_types = 1 );

namespace MediaWiki\Tests\Unit;

use LanguageQqx;
use MediaWiki\Language\Language;
use MediaWiki\Message\Message;
use MessageLocalizer;
use Wikimedia\Message\MessageSpecifier;

/**
 * A MessageLocalizer that does not make database/service calls, for use in unit tests
 *
 * To be used in a phpunit unit test like so:
 *
 * ```php
 * $output = $this->createMock( OutputPage::class );
 * $output->method( 'msg' )
 *     ->willReturnCallback( [ new FakeQqxMessageLocalizer(), 'msg' ] );
 * ```
 *
 * @since 1.40 (backported in 1.39.4)
 * @license GPL-2.0-or-later
 */
class FakeQqxMessageLocalizer implements MessageLocalizer {

	public function msg( $key, ...$params ): Message {
		$message = new class( $key ) extends Message {

			protected function fetchMessage(): string {
				return "($this->key$*)";
			}

			public static function newFromSpecifier( $value ) {
				if ( $value instanceof MessageSpecifier ) {
					return new self( $value );
				}
				return parent::newFromSpecifier( $value );
			}

			public function getLanguage(): Language {
				return new class() extends LanguageQqx {

					public function __construct() {
					}

					public function getCode(): string {
						return 'qqx';
					}

					// Support using Message::numParam()
					public function formatNum( $number ): string {
						return (string)$number;
					}
				};
			}

			public function inContentLanguage(): Message {
				return $this;
			}

			protected function transformText( $string ): string {
				return $string;
			}
		};

		if ( $params ) {
			// we use ->params() instead of the $params constructor parameter
			// because ->params() supports some additional calling conventions,
			// which our callers might also have used
			$message->params( ...$params );
		}

		return $message;
	}
}