1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
<?php
declare(strict_types=1);
namespace Cron\Tests;
use Cron\DayOfMonthField;
use DateTime;
use DateTimeImmutable;
use PHPUnit\Framework\TestCase;
/**
* @author Michael Dowling <mtdowling@gmail.com>
*/
class DayOfMonthFieldTest extends TestCase
{
/**
* @covers \Cron\DayOfMonthField::validate
*/
public function testValidatesField(): void
{
$f = new DayOfMonthField();
$this->assertTrue($f->validate('1'));
$this->assertTrue($f->validate('*'));
$this->assertTrue($f->validate('L'));
$this->assertTrue($f->validate('5W'));
$this->assertTrue($f->validate('?'));
$this->assertTrue($f->validate('01'));
$this->assertFalse($f->validate('5W,L'));
$this->assertFalse($f->validate('1.'));
}
/**
* @covers \Cron\DayOfMonthField::isSatisfiedBy
*/
public function testChecksIfSatisfied(): void
{
$f = new DayOfMonthField();
$this->assertTrue($f->isSatisfiedBy(new DateTime(), '?', false));
$this->assertTrue($f->isSatisfiedBy(new DateTimeImmutable(), '?', false));
}
/**
* @covers \Cron\DayOfMonthField::increment
*/
public function testIncrementsDate(): void
{
$d = new DateTime('2011-03-15 11:15:00');
$f = new DayOfMonthField();
$f->increment($d);
$this->assertSame('2011-03-16 00:00:00', $d->format('Y-m-d H:i:s'));
$d = new DateTime('2011-03-15 11:15:00');
$f->increment($d, true);
$this->assertSame('2011-03-14 23:59:00', $d->format('Y-m-d H:i:s'));
}
/**
* @covers \Cron\DayOfMonthField::increment
*/
public function testIncrementsDateTimeImmutable(): void
{
$d = new DateTimeImmutable('2011-03-15 11:15:00');
$f = new DayOfMonthField();
$f->increment($d);
$this->assertSame('2011-03-16 00:00:00', $d->format('Y-m-d H:i:s'));
}
/**
* Day of the month cannot accept a 0 value, it must be between 1 and 31
* See Github issue #120.
*
* @since 2017-01-22
*/
public function testDoesNotAccept0Date(): void
{
$f = new DayOfMonthField();
$this->assertFalse($f->validate('0'));
}
/**
* @covers \Cron\MinutesField::increment
*/
public function testIncrementAcrossDstChangeBerlin(): void
{
$tz = new \DateTimeZone("Europe/Berlin");
$d = \DateTimeImmutable::createFromFormat("!Y-m-d H:i:s", "2021-03-28 01:59:00", $tz);
$f = new DayOfMonthField();
$f->increment($d);
$this->assertSame("2021-03-29 00:00:00", $d->format("Y-m-d H:i:s"));
$f->increment($d, true);
$this->assertSame("2021-03-28 23:59:00", $d->format("Y-m-d H:i:s"));
$f->increment($d, true);
$this->assertSame("2021-03-27 23:59:00", $d->format("Y-m-d H:i:s"));
}
/**
* @covers \Cron\MinutesField::increment
*/
public function testIncrementAcrossDstChangeLondon(): void
{
$tz = new \DateTimeZone("Europe/London");
$d = \DateTimeImmutable::createFromFormat("!Y-m-d H:i:s", "2021-03-28 00:59:00", $tz);
$f = new DayOfMonthField();
$f->increment($d);
$this->assertSame("2021-03-29 00:00:00", $d->format("Y-m-d H:i:s"));
$f->increment($d);
$this->assertSame("2021-03-30 00:00:00", $d->format("Y-m-d H:i:s"));
$f->increment($d, true);
$this->assertSame("2021-03-29 23:59:00", $d->format("Y-m-d H:i:s"));
$f->increment($d, true);
$this->assertSame("2021-03-28 23:59:00", $d->format("Y-m-d H:i:s"));
$f->increment($d, true);
$this->assertSame("2021-03-27 23:59:00", $d->format("Y-m-d H:i:s"));
}
public function testIssue151DOMFieldSupportLW()
{
$f = new DayOfMonthField();
$this->assertTrue($f->validate('LW'));
}
}
|