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