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
125
|
<?php
/**
* Tests for the AMD i18n message file format (used by require.js and Dojo).
*
* @file
* @author Matthias Palmer
* @copyright Copyright © 2011-2015, MetaSolutions AB
* @license GPL-2.0-or-later
*/
/**
* @see AmdFFS
*/
class AmdFFSTest extends MediaWikiIntegrationTestCase {
public function setUp() : void {
parent::setUp();
$this->groupConfiguration = [
'BASIC' => [
'class' => FileBasedMessageGroup::class,
'id' => 'test-id',
'label' => 'Test Label',
'namespace' => 'NS_MEDIAWIKI',
'description' => 'Test description',
],
'FILES' => [
'class' => AmdFFS::class,
'sourcePattern' => 'fake_reference_not_used_in_practise',
'targetPattern' => 'fake_reference_not_used_in_practise',
],
];
}
protected $groupConfiguration;
/**
* @dataProvider amdProvider
*/
public function testParsing( $messages, $authors, $file ) {
/**
* @var FileBasedMessageGroup $group
*/
$group = MessageGroupBase::factory( $this->groupConfiguration );
$ffs = new AmdFFS( $group );
$parsed = $ffs->readFromVariable( $file );
$expected = [
'MESSAGES' => $messages,
'AUTHORS' => $authors,
'METADATA' => [],
];
$this->assertEquals( $parsed, $expected );
}
public function amdProvider() {
$values = [];
$file1 =
<<<JS
define({
"one": "jeden",
"two": "dwa",
"three": "trzy"
});
JS;
$values[] = [
[
'one' => 'jeden',
'two' => 'dwa',
'three' => 'trzy',
],
[],
$file1,
];
$file2 =
<<<JS
/**
* Translators:
* - Matthias
* - Hannes
*/
define({
"root": {
"word": "слово"
}
});
JS;
$values[] = [
[ 'word' => 'слово' ],
[ 'Matthias', 'Hannes' ],
$file2,
];
return $values;
}
public function testExport() {
$collection = new MockMessageCollectionForExport();
/**
* @var FileBasedMessageGroup $group
*/
$group = MessageGroupBase::factory( $this->groupConfiguration );
$ffs = new AmdFFS( $group );
$data = $ffs->writeIntoVariable( $collection );
$parsed = $ffs->readFromVariable( $data );
$this->assertEquals(
[ 'Nike the bunny' ],
$parsed['AUTHORS'],
'Authors are exported'
);
$this->assertArrayHasKey( 'fuzzymsg', $parsed['MESSAGES'], 'fuzzy message is exported' );
$this->assertArrayHasKey(
'translatedmsg',
$parsed['MESSAGES'],
'translated message is exported'
);
if ( array_key_exists( 'untranslatedmsg', $parsed['MESSAGES'] ) ) {
$this->fail( 'Untranslated messages should not be exported' );
}
}
}
|