Add test for NodaTimeAutotranslater, allow parsing days and months BC

This commit is contained in:
Joshua Ramon Enslin 2020-09-26 13:20:22 +02:00 committed by Stefan Rohde-Enslin
parent cb2eff61a3
commit d56d47aee1
3 changed files with 430 additions and 4 deletions

View File

@ -420,13 +420,25 @@ final class NodaTimeAutotranslater {
$suffixMode = self::getSuffixModeForYearsWSuffix($start, $end); $suffixMode = self::getSuffixModeForYearsWSuffix($start, $end);
// Time info to pass
if ($suffixMode === 2) {
$timeInfoToCopy = $timeInfo;
$timeInfoToCopy["zeit_beginn"] = abs($start);
$timeInfoToCopy["zeit_ende"] = abs($end);
}
$output = []; $output = [];
foreach (self::LANGS_TO_CE_FORMAT as $tLang => $ceFormat) { foreach (self::LANGS_TO_CE_FORMAT as $tLang => $ceFormat) {
if ($start === $end) { if ($suffixMode === 2) {
$year = sprintf(self::LANGS_SINGLE_YEAR_FORMAT[$tLang], (string)abs($start)); $year = self::getTranslations($timeInfoToCopy)[$tLang];
}
else {
if ($start === $end) {
$year = sprintf(self::LANGS_SINGLE_YEAR_FORMAT[$tLang], (string)abs($start));
}
else $year = sprintf(self::LANGS_YEARSPAN_FORMAT[$tLang], (string)abs($start), (string)abs($end));
} }
else $year = sprintf(self::LANGS_YEARSPAN_FORMAT[$tLang], (string)abs($start), (string)abs($end));
$output[$tLang] = self::applyBcBceFormat($tLang, $year, $suffixMode); $output[$tLang] = self::applyBcBceFormat($tLang, $year, $suffixMode);
@ -467,6 +479,7 @@ final class NodaTimeAutotranslater {
$end = intval($timeInfo['zeit_ende']); $end = intval($timeInfo['zeit_ende']);
$output = []; $output = [];
if (abs($start) === 1102) throw new Exception(var_export($timeInfo, true));
foreach (self::LANGS_YEARSPAN_FORMAT as $tLang => $format) { foreach (self::LANGS_YEARSPAN_FORMAT as $tLang => $format) {
$output[$tLang] = sprintf($format, (string)abs($start), (string)abs($end)); $output[$tLang] = sprintf($format, (string)abs($start), (string)abs($end));
} }
@ -615,7 +628,7 @@ final class NodaTimeAutotranslater {
public static function getTranslations(array $timeInfo):array { public static function getTranslations(array $timeInfo):array {
if (!($translation_type = self::check_translatability((string)$timeInfo['zeit_beginn'], (string)$timeInfo['zeit_ende'], (string)$timeInfo['zeit_zaehlzeit_monat']))) { if (!($translation_type = self::check_translatability((string)$timeInfo['zeit_beginn'], (string)$timeInfo['zeit_ende'], (string)$timeInfo['zeit_zaehlzeit_monat']))) {
throw new MDgenericInvalidInputsException("Non-translatable date"); throw new MDgenericInvalidInputsException("Non-translatable date: {$timeInfo['zeit_beginn']} - {$timeInfo['zeit_ende']}");
} }
if ($translation_type === self::TRANSLATABLE_ONLY_YEAR) { if ($translation_type === self::TRANSLATABLE_ONLY_YEAR) {

View File

@ -0,0 +1,368 @@
<?PHP
/**
* This script contains tests for the home page.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
*/
declare(strict_types = 1);
use PHPUnit\Framework\TestCase;
require __DIR__ . "/../src/NodaTimeAutotranslater.php";
/**
* Tests for home page.
*/
final class NodaTimeAutotranslaterTest extends TestCase {
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateSingleDay():void {
$timeInfo = [
"zeit_beginn" => "1920",
"zeit_ende" => "1920",
"zeit_zaehlzeit_jahr" => "1920",
"zeit_zaehlzeit_monat" => "05",
"zeit_zaehlzeit_tag" => "01",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "01.05.1920");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateSingleDayBeforeCommonEra():void {
$timeInfo = [
"zeit_beginn" => "-1920",
"zeit_ende" => "-1920",
"zeit_zaehlzeit_jahr" => "1920",
"zeit_zaehlzeit_monat" => "05",
"zeit_zaehlzeit_tag" => "01",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "01.05.1920 v. Chr.");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateSingleMonth():void {
$timeInfo = [
"zeit_beginn" => "1920",
"zeit_ende" => "1920",
"zeit_zaehlzeit_jahr" => "1920",
"zeit_zaehlzeit_monat" => "02",
"zeit_zaehlzeit_tag" => "00",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "Februar 1920");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateSingleMonthBeforeCommonEra():void {
$timeInfo = [
"zeit_beginn" => "-1920",
"zeit_ende" => "-1920",
"zeit_zaehlzeit_jahr" => "1920",
"zeit_zaehlzeit_monat" => "02",
"zeit_zaehlzeit_tag" => "00",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "Februar 1920 v. Chr.");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateDecades():void {
$timeInfo = [
"zeit_beginn" => "1920",
"zeit_ende" => "1939",
"zeit_zaehlzeit_jahr" => "1930",
"zeit_zaehlzeit_monat" => "00",
"zeit_zaehlzeit_tag" => "00",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "1920-1930er Jahre");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateCentury():void {
$timeInfo = [
"zeit_beginn" => "1901",
"zeit_ende" => "2000",
"zeit_zaehlzeit_jahr" => "1950",
"zeit_zaehlzeit_monat" => "00",
"zeit_zaehlzeit_tag" => "00",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "20. Jahrhundert");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateCenturies():void {
$timeInfo = [
"zeit_beginn" => "1801",
"zeit_ende" => "2000",
"zeit_zaehlzeit_jahr" => "1900",
"zeit_zaehlzeit_monat" => "00",
"zeit_zaehlzeit_tag" => "00",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "19.-20. Jahrhundert");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateCenturyBeforeCommonEra():void {
$timeInfo = [
"zeit_beginn" => "-2000",
"zeit_ende" => "-1901",
"zeit_zaehlzeit_jahr" => "1950",
"zeit_zaehlzeit_monat" => "00",
"zeit_zaehlzeit_tag" => "00",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "20. Jahrhundert v. Chr.");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateCenturiesBeforeCommonEra():void {
$timeInfo = [
"zeit_beginn" => "-2000",
"zeit_ende" => "-1801",
"zeit_zaehlzeit_jahr" => "1900",
"zeit_zaehlzeit_monat" => "00",
"zeit_zaehlzeit_tag" => "00",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "20.-19. Jahrhundert v. Chr.");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateYYYYUntilYYYY():void {
$timeInfo = [
"zeit_beginn" => "1000",
"zeit_ende" => "1150",
"zeit_zaehlzeit_jahr" => "1075",
"zeit_zaehlzeit_monat" => "00",
"zeit_zaehlzeit_tag" => "00",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "1000-1150");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateSingleYear():void {
$timeInfo = [
"zeit_beginn" => "1000",
"zeit_ende" => "1000",
"zeit_zaehlzeit_jahr" => "1000",
"zeit_zaehlzeit_monat" => "00",
"zeit_zaehlzeit_tag" => "00",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "1000");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateSingleYearBeforeCommonEra():void {
$timeInfo = [
"zeit_beginn" => "-1000",
"zeit_ende" => "-1000",
"zeit_zaehlzeit_jahr" => "1000",
"zeit_zaehlzeit_monat" => "00",
"zeit_zaehlzeit_tag" => "00",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "1000 v. Chr.");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateYYYYUntilYYYYBefore1000():void {
$timeInfo = [
"zeit_beginn" => "800",
"zeit_ende" => "850",
"zeit_zaehlzeit_jahr" => "0825",
"zeit_zaehlzeit_monat" => "00",
"zeit_zaehlzeit_tag" => "00",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "800-850 n. Chr.");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateYYYYUntilYYYYBeforeCommonEra():void {
$timeInfo = [
"zeit_beginn" => "-1156",
"zeit_ende" => "-1102",
"zeit_zaehlzeit_jahr" => "1075",
"zeit_zaehlzeit_monat" => "00",
"zeit_zaehlzeit_tag" => "00",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "1156-1102 v. Chr.");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateSinceSingleDay():void {
$timeInfo = [
"zeit_beginn" => "1920",
"zeit_ende" => "?",
"zeit_zaehlzeit_jahr" => "1920",
"zeit_zaehlzeit_monat" => "05",
"zeit_zaehlzeit_tag" => "01",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "Seit 01.05.1920");
}
/**
* Test to check whether the HTML page is correctly generated.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
* @group ValidOutput
*
* @return void
*/
public function testCanTranslateSinceSingleMonth():void {
$timeInfo = [
"zeit_beginn" => "1920",
"zeit_ende" => "?",
"zeit_zaehlzeit_jahr" => "1920",
"zeit_zaehlzeit_monat" => "05",
"zeit_zaehlzeit_tag" => "00",
];
$output = NodaTimeAutotranslater::getTranslations($timeInfo);
self::assertEquals($output["de"], "Seit Mai 1920");
}
}

45
tests/config.xml Normal file
View File

@ -0,0 +1,45 @@
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/|version|/phpunit.xsd"
backupGlobals="false"
backupStaticAttributes="false"
beStrictAboutChangesToGlobalState="false"
beStrictAboutOutputDuringTests="false"
beStrictAboutResourceUsageDuringSmallTests="true"
beStrictAboutTodoAnnotatedTests="true"
beStrictAboutCoversAnnotation="false"
cacheResult="false"
cacheTokens="false"
colors="true"
convertErrorsToExceptions="true"
convertDeprecationsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
preserveGlobalState="false"
runTestInSeparateProcess="true"
enforceTimeLimit="true"
failOnWarning="true"
forceCoversAnnotation="false"
printerClass="PHPUnit\TextUI\ResultPrinter"
processIsolation="true"
stopOnError="true"
stopOnFailure="true"
stopOnIncomplete="true"
stopOnSkipped="true"
stopOnRisky="true"
testSuiteLoaderClass="PHPUnit\Runner\StandardTestSuiteLoader"
timeoutForSmallTests="1"
timeoutForMediumTests="10"
timeoutForLargeTests="60"
verbose="true">
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<!-- <file>/path/to/file</file>
<exclude>
<directory suffix=".php">/path/to/files</directory>
<file>/path/to/file</file>
</exclude>-->
</whitelist>
</filter>
</phpunit>