assertInstanceOf(DateTime::class, $result); $this->assertSame('2024-06-15', $result->format('Y-m-d')); $this->assertSame('10:30:00', $result->format('H:i:s')); } /** * Une date ISO 8601 doit être correctement parsée. */ public function testIso8601Date(): void { $result = DateParser::parse('2024-01-01T00:00:00'); $this->assertInstanceOf(DateTime::class, $result); $this->assertSame('2024-01-01', $result->format('Y-m-d')); } /** * Une date seule (sans heure) doit être parsée correctement. */ public function testDateOnly(): void { $result = DateParser::parse('2024-12-31'); $this->assertInstanceOf(DateTime::class, $result); $this->assertSame('2024-12-31', $result->format('Y-m-d')); } // ── Valeurs silencieuses — doit retourner null sans exception ──── /** * null doit retourner null. */ public function testNullReturnsNull(): void { $this->assertNull(DateParser::parse(null)); } /** * Une chaîne vide doit retourner null. */ public function testEmptyStringReturnsNull(): void { $this->assertNull(DateParser::parse('')); } /** * Une valeur non parseable doit retourner null sans lever d'exception. */ public function testInvalidValueReturnsNull(): void { $this->assertNull(DateParser::parse('pas-une-date')); } /** * Un entier doit être interprété comme un timestamp si valide, * ou retourner null si la conversion échoue. * Ici on vérifie simplement qu'aucune exception n'est levée. */ public function testIntegerThrowsNoException(): void { $result = DateParser::parse(0); // Pas d'assertion sur la valeur — on vérifie juste la robustesse $this->assertTrue($result === null || $result instanceof DateTime); } }