From 3058f25a1c8b0666cf525aaf67cfd1d15361b0f4 Mon Sep 17 00:00:00 2001 From: Joshua Ramon Enslin Date: Sat, 26 Sep 2020 15:10:06 +0200 Subject: [PATCH] Add tests for German dates, enable splitting of 5 digit timespans --- src/NodaTimeAutotranslater.php | 4 + src/NodaTimeSplitter.php | 9 +- tests/NodaTimeAutotranslaterTest.php | 22 ++++ tests/NodaTimeSplitterTest.php | 159 +++++++++++++++++++++++++++ 4 files changed, 193 insertions(+), 1 deletion(-) diff --git a/src/NodaTimeAutotranslater.php b/src/NodaTimeAutotranslater.php index c142a70..b8b69d8 100644 --- a/src/NodaTimeAutotranslater.php +++ b/src/NodaTimeAutotranslater.php @@ -431,7 +431,11 @@ final class NodaTimeAutotranslater { foreach (self::LANGS_TO_CE_FORMAT as $tLang => $ceFormat) { if ($suffixMode === 2) { + $ceIndicatorsToRemove = explode("%s", self::LANGS_TO_CE_FORMAT[$tLang]); $year = self::getTranslations($timeInfoToCopy)[$tLang]; + foreach ($ceIndicatorsToRemove as $ceIndicatorToRemove) { + $year = str_replace($ceIndicatorToRemove, "", $year); + } } else { if ($start === $end) { diff --git a/src/NodaTimeSplitter.php b/src/NodaTimeSplitter.php index abade80..1930e00 100644 --- a/src/NodaTimeSplitter.php +++ b/src/NodaTimeSplitter.php @@ -330,7 +330,7 @@ final class NodaTimeSplitter { $end = $start; $start = $startToSet; } - return [$start, $end, $output[2], $output[3], '-']; + return [$start, $end, $output[2], $output[3], '-', ""]; } } @@ -469,6 +469,13 @@ final class NodaTimeSplitter { $datum = self::clean_input($datum); + // 10000-20000 + if (!empty(preg_match("/^[0-9][0-9][0-9][0-9][0-9](\-|\/)[0-9][0-9][0-9][0-9][0-9]$/", $datum))) { + $start = substr($datum, 0, 5); + $end = substr($datum, 6, 5); + return [$start, $end, "00", "00", "+", ""]; + } + // 0000-0000 if (!empty(preg_match("/^[0-9][0-9][0-9][0-9](\-|\/)[0-9][0-9][0-9][0-9]$/", $datum)) || !empty(preg_match("/^[0-9][0-9][0-9][0-9](\-|\/)[0-9][0-9][0-9][0-9]\.$/", $datum)) diff --git a/tests/NodaTimeAutotranslaterTest.php b/tests/NodaTimeAutotranslaterTest.php index 91085d5..11e02ce 100644 --- a/tests/NodaTimeAutotranslaterTest.php +++ b/tests/NodaTimeAutotranslaterTest.php @@ -255,6 +255,28 @@ final class NodaTimeAutotranslaterTest extends TestCase { } + /** + * Test to check whether the HTML page is correctly generated. + * + * @author Joshua Ramon Enslin + * @group ValidOutput + * + * @return void + */ + public function testCanTranslateSingleThreeDigitYearBeforeCommonEra():void { + + $timeInfo = [ + "zeit_beginn" => "-100", + "zeit_ende" => "-100", + "zeit_zaehlzeit_jahr" => "100", + "zeit_zaehlzeit_monat" => "00", + "zeit_zaehlzeit_tag" => "00", + ]; + $output = NodaTimeAutotranslater::getTranslations($timeInfo); + self::assertEquals($output["de"], "100 v. Chr."); + + } + /** * Test to check whether the HTML page is correctly generated. * diff --git a/tests/NodaTimeSplitterTest.php b/tests/NodaTimeSplitterTest.php index c6c6047..b0e1921 100644 --- a/tests/NodaTimeSplitterTest.php +++ b/tests/NodaTimeSplitterTest.php @@ -14,6 +14,151 @@ require_once __DIR__ . "/../../MD_STD/MD_STD.php"; */ final class NodaTimeSplitterTest extends TestCase { + /** + * Test to check whether the HTML page is correctly generated. + * + * @author Joshua Ramon Enslin + * @group ValidOutput + * + * @return void + */ + public function testSplitSimpleDatesGerman():void { + + $output = NodaTimeSplitter::attempt_splitting("2.1.2020"); + self::assertEquals($output, [ + 0 => "2020", + 1 => "2020", + 2 => "01", + 3 => "02", + 4 => "+", + 5 => "", + ]); + self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "02.01.2020"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 2020); + + $output = NodaTimeSplitter::attempt_splitting("02.01.2020"); + self::assertEquals($output, [ + 0 => "2020", + 1 => "2020", + 2 => "01", + 3 => "02", + 4 => "+", + 5 => "", + ]); + self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "02.01.2020"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 2020); + + $output = NodaTimeSplitter::attempt_splitting("2. Januar 2020"); + self::assertEquals($output, [ + 0 => "2020", + 1 => "2020", + 2 => "01", + 3 => "02", + 4 => "+", + 5 => "", + ]); + self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "02.01.2020"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 2020); + + $output = NodaTimeSplitter::attempt_splitting("1920-1929"); + self::assertEquals($output, [ + 0 => "1920", + 1 => "1929", + 2 => "00", + 3 => "00", + 4 => "+", + 5 => "", + ]); + self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "1920-1929"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1925); + + $output = NodaTimeSplitter::attempt_splitting("1920er Jahre"); + self::assertEquals($output, [ + 0 => "1920", + 1 => "1929", + 2 => "00", + 3 => "00", + 4 => "+", + 5 => "", + ]); + self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "1920-1929"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1925); + + $output = NodaTimeSplitter::attempt_splitting("Januar 2020"); + self::assertEquals($output, [ + 0 => "2020", + 1 => "2020", + 2 => "01", + 3 => "00", + 4 => "+", + 5 => "", + ]); + self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "Januar 2020"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 2020); + + $output = NodaTimeSplitter::attempt_splitting("Januar 2020 v. Chr."); + self::assertEquals($output, [ + 0 => "-2020", + 1 => "-2020", + 2 => "01", + 3 => "00", + 4 => "-", + 5 => "", + ]); + self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "Januar 2020 v. Chr."); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 2020); + + // 5-Digit timespans BCE + $output = NodaTimeSplitter::attempt_splitting("40000-25000 vor Christus"); + self::assertEquals($output, [ + 0 => "-40000", + 1 => "-25000", + 2 => "00", + 3 => "00", + 4 => "-", + 5 => "", + ]); + self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "40000-25000 v. Chr."); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 32500); + + $output = NodaTimeSplitter::attempt_splitting("20. Jahrhundert v. Chr."); + self::assertEquals($output, [ + 0 => "-2000", + 1 => "-1901", + 2 => "00", + 3 => "00", + 4 => "-", + 5 => "", + ]); + self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "2000-1901 v. Chr."); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1950); + + $output = NodaTimeSplitter::attempt_splitting("20.-19. Jahrhundert v. Chr."); + self::assertEquals($output, [ + 0 => "-2000", + 1 => "-1801", + 2 => "00", + 3 => "00", + 4 => "-", + 5 => "", + ]); + self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "2000-1801 v. Chr."); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1900); + + $output = NodaTimeSplitter::attempt_splitting("Bis 20.-19. Jahrhundert v. Chr."); + self::assertEquals($output, [ + 0 => "?", + 1 => "-1801", + 2 => "00", + 3 => "00", + 4 => "-", + 5 => "", + ]); + self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "Bis 1801 v. Chr."); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1801); + + } + /** * Test to check whether the HTML page is correctly generated. * @@ -34,6 +179,7 @@ final class NodaTimeSplitterTest extends TestCase { 5 => "", ]); self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "02.01.2020"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 2020); $output = NodaTimeSplitter::attempt_splitting("2020. Januar 2."); self::assertEquals($output, [ @@ -45,6 +191,7 @@ final class NodaTimeSplitterTest extends TestCase { 5 => "", ]); self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "02.01.2020"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 2020); $output = NodaTimeSplitter::attempt_splitting("1920-tól 1929-ig"); self::assertEquals($output, [ @@ -56,6 +203,7 @@ final class NodaTimeSplitterTest extends TestCase { 5 => "", ]); self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "1920-1929"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1925); $output = NodaTimeSplitter::attempt_splitting("1920-1929 között"); self::assertEquals($output, [ @@ -67,6 +215,7 @@ final class NodaTimeSplitterTest extends TestCase { 5 => "", ]); self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "1920-1929"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1925); $output = NodaTimeSplitter::attempt_splitting("1920-től 1929-ig"); self::assertEquals($output, [ @@ -78,6 +227,7 @@ final class NodaTimeSplitterTest extends TestCase { 5 => "", ]); self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "1920-1929"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1925); $output = NodaTimeSplitter::attempt_splitting("1920-es évek"); self::assertEquals($output, [ @@ -89,6 +239,7 @@ final class NodaTimeSplitterTest extends TestCase { 5 => "", ]); self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "1920-1929"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1925); $output = NodaTimeSplitter::attempt_splitting("2020. Januar"); self::assertEquals($output, [ @@ -100,6 +251,7 @@ final class NodaTimeSplitterTest extends TestCase { 5 => "", ]); self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "Januar 2020"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 2020); $output = NodaTimeSplitter::attempt_splitting("Kr. e. 2020. Januar"); self::assertEquals($output, [ @@ -111,6 +263,7 @@ final class NodaTimeSplitterTest extends TestCase { 5 => "", ]); self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "Januar 2020 v. Chr."); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 2020); $output = NodaTimeSplitter::attempt_splitting("Kr. e. 20. század"); self::assertEquals($output, [ @@ -122,6 +275,7 @@ final class NodaTimeSplitterTest extends TestCase { 5 => "", ]); self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "2000-1901 v. Chr."); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1950); $output = NodaTimeSplitter::attempt_splitting("Kr. e. 20.-19. század"); self::assertEquals($output, [ @@ -133,6 +287,7 @@ final class NodaTimeSplitterTest extends TestCase { 5 => "", ]); self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "2000-1801 v. Chr."); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1900); $output = NodaTimeSplitter::attempt_splitting("Kr. e. 20.-19. század-ig"); self::assertEquals($output, [ @@ -144,6 +299,7 @@ final class NodaTimeSplitterTest extends TestCase { 5 => "", ]); self::assertEquals(NodaTimeSplitter::timePartsToTimeName($output), "Bis 1801 v. Chr."); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1801); } @@ -172,6 +328,9 @@ final class NodaTimeSplitterTest extends TestCase { $output = NodaTimeSplitter::attempt_splitting("Januar-Februar"); self::assertEquals($output, []); + $output = NodaTimeSplitter::attempt_splitting("Nach 1944"); + self::assertEquals($output, []); + } }