Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4096729
AndroidXmlFormatTest.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
AndroidXmlFormatTest.php
View Options
<?php
declare
(
strict_types
=
1
);
namespace
MediaWiki\Extension\Translate\FileFormatSupport
;
use
FileBasedMessageGroup
;
use
MediaWiki\Extension\Translate\MessageLoading\FatMessage
;
use
MediaWiki\Extension\Translate\MessageLoading\MessageCollection
;
use
MediaWikiIntegrationTestCase
;
use
MessageGroupBase
;
/**
* @author Niklas Laxström
* @license GPL-2.0-or-later
* @covers MediaWiki\Extension\Translate\FileFormatSupport\AndroidXmlFormat
*/
class
AndroidXmlFormatTest
extends
MediaWikiIntegrationTestCase
{
private
const
DOCLANG
=
'qqq'
;
protected
function
setUp
():
void
{
$this
->
overrideConfigValue
(
'TranslateDocumentationLanguageCode'
,
self
::
DOCLANG
);
}
private
array
$groupConfiguration
=
[
'BASIC'
=>
[
'class'
=>
FileBasedMessageGroup
::
class
,
'id'
=>
'test-id'
,
'label'
=>
'Test Label'
,
'namespace'
=>
'NS_MEDIAWIKI'
,
'description'
=>
'Test description'
,
],
'FILES'
=>
[
'format'
=>
'AndroidXml'
,
'sourcePattern'
=>
''
,
],
];
public
function
testParsing
():
void
{
$file
=
<<<
'XML'
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<!-- Authors:
* Imaginary translator
-->
<resources>
<string name="wpt_voicerec">Voice recording</string>
<string name="wpt_stillimage" fuzzy="true">Picture</string>
<plurals name="alot">
<item quantity="one">bunny</item>
<item quantity="other">bunnies</item>
</plurals>
<string name="has_quotes">Go to \"Wikipedia\"</string>
<string name="starts_with_at">\@Wikipedia</string>
<string name="has_ampersand">1&nbsp;000</string>
<string name="has_newline">first\nsecond</string>
<string name="has_slashes">first \\ second</string>
<string name="utf8_symbols">Hello World: \\u1234 \u1234 \\\u1234</string>
<string name="quote_double_slash">Hello World: \' \\\'</string>
</resources>
XML;
/** @var FileBasedMessageGroup $group */
$group = MessageGroupBase::factory( $this->groupConfiguration );
$androidFormat = new AndroidXmlFormat( $group );
$parsed = $androidFormat->readFromVariable( $file );
$expected = [
'MESSAGES' => [
'wpt_voicerec' => 'Voice recording',
'wpt_stillimage' => '!!FUZZY!!Picture',
'alot' => '{{PLURAL|one=bunny|bunnies}}',
'has_quotes' => 'Go to "Wikipedia"',
'starts_with_at' => '@Wikipedia',
'has_ampersand' => '1 000',
'has_newline' => "first\nsecond",
'has_slashes' => 'first \\ second',
'utf8_symbols' => "Hello World: \u1234 ሴ \ሴ",
'quote_double_slash' => 'Hello World: \' \\\''
],
'AUTHORS' => [
'Imaginary translator',
]
];
$this->assertEquals( $expected, $parsed );
}
public function testWrite(): void {
/** @var FileBasedMessageGroup $group */
$group = MessageGroupBase::factory( $this->groupConfiguration );
$androidFormat = new AndroidXmlFormat( $group );
$messages = [
'ko=26ra' => 'wawe',
'foobar' => '!!FUZZY!!Kissa kala <koira> "a\'b',
'amuch' => '{{PLURAL|one=bunny|bunnies}}',
'ampersand' => ' &foo',
'newlines' => "first\nsecond",
'slashes' => 'has \\ slash'
];
$authors = [
'1 Hyphen-Fan',
'2 Hyphen--Lover',
'3 Hyphen---Fanatic-',
];
$collection = new MockMessageCollection( $messages );
$collection->addCollectionAuthors( $authors, 'set' );
$xml = $androidFormat->writeIntoVariable( $collection );
$parsed = $androidFormat->readFromVariable( $xml );
$expected = [
'MESSAGES' => $messages,
'AUTHORS' => $authors,
];
$this->assertEquals( $expected, $parsed );
}
public function testWriteDoc(): void {
/** @var FileBasedMessageGroup $group */
$group = MessageGroupBase::factory( $this->groupConfiguration );
$androidFormat = new AndroidXmlFormat( $group );
$messages = [
'a' => 'b',
];
$collection = new MockMessageCollection( $messages, self::DOCLANG );
$actual = $androidFormat->writeIntoVariable( $collection );
$expected =
<<<'XML'
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="all">
<string name="a">b</string>
</resources>
XML;
$this->assertEquals( $expected, $actual );
}
}
class MockMessageCollection extends MessageCollection {
public function __construct( array $messages, string $code = 'en' ) {
$this->code = $code;
$keys = array_keys( $messages );
$this->keys = array_combine( $keys, $keys );
foreach ( $messages as $key => $value ) {
$m = new FatMessage( $key, $value );
$m->setTranslation( $value );
if ( $key === 'foobar' ) {
$m->addTag( 'fuzzy' );
}
$this->messages[$key] = $m;
}
}
public function filter( string $type, bool $condition = true, $value = null ): void {
}
public function loadTranslations(): void {
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Tue, Aug 18, 14:28 (3 w, 6 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
84/10/e214b260b2ccae0efb9247ea43e9
Default Alt Text
AndroidXmlFormatTest.php (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment