0
0
mirror of https://github.com/kevinpapst/kimai2.git synced 2024-12-22 04:08:29 +00:00
kevinpapst_kimai2/tests/TranslationsTest.php
2024-12-22 01:25:30 +01:00

107 lines
3.7 KiB
PHP

<?php
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace App\Tests;
use PHPUnit\Framework\TestCase;
/**
* @group integration
*/
class TranslationsTest extends TestCase
{
public function testForWrongFileExtension(): void
{
$files = glob(__DIR__ . '/../translations/*.*');
self::assertIsArray($files);
foreach ($files as $file) {
self::assertStringEndsWith('.xlf', $file);
}
}
public function testForEmptyStrings(): void
{
$files = glob(__DIR__ . '/../translations/*.xlf');
self::assertIsArray($files);
foreach ($files as $file) {
$xml = simplexml_load_file($file);
/** @var \SimpleXMLElement $body */
$body = $xml->file->body;
foreach ($body->children() as $transUnit) {
self::assertNotEmpty(
(string) $transUnit->target,
\sprintf(
'Found empty translation in language "%s" and file "%s" for key "%s"',
$xml->file->attributes()['target-language'],
basename($file),
(string) $transUnit->source
)
);
}
}
}
public function testReplacerWereNotTranslated(): void
{
$englishFiles = glob(__DIR__ . '/../translations/*.en.xlf');
self::assertIsArray($englishFiles);
foreach ($englishFiles as $englishFile) {
$english = simplexml_load_file($englishFile);
$trans = [];
/** @var \SimpleXMLElement $body */
$body = $english->file->body;
foreach ($body->children() as $transUnit) {
preg_match_all('/%[a-zA-Z]{1,}%/Uu', (string) $transUnit->target, $matches);
if (!empty($matches[0])) {
asort($matches[0]);
$trans[(string) $transUnit->source] = array_values($matches[0]);
}
}
if (empty($trans)) {
continue;
}
$expectedCounter = \count($trans);
$files = glob(__DIR__ . '/../translations/' . str_replace('.en.xlf', '', basename($englishFile)) . '*.xlf');
self::assertIsArray($files);
foreach ($files as $file) {
if ($englishFile === $file) {
continue;
}
$counter = 0;
$xml = simplexml_load_file($file);
$transLang = $trans;
/** @var \SimpleXMLElement $body */
$body = $xml->file->body;
foreach ($body->children() as $transUnit) {
$key = (string) $transUnit->source;
if (isset($transLang[$key])) {
// some special cases, which don't work properly - base translation should be changed
preg_match_all('/%[a-zA-Z]{1,}%/Uu', (string) $transUnit->target, $matches);
asort($matches[0]);
self::assertEquals($transLang[$key], array_values($matches[0]), \sprintf('Invalid replacer "%s" in "%s"', $key, basename($file)));
$counter++;
unset($transLang[$key]);
}
}
$counter += \count($transLang);
self::assertEquals($expectedCounter, $counter, \sprintf('Missing replacer in "%s", did not find translation keys: %s', basename($file), implode(', ', array_keys($transLang))));
}
}
}
}