Files
votianng/legacy-php-tests/tests/CalendarTest.php
T
Sven 9de2358480 Portiere PHP-Cronjobs auf Spring-Tasks und ergänze Legacy-Tests
Migriert die weiterhin benötigten Zeitaufgaben einschließlich SOAP-Importen, Betriebsstatus und Wiederanlaufkontrolle. Aktiviert 115 native Spring-Tasks im Docker-Image ohne Cron-Daemon oder PHP und dokumentiert die entfallenen HHA-Aufrufe. Ergänzt PHP-/UI-Testwerkzeuge und aktualisiert den Projektstand auf Version 0.2.0.
2026-10-27 09:53:23 +01:00

72 lines
2.7 KiB
PHP

<?php
use PHPUnit\Framework\Attributes\DataProvider;
final class CalendarTest extends LegacyTestCase
{
#[DataProvider('leapYears')]
public function testGregorianLeapYears(int $year, bool $expected): void
{
self::assertSame($expected, leapYear($year));
}
public static function leapYears(): array
{
return ['ordinary' => [2026, false], 'leap' => [2024, true],
'century exception' => [1900, false], '400 years' => [2000, true],
'future century' => [2100, false]];
}
#[DataProvider('monthLengths')]
public function testMonthLength(int $year, int $month, int $expected): void
{
self::assertSame($expected, daysPerMonth($year, $month));
}
public static function monthLengths(): array
{
return [[2026, 1, 31], [2026, 2, 28], [2024, 2, 29], [1900, 2, 28],
[2000, 2, 29], [2026, 4, 30], [2026, 12, 31]];
}
#[DataProvider('dayOffsets')]
public function testDayArithmeticProducesValidCalendarDates(array $date, int $offset, array $expected): void
{
$actual = addDaysComplete(...[...$date, $offset]);
self::assertSame($expected, $actual);
self::assertTrue(checkdate($actual[1], $actual[2], $actual[0]));
}
public static function dayOffsets(): array
{
return [
'unchanged' => [[2026, 10, 26], 0, [2026, 10, 26]],
'next day' => [[2026, 10, 26], 1, [2026, 10, 27]],
'year rollover' => [[2026, 12, 31], 1, [2027, 1, 1]],
'February non-leap' => [[2026, 2, 28], 1, [2026, 3, 1]],
'February leap' => [[2024, 2, 28], 1, [2024, 2, 29]],
'leap rollover' => [[2024, 2, 29], 1, [2024, 3, 1]],
'multiple months' => [[2026, 1, 31], 60, [2026, 4, 1]],
'previous day same month' => [[2026, 10, 26], -1, [2026, 10, 25]],
'previous year' => [[2026, 1, 1], -1, [2025, 12, 31]],
'backwards into February' => [[2026, 3, 1], -1, [2026, 2, 28]],
'backwards into leap February' => [[2024, 3, 1], -1, [2024, 2, 29]],
'backwards into 30-day month' => [[2026, 5, 1], -1, [2026, 4, 30]],
'backwards from short month' => [[2026, 4, 1], -1, [2026, 3, 31]],
];
}
#[DataProvider('monthOffsets')]
public function testMonthArithmetic(int $year, int $month, int $offset, array $expected): void
{
self::assertSame($expected, addMonths($year, $month, $offset));
}
public static function monthOffsets(): array
{
return [[2026, 1, 0, [2026, 1]], [2026, 12, 1, [2027, 1]],
[2026, 1, -1, [2025, 12]], [2026, 1, 25, [2028, 2]],
[2026, 1, -13, [2024, 12]]];
}
}