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
|
<?php
/**
* Tests for fuzzy flag change on edits.
* @author Niklas Laxström
* @file
* @license GPL-2.0-or-later
*/
use MediaWiki\Revision\RevisionRecord;
/**
* Tests for fuzzy flag change on edits.
* @group Database
* @group medium
*/
class TranslationFuzzyUpdaterTest extends MediaWikiIntegrationTestCase {
protected function setUp(): void {
parent::setUp();
$this->setMwGlobals( [
'wgTranslateTranslationServices' => [],
'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ],
] );
$this->setTemporaryHook( 'TranslatePostInitGroups', [ $this, 'getTestGroups' ] );
$mg = MessageGroups::singleton();
$mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
MessageIndex::singleton()->rebuild();
}
public function getTestGroups( &$list ) {
$messages = [ 'ugakey' => '$1 of $2', ];
$list['test-group'] = new MockWikiMessageGroup( 'test-group', $messages );
$otherMessages = [ 'nlkey' => 'Test message' ];
$list['validation-test-group'] = new MockWikiValidationMessageGroup(
'validation-test-group', $otherMessages );
return false;
}
public function testParsing() {
$title = Title::newFromText( 'MediaWiki:Ugakey/nl' );
$page = WikiPage::factory( $title );
$content = ContentHandler::makeContent( '$1 van $2', $title );
$status = $page->doEditContent( $content, __METHOD__ );
$value = $status->getValue();
/** @var RevisionRecord $revisionRecord */
$revisionRecord = $value['revision-record'];
$revisionId = $revisionRecord->getId();
$dbw = wfGetDB( DB_MASTER );
$conds = [
'rt_page' => $title->getArticleID(),
'rt_type' => RevTag::getType( 'fuzzy' ),
'rt_revision' => $revisionId
];
$index = array_keys( $conds );
$dbw->replace( 'revtag', [ $index ], $conds, __METHOD__ );
$handle = new MessageHandle( $title );
$this->assertTrue( $handle->isValid(), 'Message is known' );
$this->assertTrue( $handle->isFuzzy(), 'Message is fuzzy after database fuzzying' );
// Update the translation without the fuzzy string
$content = ContentHandler::makeContent( '$1 van $2', $title );
$page->doEditContent( $content, __METHOD__ );
$this->assertFalse( $handle->isFuzzy(), 'Message is unfuzzy after edit' );
$content = ContentHandler::makeContent( '!!FUZZY!!$1 van $2', $title );
$page->doEditContent( $content, __METHOD__ );
$this->assertTrue( $handle->isFuzzy(), 'Message is fuzzy after manual fuzzying' );
// Update the translation without the fuzzy string
$content = ContentHandler::makeContent( '$1 van $2', $title );
$page->doEditContent( $content, __METHOD__ );
$this->assertFalse( $handle->isFuzzy(), 'Message is unfuzzy after edit' );
}
public function testValidationFuzzy() {
$title = Title::newFromText( 'MediaWiki:nlkey/en-gb' );
$page = WikiPage::factory( $title );
$content = ContentHandler::makeContent( 'Test message', $title );
$page->doEditContent( $content, __METHOD__ );
$handle = new MessageHandle( $title );
$this->assertTrue( $handle->isValid(), 'Message is known' );
$this->assertTrue( $handle->isFuzzy(), 'Message is fuzzy due to validation failure' );
}
}
|