sonarrradarrplexorganizrnginxdashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboard
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							426 lines
						
					
					
						
							15 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							426 lines
						
					
					
						
							15 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								/*
							 | 
						|
								 * This file is part of the Symfony package.
							 | 
						|
								 *
							 | 
						|
								 * (c) Fabien Potencier <fabien@symfony.com>
							 | 
						|
								 *
							 | 
						|
								 * For the full copyright and license information, please view the LICENSE
							 | 
						|
								 * file that was distributed with this source code.
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								namespace Symfony\Component\VarDumper\Tests\Caster;
							 | 
						|
								
							 | 
						|
								use PHPUnit\Framework\TestCase;
							 | 
						|
								use Symfony\Component\VarDumper\Caster\Caster;
							 | 
						|
								use Symfony\Component\VarDumper\Caster\DateCaster;
							 | 
						|
								use Symfony\Component\VarDumper\Cloner\Stub;
							 | 
						|
								use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * @author Dany Maillard <danymaillard93b@gmail.com>
							 | 
						|
								 */
							 | 
						|
								class DateCasterTest extends TestCase
							 | 
						|
								{
							 | 
						|
								    use VarDumperTestTrait;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider provideDateTimes
							 | 
						|
								     */
							 | 
						|
								    public function testDumpDateTime($time, $timezone, $xDate, $xTimestamp)
							 | 
						|
								    {
							 | 
						|
								        if ((defined('HHVM_VERSION_ID') || PHP_VERSION_ID <= 50509) && preg_match('/[-+]\d{2}:\d{2}/', $timezone)) {
							 | 
						|
								            $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $date = new \DateTime($time, new \DateTimeZone($timezone));
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								DateTime @$xTimestamp {
							 | 
						|
								  date: $xDate
							 | 
						|
								}
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpEquals($xDump, $date);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider provideDateTimes
							 | 
						|
								     */
							 | 
						|
								    public function testCastDateTime($time, $timezone, $xDate, $xTimestamp, $xInfos)
							 | 
						|
								    {
							 | 
						|
								        if ((defined('HHVM_VERSION_ID') || PHP_VERSION_ID <= 50509) && preg_match('/[-+]\d{2}:\d{2}/', $timezone)) {
							 | 
						|
								            $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $stub = new Stub();
							 | 
						|
								        $date = new \DateTime($time, new \DateTimeZone($timezone));
							 | 
						|
								        $cast = DateCaster::castDateTime($date, array('foo' => 'bar'), $stub, false, 0);
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								array:1 [
							 | 
						|
								  "\\x00~\\x00date" => $xDate
							 | 
						|
								]
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpEquals($xDump, $cast);
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								Symfony\Component\VarDumper\Caster\ConstStub {
							 | 
						|
								  +type: 1
							 | 
						|
								  +class: "$xDate"
							 | 
						|
								  +value: "%A$xInfos%A"
							 | 
						|
								  +cut: 0
							 | 
						|
								  +handle: 0
							 | 
						|
								  +refCount: 0
							 | 
						|
								  +position: 0
							 | 
						|
								  +attr: []
							 | 
						|
								}
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpMatchesFormat($xDump, $cast["\0~\0date"]);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function provideDateTimes()
							 | 
						|
								    {
							 | 
						|
								        return array(
							 | 
						|
								            array('2017-04-30 00:00:00.000000', 'Europe/Zurich', '2017-04-30 00:00:00.0 Europe/Zurich (+02:00)', 1493503200, 'Sunday, April 30, 2017%Afrom now%ADST On'),
							 | 
						|
								            array('2017-12-31 00:00:00.000000', 'Europe/Zurich', '2017-12-31 00:00:00.0 Europe/Zurich (+01:00)', 1514674800, 'Sunday, December 31, 2017%Afrom now%ADST Off'),
							 | 
						|
								            array('2017-04-30 00:00:00.000000', '+02:00', '2017-04-30 00:00:00.0 +02:00', 1493503200, 'Sunday, April 30, 2017%Afrom now'),
							 | 
						|
								
							 | 
						|
								            array('2017-04-30 00:00:00.100000', '+00:00', '2017-04-30 00:00:00.100 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'),
							 | 
						|
								            array('2017-04-30 00:00:00.120000', '+00:00', '2017-04-30 00:00:00.120 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'),
							 | 
						|
								            array('2017-04-30 00:00:00.123000', '+00:00', '2017-04-30 00:00:00.123 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'),
							 | 
						|
								            array('2017-04-30 00:00:00.123400', '+00:00', '2017-04-30 00:00:00.123400 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'),
							 | 
						|
								            array('2017-04-30 00:00:00.123450', '+00:00', '2017-04-30 00:00:00.123450 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'),
							 | 
						|
								            array('2017-04-30 00:00:00.123456', '+00:00', '2017-04-30 00:00:00.123456 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'),
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider provideIntervals
							 | 
						|
								     */
							 | 
						|
								    public function testDumpInterval($intervalSpec, $ms, $invert, $expected)
							 | 
						|
								    {
							 | 
						|
								        if ($ms && PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
							 | 
						|
								            $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $interval = $this->createInterval($intervalSpec, $ms, $invert);
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								DateInterval {
							 | 
						|
								  interval: $expected
							 | 
						|
								%A}
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpMatchesFormat($xDump, $interval);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider provideIntervals
							 | 
						|
								     */
							 | 
						|
								    public function testDumpIntervalExcludingVerbosity($intervalSpec, $ms, $invert, $expected)
							 | 
						|
								    {
							 | 
						|
								        if ($ms && PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
							 | 
						|
								            $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $interval = $this->createInterval($intervalSpec, $ms, $invert);
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								DateInterval {
							 | 
						|
								  interval: $expected
							 | 
						|
								}
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpEquals($xDump, $interval, Caster::EXCLUDE_VERBOSE);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider provideIntervals
							 | 
						|
								     */
							 | 
						|
								    public function testCastInterval($intervalSpec, $ms, $invert, $xInterval, $xSeconds)
							 | 
						|
								    {
							 | 
						|
								        if ($ms && PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
							 | 
						|
								            $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $interval = $this->createInterval($intervalSpec, $ms, $invert);
							 | 
						|
								        $stub = new Stub();
							 | 
						|
								
							 | 
						|
								        $cast = DateCaster::castInterval($interval, array('foo' => 'bar'), $stub, false, Caster::EXCLUDE_VERBOSE);
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								array:1 [
							 | 
						|
								  "\\x00~\\x00interval" => $xInterval
							 | 
						|
								]
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpEquals($xDump, $cast);
							 | 
						|
								
							 | 
						|
								        if (null === $xSeconds) {
							 | 
						|
								            return;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								Symfony\Component\VarDumper\Caster\ConstStub {
							 | 
						|
								  +type: 1
							 | 
						|
								  +class: "$xInterval"
							 | 
						|
								  +value: "$xSeconds"
							 | 
						|
								  +cut: 0
							 | 
						|
								  +handle: 0
							 | 
						|
								  +refCount: 0
							 | 
						|
								  +position: 0
							 | 
						|
								  +attr: []
							 | 
						|
								}
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpMatchesFormat($xDump, $cast["\0~\0interval"]);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function provideIntervals()
							 | 
						|
								    {
							 | 
						|
								        $i = new \DateInterval('PT0S');
							 | 
						|
								        $ms = ($withMs = \PHP_VERSION_ID >= 70100 && isset($i->f)) ? '.0' : '';
							 | 
						|
								
							 | 
						|
								        return array(
							 | 
						|
								            array('PT0S', 0, 0, '0s', '0s'),
							 | 
						|
								            array('PT0S', 0.1, 0, $withMs ? '+ 00:00:00.100' : '0s', '%is'),
							 | 
						|
								            array('PT1S', 0, 0, '+ 00:00:01'.$ms, '%is'),
							 | 
						|
								            array('PT2M', 0, 0, '+ 00:02:00'.$ms, '%is'),
							 | 
						|
								            array('PT3H', 0, 0, '+ 03:00:00'.$ms, '%ss'),
							 | 
						|
								            array('P4D', 0, 0, '+ 4d', '%ss'),
							 | 
						|
								            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, $withMs ? '- 00:00:00.100' : '0s', '%is'),
							 | 
						|
								            array('PT1S', 0, 1, '- 00:00:01'.$ms, '%is'),
							 | 
						|
								            array('PT2M', 0, 1, '- 00:02:00'.$ms, '%is'),
							 | 
						|
								            array('PT3H', 0, 1, '- 03:00:00'.$ms, '%ss'),
							 | 
						|
								            array('P4D', 0, 1, '- 4d', '%ss'),
							 | 
						|
								            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),
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider provideTimeZones
							 | 
						|
								     */
							 | 
						|
								    public function testDumpTimeZone($timezone, $expected)
							 | 
						|
								    {
							 | 
						|
								        if ((defined('HHVM_VERSION_ID') || PHP_VERSION_ID <= 50509) && !preg_match('/\w+\/\w+/', $timezone)) {
							 | 
						|
								            $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $timezone = new \DateTimeZone($timezone);
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								DateTimeZone {
							 | 
						|
								  timezone: $expected
							 | 
						|
								%A}
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpMatchesFormat($xDump, $timezone);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider provideTimeZones
							 | 
						|
								     */
							 | 
						|
								    public function testDumpTimeZoneExcludingVerbosity($timezone, $expected)
							 | 
						|
								    {
							 | 
						|
								        if ((defined('HHVM_VERSION_ID') || PHP_VERSION_ID <= 50509) && !preg_match('/\w+\/\w+/', $timezone)) {
							 | 
						|
								            $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $timezone = new \DateTimeZone($timezone);
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								DateTimeZone {
							 | 
						|
								  timezone: $expected
							 | 
						|
								}
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpMatchesFormat($xDump, $timezone, Caster::EXCLUDE_VERBOSE);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider provideTimeZones
							 | 
						|
								     */
							 | 
						|
								    public function testCastTimeZone($timezone, $xTimezone, $xRegion)
							 | 
						|
								    {
							 | 
						|
								        if ((defined('HHVM_VERSION_ID') || PHP_VERSION_ID <= 50509) && !preg_match('/\w+\/\w+/', $timezone)) {
							 | 
						|
								            $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $timezone = new \DateTimeZone($timezone);
							 | 
						|
								        $stub = new Stub();
							 | 
						|
								
							 | 
						|
								        $cast = DateCaster::castTimeZone($timezone, array('foo' => 'bar'), $stub, false, Caster::EXCLUDE_VERBOSE);
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								array:1 [
							 | 
						|
								  "\\x00~\\x00timezone" => $xTimezone
							 | 
						|
								]
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpMatchesFormat($xDump, $cast);
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								Symfony\Component\VarDumper\Caster\ConstStub {
							 | 
						|
								  +type: 1
							 | 
						|
								  +class: "$xTimezone"
							 | 
						|
								  +value: "$xRegion"
							 | 
						|
								  +cut: 0
							 | 
						|
								  +handle: 0
							 | 
						|
								  +refCount: 0
							 | 
						|
								  +position: 0
							 | 
						|
								  +attr: []
							 | 
						|
								}
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpMatchesFormat($xDump, $cast["\0~\0timezone"]);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function provideTimeZones()
							 | 
						|
								    {
							 | 
						|
								        $xRegion = extension_loaded('intl') ? '%s' : '';
							 | 
						|
								
							 | 
						|
								        return array(
							 | 
						|
								            // type 1 (UTC offset)
							 | 
						|
								            array('-12:00', '-12:00', ''),
							 | 
						|
								            array('+00:00', '+00:00', ''),
							 | 
						|
								            array('+14:00', '+14:00', ''),
							 | 
						|
								
							 | 
						|
								            // type 2 (timezone abbreviation)
							 | 
						|
								            array('GMT', '+00:00', ''),
							 | 
						|
								            array('a', '+01:00', ''),
							 | 
						|
								            array('b', '+02:00', ''),
							 | 
						|
								            array('z', '+00:00', ''),
							 | 
						|
								
							 | 
						|
								            // type 3 (timezone identifier)
							 | 
						|
								            array('Africa/Tunis', 'Africa/Tunis (%s:00)', $xRegion),
							 | 
						|
								            array('America/Panama', 'America/Panama (%s:00)', $xRegion),
							 | 
						|
								            array('Asia/Jerusalem', 'Asia/Jerusalem (%s:00)', $xRegion),
							 | 
						|
								            array('Atlantic/Canary', 'Atlantic/Canary (%s:00)', $xRegion),
							 | 
						|
								            array('Australia/Perth', 'Australia/Perth (%s:00)', $xRegion),
							 | 
						|
								            array('Europe/Zurich', 'Europe/Zurich (%s:00)', $xRegion),
							 | 
						|
								            array('Pacific/Tahiti', 'Pacific/Tahiti (%s:00)', $xRegion),
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider providePeriods
							 | 
						|
								     */
							 | 
						|
								    public function testDumpPeriod($start, $interval, $end, $options, $expected)
							 | 
						|
								    {
							 | 
						|
								        if (defined('HHVM_VERSION_ID') || \PHP_VERSION_ID < 50620 || (\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70005)) {
							 | 
						|
								            $this->markTestSkipped();
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $p = new \DatePeriod(new \DateTime($start), new \DateInterval($interval), is_int($end) ? $end : new \DateTime($end), $options);
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								DatePeriod {
							 | 
						|
								  period: $expected
							 | 
						|
								%A}
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpMatchesFormat($xDump, $p);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider providePeriods
							 | 
						|
								     */
							 | 
						|
								    public function testCastPeriod($start, $interval, $end, $options, $xPeriod, $xDates)
							 | 
						|
								    {
							 | 
						|
								        if (defined('HHVM_VERSION_ID') || \PHP_VERSION_ID < 50620 || (\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70005)) {
							 | 
						|
								            $this->markTestSkipped();
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $p = new \DatePeriod(new \DateTime($start), new \DateInterval($interval), is_int($end) ? $end : new \DateTime($end), $options);
							 | 
						|
								        $stub = new Stub();
							 | 
						|
								
							 | 
						|
								        $cast = DateCaster::castPeriod($p, array(), $stub, false, 0);
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								array:1 [
							 | 
						|
								  "\\x00~\\x00period" => $xPeriod
							 | 
						|
								]
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpEquals($xDump, $cast);
							 | 
						|
								
							 | 
						|
								        $xDump = <<<EODUMP
							 | 
						|
								Symfony\Component\VarDumper\Caster\ConstStub {
							 | 
						|
								  +type: 1
							 | 
						|
								  +class: "$xPeriod"
							 | 
						|
								  +value: "%A$xDates%A"
							 | 
						|
								  +cut: 0
							 | 
						|
								  +handle: 0
							 | 
						|
								  +refCount: 0
							 | 
						|
								  +position: 0
							 | 
						|
								  +attr: []
							 | 
						|
								}
							 | 
						|
								EODUMP;
							 | 
						|
								
							 | 
						|
								        $this->assertDumpMatchesFormat($xDump, $cast["\0~\0period"]);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function providePeriods()
							 | 
						|
								    {
							 | 
						|
								        $i = new \DateInterval('PT0S');
							 | 
						|
								        $ms = \PHP_VERSION_ID >= 70100 && isset($i->f) ? '.0' : '';
							 | 
						|
								
							 | 
						|
								        $periods = array(
							 | 
						|
								            array('2017-01-01', 'P1D', '2017-01-03', 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) to 2017-01-03 00:00:00.0', '1) 2017-01-01%a2) 2017-01-02'),
							 | 
						|
								            array('2017-01-01', 'P1D', 1, 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) recurring 2 time/s', '1) 2017-01-01%a2) 2017-01-02'),
							 | 
						|
								
							 | 
						|
								            array('2017-01-01', 'P1D', '2017-01-04', 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) to 2017-01-04 00:00:00.0', '1) 2017-01-01%a2) 2017-01-02%a3) 2017-01-03'),
							 | 
						|
								            array('2017-01-01', 'P1D', 2, 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) recurring 3 time/s', '1) 2017-01-01%a2) 2017-01-02%a3) 2017-01-03'),
							 | 
						|
								
							 | 
						|
								            array('2017-01-01', 'P1D', '2017-01-05', 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) to 2017-01-05 00:00:00.0', '1) 2017-01-01%a2) 2017-01-02%a1 more'),
							 | 
						|
								            array('2017-01-01', 'P1D', 3, 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) recurring 4 time/s', '1) 2017-01-01%a2) 2017-01-02%a3) 2017-01-03%a1 more'),
							 | 
						|
								
							 | 
						|
								            array('2017-01-01', 'P1D', '2017-01-21', 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) to 2017-01-21 00:00:00.0', '1) 2017-01-01%a17 more'),
							 | 
						|
								            array('2017-01-01', 'P1D', 19, 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) recurring 20 time/s', '1) 2017-01-01%a17 more'),
							 | 
						|
								
							 | 
						|
								            array('2017-01-01 01:00:00', 'P1D', '2017-01-03 01:00:00', 0, 'every + 1d, from 2017-01-01 01:00:00.0 (included) to 2017-01-03 01:00:00.0', '1) 2017-01-01 01:00:00.0%a2) 2017-01-02 01:00:00.0'),
							 | 
						|
								            array('2017-01-01 01:00:00', 'P1D', 1, 0, 'every + 1d, from 2017-01-01 01:00:00.0 (included) recurring 2 time/s', '1) 2017-01-01 01:00:00.0%a2) 2017-01-02 01:00:00.0'),
							 | 
						|
								
							 | 
						|
								            array('2017-01-01', 'P1DT1H', '2017-01-03', 0, "every + 1d 01:00:00$ms, from 2017-01-01 00:00:00.0 (included) to 2017-01-03 00:00:00.0", '1) 2017-01-01 00:00:00.0%a2) 2017-01-02 01:00:00.0'),
							 | 
						|
								            array('2017-01-01', 'P1DT1H', 1, 0, "every + 1d 01:00:00$ms, from 2017-01-01 00:00:00.0 (included) recurring 2 time/s", '1) 2017-01-01 00:00:00.0%a2) 2017-01-02 01:00:00.0'),
							 | 
						|
								
							 | 
						|
								            array('2017-01-01', 'P1D', '2017-01-04', \DatePeriod::EXCLUDE_START_DATE, 'every + 1d, from 2017-01-01 00:00:00.0 (excluded) to 2017-01-04 00:00:00.0', '1) 2017-01-02%a2) 2017-01-03'),
							 | 
						|
								            array('2017-01-01', 'P1D', 2, \DatePeriod::EXCLUDE_START_DATE, 'every + 1d, from 2017-01-01 00:00:00.0 (excluded) recurring 2 time/s', '1) 2017-01-02%a2) 2017-01-03'),
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        if (\PHP_VERSION_ID < 70107) {
							 | 
						|
								            array_walk($periods, function (&$i) { $i[5] = ''; });
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        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;
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |