Skip to content
Extraits de code Groupes Projets
RangeTest.php 35 ko
Newer Older
  • Learn to ignore specific revisions
  • sgiehl's avatar
    sgiehl a validé
    <?php
    /**
    
     * Piwik - free/libre analytics platform
    
    sgiehl's avatar
    sgiehl a validé
     *
     * @link http://piwik.org
     * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
     */
    
    
    namespace Piwik\Tests\Unit\Period;
    
    use Exception;
    
    mattab's avatar
    mattab a validé
    use Piwik\Date;
    
    use Piwik\Period\Month;
    use Piwik\Period\Range;
    
    mattab's avatar
    mattab a validé
    use Piwik\Period\Week;
    use Piwik\Period\Year;
    
    /**
     * @group Core
     */
    
    class RangeTest extends BasePeriodTest
    
    sgiehl's avatar
    sgiehl a validé
    {
        // test range 1
    
        public function testRangeToday()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('day', 'last1');
            $today = Date::today();
    
    sgiehl's avatar
    sgiehl a validé
                $today->toString(),
            );
            $correct = array_reverse($correct);
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(1, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
        public function testRangeTodayUtcPlus12()
    
    sgiehl's avatar
    sgiehl a validé
        {
            // rather ugly test, UTC+23 doesn't exist, but it's a way to test that last1 in UTC+23 will be "our" UTC tomorrow
    
            $range = new Range('day', 'last1', 'UTC+23');
            $today = Date::now()->addHour(23);
    
    sgiehl's avatar
    sgiehl a validé
                $today->toString(),
            );
            $correct = array_reverse($correct);
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(1, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    sgiehl's avatar
    sgiehl a validé
        // test range 2
    
        public function testRange2days()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('day', 'last2');
            $today = Date::today();
    
    sgiehl's avatar
    sgiehl a validé
                $today->toString(),
                $today->subDay(1)->toString()
            );
            $correct = array_reverse($correct);
    
    
            $this->assertEquals(2, $range->getNumberOfSubperiods());
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals($correct, $range->toString());
        }
    
    sgiehl's avatar
    sgiehl a validé
        // test range 3
    
        public function testRange5days()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('day', 'last50');
            $today = Date::today();
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array();
    
            for ($i = 0; $i < 50; $i++) {
                $correct[] = $today->subDay($i)->toString();
    
    sgiehl's avatar
    sgiehl a validé
            }
            $correct = array_reverse($correct);
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(50, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    sgiehl's avatar
    sgiehl a validé
        // test range 4
    
        public function testRangePrevious3days()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('day', 'previous3');
            $yesterday = Date::yesterday();
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array();
    
            for ($i = 0; $i < 3; $i++) {
                $correct[] = $yesterday->subDay($i)->toString();
    
    sgiehl's avatar
    sgiehl a validé
            }
            $correct = array_reverse($correct);
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(3, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    sgiehl's avatar
    sgiehl a validé
        // test range date1,date2
    
        public function testRangeComma1()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('day', '2008-01-01,2008-01-03');
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array(
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(3, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
        // test range date1,date2
    
        public function testRangeComma2()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $rangeString = '2007-12-22,2008-01-03';
            $range = new Range('day', $rangeString);
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array(
    
                '2007-12-22',
                '2007-12-23',
                '2007-12-24',
                '2007-12-25',
                '2007-12-26',
                '2007-12-27',
                '2007-12-28',
                '2007-12-29',
                '2007-12-30',
                '2007-12-31',
                '2008-01-01',
                '2008-01-02',
                '2008-01-03',
            );
    
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(13, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
    
            $this->assertEquals($rangeString, $range->getRangeString());
    
    sgiehl's avatar
    sgiehl a validé
        }
    
    sgiehl's avatar
    sgiehl a validé
        // test range date1,date2
    
        public function testRangeWeekcomma1()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('week', '2007-12-22,2008-01-03');
    
            $range2String = '2007-12-19,2008-01-03';
            $range2 = new Range('week', $range2String);
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array(
    
                array(
                    '2007-12-17',
                    '2007-12-18',
                    '2007-12-19',
                    '2007-12-20',
                    '2007-12-21',
                    '2007-12-22',
                    '2007-12-23',
                ),
                array(
                    '2007-12-24',
                    '2007-12-25',
                    '2007-12-26',
                    '2007-12-27',
                    '2007-12-28',
                    '2007-12-29',
                    '2007-12-30',
                ),
                array(
                    '2007-12-31',
                    '2008-01-01',
                    '2008-01-02',
                    '2008-01-03',
                    '2008-01-04',
                    '2008-01-05',
                    '2008-01-06',
                )
    
    sgiehl's avatar
    sgiehl a validé
            );
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
    
            $this->assertEquals(count($correct), $range2->getNumberOfSubperiods());
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals($correct, $range->toString());
    
            $this->assertEquals($correct, $range2->toString());
    
            $this->assertEquals('2007-12-17,2008-01-06' , $range2->getRangeString());
    
    sgiehl's avatar
    sgiehl a validé
        }
    
    sgiehl's avatar
    sgiehl a validé
        // test range date1,date2
    
        public function testRangeYearcomma1()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('year', '2006-12-22,2007-01-03');
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array(
    
                array(
                    0  => '2006-01-01',
                    1  => '2006-02-01',
                    2  => '2006-03-01',
                    3  => '2006-04-01',
                    4  => '2006-05-01',
                    5  => '2006-06-01',
                    6  => '2006-07-01',
                    7  => '2006-08-01',
                    8  => '2006-09-01',
                    9  => '2006-10-01',
    
    sgiehl's avatar
    sgiehl a validé
                    10 => '2006-11-01',
                    11 => '2006-12-01',
    
                ),
                1 =>
                array(
                    0  => '2007-01-01',
                    1  => '2007-02-01',
                    2  => '2007-03-01',
                    3  => '2007-04-01',
                    4  => '2007-05-01',
                    5  => '2007-06-01',
                    6  => '2007-07-01',
                    7  => '2007-08-01',
                    8  => '2007-09-01',
                    9  => '2007-10-01',
    
    sgiehl's avatar
    sgiehl a validé
                    10 => '2007-11-01',
                    11 => '2007-12-01',
    
    sgiehl's avatar
    sgiehl a validé
            );
            $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
    
            $this->assertEquals('2006-01-01,2007-12-31', $range->getRangeString());
    
    sgiehl's avatar
    sgiehl a validé
        }
    
    sgiehl's avatar
    sgiehl a validé
        // test range date1,date2
    
        public function testRangeMonthcomma1()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('month', '2006-12-22,2007-01-03');
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array(
    
                array(
                    '2006-12-01',
                    '2006-12-02',
                    '2006-12-03',
                    '2006-12-04',
                    '2006-12-05',
                    '2006-12-06',
                    '2006-12-07',
                    '2006-12-08',
                    '2006-12-09',
                    '2006-12-10',
                    '2006-12-11',
                    '2006-12-12',
                    '2006-12-13',
                    '2006-12-14',
                    '2006-12-15',
                    '2006-12-16',
                    '2006-12-17',
                    '2006-12-18',
                    '2006-12-19',
                    '2006-12-20',
                    '2006-12-21',
                    '2006-12-22',
                    '2006-12-23',
                    '2006-12-24',
                    '2006-12-25',
                    '2006-12-26',
                    '2006-12-27',
                    '2006-12-28',
                    '2006-12-29',
                    '2006-12-30',
                    '2006-12-31',
                ),
                array(
                    '2007-01-01',
                    '2007-01-02',
                    '2007-01-03',
                    '2007-01-04',
                    '2007-01-05',
                    '2007-01-06',
                    '2007-01-07',
                    '2007-01-08',
                    '2007-01-09',
                    '2007-01-10',
                    '2007-01-11',
                    '2007-01-12',
                    '2007-01-13',
                    '2007-01-14',
                    '2007-01-15',
                    '2007-01-16',
                    '2007-01-17',
                    '2007-01-18',
                    '2007-01-19',
                    '2007-01-20',
                    '2007-01-21',
                    '2007-01-22',
                    '2007-01-23',
                    '2007-01-24',
                    '2007-01-25',
                    '2007-01-26',
                    '2007-01-27',
                    '2007-01-28',
                    '2007-01-29',
                    '2007-01-30',
                    '2007-01-31',
                ),
    
    sgiehl's avatar
    sgiehl a validé
            );
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
    
            $this->assertEquals('2006-12-01,2007-01-31', $range->getRangeString());
    
    sgiehl's avatar
    sgiehl a validé
        }
    
        // test range WEEK
    
        public function testRangeWeek()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('week', 'last50');
            $today = Date::today();
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array();
    
            for ($i = 0; $i < 50; $i++) {
                $date = $today->subDay($i * 7);
    
    sgiehl's avatar
    sgiehl a validé
            }
            $correct = array_reverse($correct);
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(50, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    sgiehl's avatar
    sgiehl a validé
        // test range WEEK last1
    
        public function testRangeWeekLast1()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('week', 'last1');
            $currentWeek = new Week(Date::today());
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(1, $range->getNumberOfSubperiods());
            $this->assertEquals(array($currentWeek->toString()), $range->toString());
        }
    
    sgiehl's avatar
    sgiehl a validé
        // test range MONTH
    
        public function testRangeMonth()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('month', 'last20');
            $today = Date::today();
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array();
    
    sgiehl's avatar
    sgiehl a validé
                $date = $today->subMonth($i);
    
    sgiehl's avatar
    sgiehl a validé
            }
            $correct = array_reverse($correct);
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(20, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    sgiehl's avatar
    sgiehl a validé
        // test range MONTH last1
    
        public function testRangeMonthLast1()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('month', 'last1');
            $month = new Month(Date::today());
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(1, $range->getNumberOfSubperiods());
            $this->assertEquals(array($month->toString()), $range->toString());
        }
    
    sgiehl's avatar
    sgiehl a validé
        // test range PREVIOUS MONTH
    
        public function testRangePreviousmonth()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('month', 'previous10');
            $end = Date::today();
    
    sgiehl's avatar
    sgiehl a validé
            $end = $end->subMonth(1);
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array();
    
    sgiehl's avatar
    sgiehl a validé
                $date = $end->subMonth($i);
    
    sgiehl's avatar
    sgiehl a validé
            }
            $correct = array_reverse($correct);
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(10, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    
        public function testRangePreviousmonth_onLastDayOfMonth()
        {
            $end = Date::factory('2013-10-31');
            $range = new Range('month', 'previous10', 'UTC', $end);
            $end = $end->subMonth(1);
    
            $correct = array();
            for ($i = 0; $i < 10; $i++) {
                $date = $end->subMonth($i);
                $week = new Month($date);
    
                $correct[] = $week->toString();
            }
            $correct = array_reverse($correct);
    
            $this->assertEquals(10, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    
        public function testRangePreviousweek_onLastDayOfWeek()
        {
            $end = Date::factory('2013-11-03');
            $range = new Range('week', 'previous2', 'UTC', $end);
            $end = $end->subWeek(1);
    
            $correct = array();
            for ($i = 0; $i < 2; $i++) {
                $date = $end->subWeek($i);
                $week = new Week($date);
                $correct[] = $week->toString();
            }
            $correct = array_reverse($correct);
            $this->assertEquals($correct, $range->toString());
        }
    
        public function testRangePreviousweek_onFirstDayOfWeek()
        {
            $end = Date::factory('2013-11-04');
            $range = new Range('week', 'previous2', 'UTC', $end);
            $end = $end->subWeek(1);
    
            $correct = array();
            for ($i = 0; $i < 2; $i++) {
                $date = $end->subWeek($i);
                $week = new Week($date);
    
                $correct[] = $week->toString();
            }
            $correct = array_reverse($correct);
            $this->assertEquals($correct, $range->toString());
        }
    
        public function testRangeLastweek_onFirstDayOfWeek()
        {
            $end = Date::factory('2013-11-04');
            $range = new Range('week', 'last2', 'UTC', $end);
    
            $correct = array();
            for ($i = 0; $i < 2; $i++) {
                $date = $end->subWeek($i);
                $week = new Week($date);
    
                $correct[] = $week->toString();
            }
            $correct = array_reverse($correct);
            $this->assertEquals($correct, $range->toString());
        }
    
    
        public function testRangeLastmonth_onLastDayOfMonth()
        {
            $end = Date::factory('2013-10-31');
            $range = new Range('month', 'last10', 'UTC', $end);
    
            $correct = array();
            for ($i = 0; $i < 10; $i++) {
                $date = $end->subMonth($i);
                $week = new Month($date);
    
                $correct[] = $week->toString();
            }
            $correct = array_reverse($correct);
    
            $this->assertEquals(10, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
        public function _testRangePreviousmonth_onFirstOfMonth()
        {
            $end = Date::factory('2013-11-01');
            $range = new Range('month', 'previous10', 'UTC', $end);
            $end = $end->subMonth(1);
    
            $correct = array();
            for ($i = 0; $i < 10; $i++) {
                $date = $end->subMonth($i);
                $week = new Month($date);
    
                $correct[] = $week->toString();
            }
            $correct = array_reverse($correct);
    
            $this->assertEquals(10, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
        public function _testRangeLastmonth_onFirstOfMonth()
        {
            $end = Date::factory('2013-11-01');
            $range = new Range('month', 'last10', 'UTC', $end);
    
            $correct = array();
            for ($i = 0; $i < 10; $i++) {
                $date = $end->subMonth($i);
                $week = new Month($date);
    
                $correct[] = $week->toString();
            }
            $correct = array_reverse($correct);
    
            $this->assertEquals(10, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    
    sgiehl's avatar
    sgiehl a validé
        // test range YEAR
    
        public function testRangeYear()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('year', 'last10');
            $today = Date::today();
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array();
    
            for ($i = 0; $i < 10; $i++) {
                $date = $today->subMonth(12 * $i);
    
                $week = new Year($date);
    
    sgiehl's avatar
    sgiehl a validé
            }
            $correct = array_reverse($correct);
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(10, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    sgiehl's avatar
    sgiehl a validé
        // test range YEAR last1
    
        public function testRangeYearLast1()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('year', 'last1');
    
            $currentYear = new Year(Date::today());
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals(1, $range->getNumberOfSubperiods());
            $this->assertEquals(array($currentYear->toString()), $range->toString());
        }
    
        public function testCustomRangeYearUsesYearIfPossible()
        {
            $range = new Range('range', '2005-12-17,2008-01-03', 'UTC', Date::factory('2008-01-03'));
            $year2006 = new Year(Date::factory('2006-02-02'));
            $year2007 = new Year(Date::factory('2007-02-02'));
            $year2008 = new Year(Date::factory('2008-02-02'));
    
            $correct = array(
                '2005-12-17',
                '2005-12-18',
                array (
                    "2005-12-19",
                    "2005-12-20",
                    "2005-12-21",
                    "2005-12-22",
                    "2005-12-23",
                    "2005-12-24",
                    "2005-12-25"
                ),
                "2005-12-26",
                "2005-12-27",
                "2005-12-28",
                "2005-12-29",
                "2005-12-30",
                "2005-12-31",
                $year2006->toString(),
                $year2007->toString(),
                $year2008->toString()
            );
    
            $this->assertEquals(12, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    
        public function testCustomRangeIsYear_UsesFullYear()
        {
            $range = new Range('range', '2011-01-01,2011-12-31', 'UTC', Date::factory('2012-01-03'));
            $year2011 = new Year(Date::factory('2011-02-02'));
    
            $correct = array(
                $year2011->toString()
            );
    
            $this->assertEquals(1, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
        public function testCustomRangeYear_UsesCurrentYear()
        {
    
            $rangeString = '2013-01-01,2013-11-01';
            $range = new Range('range', $rangeString, 'UTC', Date::factory('2013-11-01'));
    
            $year2013 = new Year(Date::factory('2013-02-02'));
    
            $correct = array(
                $year2013->toString()
            );
    
            $this->assertEquals(1, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
    
            $this->assertEquals($correct, $range->toString());
            $this->assertEquals($rangeString, $range->getRangeString());
    
        }
    
        public function testCustomRangeYearUsesCurrentYear_onLastDayOfYear()
        {
            $range = new Range('range', '2013-01-01,2013-12-31', 'UTC', Date::factory('2013-12-31'));
            $year2013 = new Year(Date::factory('2013-01-01'));
    
            $correct = array(
                $year2013->toString()
            );
    
            $this->assertEquals(1, $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    
        public function testCustomRangeWeekInsideEndingToday()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('range', '2007-12-22,2008-01-03', 'UTC', Date::factory('2008-01-03'));
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array(
                '2007-12-22',
                '2007-12-23',
                array(
                    '2007-12-24',
                    '2007-12-25',
                    '2007-12-26',
                    '2007-12-27',
                    '2007-12-28',
                    '2007-12-29',
                    '2007-12-30',
                ),
                array(
                    '2007-12-31',
                    '2008-01-01',
                    '2008-01-02',
                    '2008-01-03',
                    '2008-01-04',
                    '2008-01-05',
                    '2008-01-06',
                )
            );
            $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
        public function testRangeEndDateIsTodayAndStartDateNotStartOfTheWeek()
        {
            $range = new Range('range', '2013-10-29,2013-10-30', 'UTC', Date::factory('2013-10-30'));
    
            $correct = array(
                '2013-10-29',
                '2013-10-30'
            );
    
            $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    
        public function testRangeEndDateIsInFuture()
        {
            $range = new Range('range', '2013-10-29,2013-10-31', 'UTC', Date::factory('2013-10-30'));
    
            $correct = array(
                '2013-10-29',
                '2013-10-30',
                '2013-10-31'
            );
    
            $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
        public function testRangePreviousmonthEndDateIsInFutureAndEndOfTheWeek()
        {
            $range = new Range('range', '2013-10-29,2013-11-03', 'UTC', Date::factory('2013-10-30'));
    
            $correct = array(
                '2013-10-29',
                '2013-10-30',
                '2013-10-31',
                '2013-11-01',
                '2013-11-02',
                '2013-11-03',
            );
    
            $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
        public function testCustomRangeWeekInsideEndingYesterday()
    
    sgiehl's avatar
    sgiehl a validé
        {
            $todays = array(
    
                Date::factory('2008-01-04'),
                Date::factory('2008-01-05'),
                Date::factory('2008-01-14'),
                Date::factory('2008-02-14'),
                Date::factory('2009-02-14'),
    
    sgiehl's avatar
    sgiehl a validé
            );
    
                $range = new Range('range', '2007-12-22,2008-01-03', 'UTC', $today);
    
    sgiehl's avatar
    sgiehl a validé
                $correct = array(
                    '2007-12-22',
                    '2007-12-23',
                    array(
                        '2007-12-24',
                        '2007-12-25',
                        '2007-12-26',
                        '2007-12-27',
                        '2007-12-28',
                        '2007-12-29',
                        '2007-12-30',
                    ),
                    '2007-12-31',
                    '2008-01-01',
                    '2008-01-02',
                    '2008-01-03',
                );
                $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
                $this->assertEquals($correct, $range->toString());
            }
        }
    
        public function testCustomRangeOnlyDaysLessThanOneWeek()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('range', '2007-12-30,2008-01-01');
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array(
                '2007-12-30',
                '2007-12-31',
                '2008-01-01',
            );
            $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
        public function testCustomRangeOneWeekOnly()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('range', '2007-12-31,2008-01-06');
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array(
                array(
    
                    '2007-12-31',
                    '2008-01-01',
                    '2008-01-02',
                    '2008-01-03',
                    '2008-01-04',
                    '2008-01-05',
                    '2008-01-06',
    
    sgiehl's avatar
    sgiehl a validé
                )
            );
            $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    
        public function testCustomRangeStartsWithWeek()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('range', '2007-12-31,2008-01-08');
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array(
                array(
    
                    '2007-12-31',
                    '2008-01-01',
                    '2008-01-02',
                    '2008-01-03',
                    '2008-01-04',
                    '2008-01-05',
                    '2008-01-06',
    
    sgiehl's avatar
    sgiehl a validé
                ),
                '2008-01-07',
                '2008-01-08',
            );
            $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
        public function testCustomRangeEndsWithWeek()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('range', '2007-12-21,2008-01-06');
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array(
                '2007-12-21',
                '2007-12-22',
                '2007-12-23',
                array(
    
                    '2007-12-24',
                    '2007-12-25',
                    '2007-12-26',
                    '2007-12-27',
                    '2007-12-28',
                    '2007-12-29',
                    '2007-12-30',
    
    sgiehl's avatar
    sgiehl a validé
                ),
                array(
    
                    '2007-12-31',
                    '2008-01-01',
                    '2008-01-02',
                    '2008-01-03',
                    '2008-01-04',
                    '2008-01-05',
                    '2008-01-06',
    
    sgiehl's avatar
    sgiehl a validé
                ),
            );
            $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    
        public function testCustomRangeContainsMonthAndWeek()
    
    sgiehl's avatar
    sgiehl a validé
        {
    
            $range = new Range('range', '2011-09-18,2011-11-02', 'UTC', Date::factory('2012-01-01'));
    
    sgiehl's avatar
    sgiehl a validé
            $correct = array(
    
    
                '2011-09-18',
                array(
                    '2011-09-19',
                    '2011-09-20',
                    '2011-09-21',
                    '2011-09-22',
                    '2011-09-23',
                    '2011-09-24',
                    '2011-09-25',
                ),
    
                '2011-09-26',
                '2011-09-27',
                '2011-09-28',
                '2011-09-29',
                '2011-09-30',
                array(
                    "2011-10-01",
                    "2011-10-02",
                    "2011-10-03",
                    "2011-10-04",
                    "2011-10-05",
                    "2011-10-06",
                    "2011-10-07",
                    "2011-10-08",
                    "2011-10-09",
                    "2011-10-10",
                    "2011-10-11",
                    "2011-10-12",
                    "2011-10-13",
                    "2011-10-14",
                    "2011-10-15",
                    "2011-10-16",
                    "2011-10-17",
                    "2011-10-18",
                    "2011-10-19",
                    "2011-10-20",
                    "2011-10-21",
                    "2011-10-22",
                    "2011-10-23",
                    "2011-10-24",
                    "2011-10-25",
                    "2011-10-26",
                    "2011-10-27",
                    "2011-10-28",
                    "2011-10-29",
                    "2011-10-30",
                    "2011-10-31",
                ),
                "2011-11-01",
                "2011-11-02",
    
    sgiehl's avatar
    sgiehl a validé
            );
            $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
            $this->assertEquals($correct, $range->toString());
        }
    
    
        public function testCustomRangeContainsSeveralMonthsAndWeeksStartingWithMonth()
    
    sgiehl's avatar
    sgiehl a validé
        {
            // Testing when "today" is in the same month, or later in the future
            $todays = array(
    
                Date::factory('2011-10-18'),
                Date::factory('2011-10-19'),
                Date::factory('2011-10-24'),
                Date::factory('2011-11-01'),
                Date::factory('2011-11-30'),
                Date::factory('2011-12-31'),
                Date::factory('2021-10-18')
    
    sgiehl's avatar
    sgiehl a validé
            );
    
                $range = new Range('range', '2011-08-01,2011-10-17', 'UTC', $today);
    
    sgiehl's avatar
    sgiehl a validé
                $correct = array(
    
    
                    array(
                        "2011-08-01",
                        "2011-08-02",
                        "2011-08-03",
                        "2011-08-04",
                        "2011-08-05",
                        "2011-08-06",
                        "2011-08-07",
                        "2011-08-08",
                        "2011-08-09",
                        "2011-08-10",
                        "2011-08-11",
                        "2011-08-12",
                        "2011-08-13",
                        "2011-08-14",
                        "2011-08-15",
                        "2011-08-16",
                        "2011-08-17",
                        "2011-08-18",
                        "2011-08-19",
                        "2011-08-20",
                        "2011-08-21",
                        "2011-08-22",
                        "2011-08-23",
                        "2011-08-24",
                        "2011-08-25",
                        "2011-08-26",
                        "2011-08-27",
                        "2011-08-28",
                        "2011-08-29",
                        "2011-08-30",
                        "2011-08-31",
                    ),
                    array(
                        "2011-09-01",
                        "2011-09-02",
                        "2011-09-03",
                        "2011-09-04",
                        "2011-09-05",
                        "2011-09-06",
                        "2011-09-07",
                        "2011-09-08",
                        "2011-09-09",
                        "2011-09-10",
                        "2011-09-11",
                        "2011-09-12",
                        "2011-09-13",
                        "2011-09-14",
                        "2011-09-15",
                        "2011-09-16",
                        "2011-09-17",
                        "2011-09-18",
                        "2011-09-19",
                        "2011-09-20",
                        "2011-09-21",
                        "2011-09-22",
                        "2011-09-23",
                        "2011-09-24",
                        "2011-09-25",
                        "2011-09-26",
                        "2011-09-27",
                        "2011-09-28",
                        "2011-09-29",
                        "2011-09-30",
                    ),
                    "2011-10-01",
                    "2011-10-02",
    
                    array(
                        "2011-10-03",
                        "2011-10-04",
                        "2011-10-05",
                        "2011-10-06",
                        "2011-10-07",
                        "2011-10-08",
                        "2011-10-09",
                    ),
                    array(
                        "2011-10-10",
                        "2011-10-11",
                        "2011-10-12",
                        "2011-10-13",
                        "2011-10-14",
                        "2011-10-15",
                        "2011-10-16",
                    ),
                    "2011-10-17",
                );
    
                $this->assertEquals(count($correct), $range->getNumberOfSubperiods());
                $this->assertEquals($correct, $range->toString());
            }
        }
    
        public function testCustomRangeOneMonthOnly()
        {
    
            $range = new Range('range', '2011-09-01,2011-09-30');
    
    sgiehl's avatar
    sgiehl a validé
                array(
                    "2011-09-01",
                    "2011-09-02",
                    "2011-09-03",
                    "2011-09-04",
                    "2011-09-05",
                    "2011-09-06",
                    "2011-09-07",
                    "2011-09-08",
                    "2011-09-09",
                    "2011-09-10",
                    "2011-09-11",
                    "2011-09-12",
                    "2011-09-13",
                    "2011-09-14",
                    "2011-09-15",
                    "2011-09-16",
                    "2011-09-17",