xref: /plugin/combo/vendor/dragonmantank/cron-expression/tests/Cron/DayOfWeekFieldTest.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
1*37748cd8SNickeau<?php
2*37748cd8SNickeau
3*37748cd8SNickeaunamespace Cron\Tests;
4*37748cd8SNickeau
5*37748cd8SNickeauuse Cron\DayOfWeekField;
6*37748cd8SNickeauuse DateTime;
7*37748cd8SNickeauuse PHPUnit_Framework_TestCase;
8*37748cd8SNickeau
9*37748cd8SNickeau/**
10*37748cd8SNickeau * @author Michael Dowling <mtdowling@gmail.com>
11*37748cd8SNickeau */
12*37748cd8SNickeauclass DayOfWeekFieldTest extends PHPUnit_Framework_TestCase
13*37748cd8SNickeau{
14*37748cd8SNickeau    /**
15*37748cd8SNickeau     * @covers Cron\DayOfWeekField::validate
16*37748cd8SNickeau     */
17*37748cd8SNickeau    public function testValidatesField()
18*37748cd8SNickeau    {
19*37748cd8SNickeau        $f = new DayOfWeekField();
20*37748cd8SNickeau        $this->assertTrue($f->validate('1'));
21*37748cd8SNickeau        $this->assertTrue($f->validate('*'));
22*37748cd8SNickeau        $this->assertTrue($f->validate('*/3,1,1-12'));
23*37748cd8SNickeau        $this->assertTrue($f->validate('SUN-2'));
24*37748cd8SNickeau        $this->assertFalse($f->validate('1.'));
25*37748cd8SNickeau    }
26*37748cd8SNickeau
27*37748cd8SNickeau    /**
28*37748cd8SNickeau     * @covers Cron\DayOfWeekField::isSatisfiedBy
29*37748cd8SNickeau     */
30*37748cd8SNickeau    public function testChecksIfSatisfied()
31*37748cd8SNickeau    {
32*37748cd8SNickeau        $f = new DayOfWeekField();
33*37748cd8SNickeau        $this->assertTrue($f->isSatisfiedBy(new DateTime(), '?'));
34*37748cd8SNickeau    }
35*37748cd8SNickeau
36*37748cd8SNickeau    /**
37*37748cd8SNickeau     * @covers Cron\DayOfWeekField::increment
38*37748cd8SNickeau     */
39*37748cd8SNickeau    public function testIncrementsDate()
40*37748cd8SNickeau    {
41*37748cd8SNickeau        $d = new DateTime('2011-03-15 11:15:00');
42*37748cd8SNickeau        $f = new DayOfWeekField();
43*37748cd8SNickeau        $f->increment($d);
44*37748cd8SNickeau        $this->assertEquals('2011-03-16 00:00:00', $d->format('Y-m-d H:i:s'));
45*37748cd8SNickeau
46*37748cd8SNickeau        $d = new DateTime('2011-03-15 11:15:00');
47*37748cd8SNickeau        $f->increment($d, true);
48*37748cd8SNickeau        $this->assertEquals('2011-03-14 23:59:00', $d->format('Y-m-d H:i:s'));
49*37748cd8SNickeau    }
50*37748cd8SNickeau
51*37748cd8SNickeau    /**
52*37748cd8SNickeau     * @covers Cron\DayOfWeekField::isSatisfiedBy
53*37748cd8SNickeau     * @expectedException InvalidArgumentException
54*37748cd8SNickeau     * @expectedExceptionMessage Weekday must be a value between 0 and 7. 12 given
55*37748cd8SNickeau     */
56*37748cd8SNickeau    public function testValidatesHashValueWeekday()
57*37748cd8SNickeau    {
58*37748cd8SNickeau        $f = new DayOfWeekField();
59*37748cd8SNickeau        $this->assertTrue($f->isSatisfiedBy(new DateTime(), '12#1'));
60*37748cd8SNickeau    }
61*37748cd8SNickeau
62*37748cd8SNickeau    /**
63*37748cd8SNickeau     * @covers Cron\DayOfWeekField::isSatisfiedBy
64*37748cd8SNickeau     * @expectedException InvalidArgumentException
65*37748cd8SNickeau     * @expectedExceptionMessage There are never more than 5 of a given weekday in a month
66*37748cd8SNickeau     */
67*37748cd8SNickeau    public function testValidatesHashValueNth()
68*37748cd8SNickeau    {
69*37748cd8SNickeau        $f = new DayOfWeekField();
70*37748cd8SNickeau        $this->assertTrue($f->isSatisfiedBy(new DateTime(), '3#6'));
71*37748cd8SNickeau    }
72*37748cd8SNickeau
73*37748cd8SNickeau    /**
74*37748cd8SNickeau     * @covers Cron\DayOfWeekField::validate
75*37748cd8SNickeau     */
76*37748cd8SNickeau    public function testValidateWeekendHash()
77*37748cd8SNickeau    {
78*37748cd8SNickeau        $f = new DayOfWeekField();
79*37748cd8SNickeau        $this->assertTrue($f->validate('MON#1'));
80*37748cd8SNickeau        $this->assertTrue($f->validate('TUE#2'));
81*37748cd8SNickeau        $this->assertTrue($f->validate('WED#3'));
82*37748cd8SNickeau        $this->assertTrue($f->validate('THU#4'));
83*37748cd8SNickeau        $this->assertTrue($f->validate('FRI#5'));
84*37748cd8SNickeau        $this->assertTrue($f->validate('SAT#1'));
85*37748cd8SNickeau        $this->assertTrue($f->validate('SUN#3'));
86*37748cd8SNickeau        $this->assertTrue($f->validate('MON#1,MON#3'));
87*37748cd8SNickeau    }
88*37748cd8SNickeau
89*37748cd8SNickeau    /**
90*37748cd8SNickeau     * @covers Cron\DayOfWeekField::isSatisfiedBy
91*37748cd8SNickeau     */
92*37748cd8SNickeau    public function testHandlesZeroAndSevenDayOfTheWeekValues()
93*37748cd8SNickeau    {
94*37748cd8SNickeau        $f = new DayOfWeekField();
95*37748cd8SNickeau        $this->assertTrue($f->isSatisfiedBy(new DateTime('2011-09-04 00:00:00'), '0-2'));
96*37748cd8SNickeau        $this->assertTrue($f->isSatisfiedBy(new DateTime('2011-09-04 00:00:00'), '6-0'));
97*37748cd8SNickeau
98*37748cd8SNickeau        $this->assertTrue($f->isSatisfiedBy(new DateTime('2014-04-20 00:00:00'), 'SUN'));
99*37748cd8SNickeau        $this->assertTrue($f->isSatisfiedBy(new DateTime('2014-04-20 00:00:00'), 'SUN#3'));
100*37748cd8SNickeau        $this->assertTrue($f->isSatisfiedBy(new DateTime('2014-04-20 00:00:00'), '0#3'));
101*37748cd8SNickeau        $this->assertTrue($f->isSatisfiedBy(new DateTime('2014-04-20 00:00:00'), '7#3'));
102*37748cd8SNickeau    }
103*37748cd8SNickeau
104*37748cd8SNickeau    /**
105*37748cd8SNickeau     * @see https://github.com/mtdowling/cron-expression/issues/47
106*37748cd8SNickeau     */
107*37748cd8SNickeau    public function testIssue47() {
108*37748cd8SNickeau        $f = new DayOfWeekField();
109*37748cd8SNickeau        $this->assertFalse($f->validate('mon,'));
110*37748cd8SNickeau        $this->assertFalse($f->validate('mon-'));
111*37748cd8SNickeau        $this->assertFalse($f->validate('*/2,'));
112*37748cd8SNickeau        $this->assertFalse($f->validate('-mon'));
113*37748cd8SNickeau        $this->assertFalse($f->validate(',1'));
114*37748cd8SNickeau        $this->assertFalse($f->validate('*-'));
115*37748cd8SNickeau        $this->assertFalse($f->validate(',-'));
116*37748cd8SNickeau    }
117*37748cd8SNickeau}
118