From e1a6f30900e1a7bb0f3850e0f2d42f17798f708d Mon Sep 17 00:00:00 2001 From: Dany Maillard Date: Tue, 29 Aug 2017 22:46:28 +0200 Subject: [PATCH] Fix interval with microseconds --- .../Component/VarDumper/Caster/DateCaster.php | 2 +- .../VarDumper/Tests/Caster/DateCasterTest.php | 81 +++++++++++-------- 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/src/Symfony/Component/VarDumper/Caster/DateCaster.php b/src/Symfony/Component/VarDumper/Caster/DateCaster.php index 0b6f551e0b57b..4a1c80f40ce26 100644 --- a/src/Symfony/Component/VarDumper/Caster/DateCaster.php +++ b/src/Symfony/Component/VarDumper/Caster/DateCaster.php @@ -62,7 +62,7 @@ private static function formatInterval(\DateInterval $i) } if (\PHP_VERSION_ID >= 70100 && isset($i->f)) { - $format .= $i->h || $i->i || $i->s || $i->f ? '%H:%I:'.self::formatSeconds($i->s, $i->f) : ''; + $format .= $i->h || $i->i || $i->s || $i->f ? '%H:%I:'.self::formatSeconds($i->s, substr($i->f, 2)) : ''; } else { $format .= $i->h || $i->i || $i->s ? '%H:%I:%S' : ''; } diff --git a/src/Symfony/Component/VarDumper/Tests/Caster/DateCasterTest.php b/src/Symfony/Component/VarDumper/Tests/Caster/DateCasterTest.php index 2acea527f0dc4..2cb439e116e50 100644 --- a/src/Symfony/Component/VarDumper/Tests/Caster/DateCasterTest.php +++ b/src/Symfony/Component/VarDumper/Tests/Caster/DateCasterTest.php @@ -100,10 +100,9 @@ public function provideDateTimes() /** * @dataProvider provideIntervals */ - public function testDumpInterval($intervalSpec, $invert, $expected) + public function testDumpInterval($intervalSpec, $ms, $invert, $expected) { - $interval = new \DateInterval($intervalSpec); - $interval->invert = $invert; + $interval = $this->createInterval($intervalSpec, $ms, $invert); $xDump = <<invert = $invert; + $interval = $this->createInterval($intervalSpec, $ms, $invert); $xDump = <<invert = $invert; + $interval = $this->createInterval($intervalSpec, $ms, $invert); $stub = new Stub(); $cast = DateCaster::castInterval($interval, array('foo' => 'bar'), $stub, false, Caster::EXCLUDE_VERBOSE); @@ -173,34 +170,37 @@ public function testCastInterval($intervalSpec, $invert, $xInterval, $xSeconds) public function provideIntervals() { $i = new \DateInterval('PT0S'); - $ms = \PHP_VERSION_ID >= 70100 && isset($i->f) ? '.0' : ''; + $ms = ($withMs = \PHP_VERSION_ID >= 70100 && isset($i->f)) ? '.0' : ''; + $ms1 = $withMs ? '.100' : ''; return array( - array('PT0S', 0, '0s', '0s'), - array('PT1S', 0, '+ 00:00:01'.$ms, '1s'), - array('PT2M', 0, '+ 00:02:00'.$ms, '120s'), - array('PT3H', 0, '+ 03:00:00'.$ms, '10 800s'), - array('P4D', 0, '+ 4d', '345 600s'), - array('P5M', 0, '+ 5m', null), - array('P6Y', 0, '+ 6y', null), - array('P1Y2M3DT4H5M6S', 0, '+ 1y 2m 3d 04:05:06'.$ms, null), - array('PT1M60S', 0, '+ 00:02:00'.$ms, null), - array('PT1H60M', 0, '+ 02:00:00'.$ms, null), - array('P1DT24H', 0, '+ 2d', null), - array('P1M32D', 0, '+ 1m 32d', null), - - array('PT0S', 1, '0s', '0s'), - array('PT1S', 1, '- 00:00:01'.$ms, '-1s'), - array('PT2M', 1, '- 00:02:00'.$ms, '-120s'), - array('PT3H', 1, '- 03:00:00'.$ms, '-10 800s'), - array('P4D', 1, '- 4d', '-345 600s'), - array('P5M', 1, '- 5m', null), - array('P6Y', 1, '- 6y', null), - array('P1Y2M3DT4H5M6S', 1, '- 1y 2m 3d 04:05:06'.$ms, null), - array('PT1M60S', 1, '- 00:02:00'.$ms, null), - array('PT1H60M', 1, '- 02:00:00'.$ms, null), - array('P1DT24H', 1, '- 2d', null), - array('P1M32D', 1, '- 1m 32d', null), + array('PT0S', 0, 0, '0s', '0s'), + array('PT0S', 0.1, 0, '+ 00:00:00'.$ms1, '0s'), + array('PT1S', 0, 0, '+ 00:00:01'.$ms, '1s'), + array('PT2M', 0, 0, '+ 00:02:00'.$ms, '120s'), + array('PT3H', 0, 0, '+ 03:00:00'.$ms, '10 800s'), + array('P4D', 0, 0, '+ 4d', '345 600s'), + array('P5M', 0, 0, '+ 5m', null), + array('P6Y', 0, 0, '+ 6y', null), + array('P1Y2M3DT4H5M6S', 0, 0, '+ 1y 2m 3d 04:05:06'.$ms, null), + array('PT1M60S', 0, 0, '+ 00:02:00'.$ms, null), + array('PT1H60M', 0, 0, '+ 02:00:00'.$ms, null), + array('P1DT24H', 0, 0, '+ 2d', null), + array('P1M32D', 0, 0, '+ 1m 32d', null), + + array('PT0S', 0, 1, '0s', '0s'), + array('PT0S', 0.1, 1, '- 00:00:00'.$ms1, '0s'), + array('PT1S', 0, 1, '- 00:00:01'.$ms, '-1s'), + array('PT2M', 0, 1, '- 00:02:00'.$ms, '-120s'), + array('PT3H', 0, 1, '- 03:00:00'.$ms, '-10 800s'), + array('P4D', 0, 1, '- 4d', '-345 600s'), + array('P5M', 0, 1, '- 5m', null), + array('P6Y', 0, 1, '- 6y', null), + array('P1Y2M3DT4H5M6S', 0, 1, '- 1y 2m 3d 04:05:06'.$ms, null), + array('PT1M60S', 0, 1, '- 00:02:00'.$ms, null), + array('PT1H60M', 0, 1, '- 02:00:00'.$ms, null), + array('P1DT24H', 0, 1, '- 2d', null), + array('P1M32D', 0, 1, '- 1m 32d', null), ); } @@ -401,4 +401,15 @@ public function providePeriods() return $periods; } + + private function createInterval($intervalSpec, $ms, $invert) + { + $interval = new \DateInterval($intervalSpec); + if (\PHP_VERSION_ID >= 70100 && isset($interval->f)) { + $interval->f = $ms; + } + $interval->invert = $invert; + + return $interval; + } }