| Server IP : 213.186.33.4 / Your IP : 216.73.216.193 Web Server : Apache System : Linux webm006.cluster103.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : awebpaca ( 35430) PHP Version : 8.5.0 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/awebpaca/Dolibarr/htdocs/includes/sabre/sabre/vobject/tests/VObject/ |
Upload File : |
<?php
namespace Sabre\VObject;
use DateInterval;
use DateTimeImmutable;
use DateTimeZone;
class DateTimeParserTest extends \PHPUnit_Framework_TestCase {
function testParseICalendarDuration() {
$this->assertEquals('+1 weeks', DateTimeParser::parseDuration('P1W', true));
$this->assertEquals('+5 days', DateTimeParser::parseDuration('P5D', true));
$this->assertEquals('+5 days 3 hours 50 minutes 12 seconds', DateTimeParser::parseDuration('P5DT3H50M12S', true));
$this->assertEquals('-1 weeks 50 minutes', DateTimeParser::parseDuration('-P1WT50M', true));
$this->assertEquals('+50 days 3 hours 2 seconds', DateTimeParser::parseDuration('+P50DT3H2S', true));
$this->assertEquals('+0 seconds', DateTimeParser::parseDuration('+PT0S', true));
$this->assertEquals(new DateInterval('PT0S'), DateTimeParser::parseDuration('PT0S'));
}
function testParseICalendarDurationDateInterval() {
$expected = new DateInterval('P7D');
$this->assertEquals($expected, DateTimeParser::parseDuration('P1W'));
$this->assertEquals($expected, DateTimeParser::parse('P1W'));
$expected = new DateInterval('PT3M');
$expected->invert = true;
$this->assertEquals($expected, DateTimeParser::parseDuration('-PT3M'));
}
/**
* @expectedException \Sabre\VObject\InvalidDataException
*/
function testParseICalendarDurationFail() {
DateTimeParser::parseDuration('P1X', true);
}
function testParseICalendarDateTime() {
$dateTime = DateTimeParser::parseDateTime('20100316T141405');
$compare = new DateTimeImmutable('2010-03-16 14:14:05', new DateTimeZone('UTC'));
$this->assertEquals($compare, $dateTime);
}
/**
* @depends testParseICalendarDateTime
* @expectedException \Sabre\VObject\InvalidDataException
*/
function testParseICalendarDateTimeBadFormat() {
$dateTime = DateTimeParser::parseDateTime('20100316T141405 ');
}
/**
* @depends testParseICalendarDateTime
* @expectedException \Sabre\VObject\InvalidDataException
*/
function testParseICalendarDateTimeInvalidTime() {
$dateTime = DateTimeParser::parseDateTime('20100316T251405');
}
/**
* @depends testParseICalendarDateTime
*/
function testParseICalendarDateTimeUTC() {
$dateTime = DateTimeParser::parseDateTime('20100316T141405Z');
$compare = new DateTimeImmutable('2010-03-16 14:14:05', new DateTimeZone('UTC'));
$this->assertEquals($compare, $dateTime);
}
/**
* @depends testParseICalendarDateTime
*/
function testParseICalendarDateTimeUTC2() {
$dateTime = DateTimeParser::parseDateTime('20101211T160000Z');
$compare = new DateTimeImmutable('2010-12-11 16:00:00', new DateTimeZone('UTC'));
$this->assertEquals($compare, $dateTime);
}
/**
* @depends testParseICalendarDateTime
*/
function testParseICalendarDateTimeCustomTimeZone() {
$dateTime = DateTimeParser::parseDateTime('20100316T141405', new DateTimeZone('Europe/Amsterdam'));
$compare = new DateTimeImmutable('2010-03-16 14:14:05', new DateTimeZone('Europe/Amsterdam'));
$this->assertEquals($compare, $dateTime);
}
function testParseICalendarDate() {
$dateTime = DateTimeParser::parseDate('20100316');
$expected = new DateTimeImmutable('2010-03-16 00:00:00', new DateTimeZone('UTC'));
$this->assertEquals($expected, $dateTime);
$dateTime = DateTimeParser::parse('20100316');
$this->assertEquals($expected, $dateTime);
}
/**
* TCheck if a date with year > 4000 will not throw an exception. iOS seems to use 45001231 in yearly recurring events
*/
function testParseICalendarDateGreaterThan4000() {
$dateTime = DateTimeParser::parseDate('45001231');
$expected = new DateTimeImmutable('4500-12-31 00:00:00', new DateTimeZone('UTC'));
$this->assertEquals($expected, $dateTime);
$dateTime = DateTimeParser::parse('45001231');
$this->assertEquals($expected, $dateTime);
}
/**
* Check if a datetime with year > 4000 will not throw an exception. iOS seems to use 45001231T235959 in yearly recurring events
*/
function testParseICalendarDateTimeGreaterThan4000() {
$dateTime = DateTimeParser::parseDateTime('45001231T235959');
$expected = new DateTimeImmutable('4500-12-31 23:59:59', new DateTimeZone('UTC'));
$this->assertEquals($expected, $dateTime);
$dateTime = DateTimeParser::parse('45001231T235959');
$this->assertEquals($expected, $dateTime);
}
/**
* @depends testParseICalendarDate
* @expectedException \Sabre\VObject\InvalidDataException
*/
function testParseICalendarDateBadFormat() {
$dateTime = DateTimeParser::parseDate('20100316T141405');
}
/**
* @depends testParseICalendarDate
* @expectedException \Sabre\VObject\InvalidDataException
*/
function testParseICalendarDateInvalidDate() {
$dateTime = DateTimeParser::parseDate('20101331');
}
/**
* @dataProvider vcardDates
*/
function testVCardDate($input, $output) {
$this->assertEquals(
$output,
DateTimeParser::parseVCardDateTime($input)
);
}
/**
* @expectedException \Sabre\VObject\InvalidDataException
*/
function testBadVCardDate() {
DateTimeParser::parseVCardDateTime('1985---01');
}
/**
* @expectedException \Sabre\VObject\InvalidDataException
*/
function testBadVCardTime() {
DateTimeParser::parseVCardTime('23:12:166');
}
function vcardDates() {
return [
[
"19961022T140000",
[
"year" => 1996,
"month" => 10,
"date" => 22,
"hour" => 14,
"minute" => 00,
"second" => 00,
"timezone" => null
],
],
[
"--1022T1400",
[
"year" => null,
"month" => 10,
"date" => 22,
"hour" => 14,
"minute" => 00,
"second" => null,
"timezone" => null
],
],
[
"---22T14",
[
"year" => null,
"month" => null,
"date" => 22,
"hour" => 14,
"minute" => null,
"second" => null,
"timezone" => null
],
],
[
"19850412",
[
"year" => 1985,
"month" => 4,
"date" => 12,
"hour" => null,
"minute" => null,
"second" => null,
"timezone" => null
],
],
[
"1985-04",
[
"year" => 1985,
"month" => 04,
"date" => null,
"hour" => null,
"minute" => null,
"second" => null,
"timezone" => null
],
],
[
"1985",
[
"year" => 1985,
"month" => null,
"date" => null,
"hour" => null,
"minute" => null,
"second" => null,
"timezone" => null
],
],
[
"--0412",
[
"year" => null,
"month" => 4,
"date" => 12,
"hour" => null,
"minute" => null,
"second" => null,
"timezone" => null
],
],
[
"---12",
[
"year" => null,
"month" => null,
"date" => 12,
"hour" => null,
"minute" => null,
"second" => null,
"timezone" => null
],
],
[
"T102200",
[
"year" => null,
"month" => null,
"date" => null,
"hour" => 10,
"minute" => 22,
"second" => 0,
"timezone" => null
],
],
[
"T1022",
[
"year" => null,
"month" => null,
"date" => null,
"hour" => 10,
"minute" => 22,
"second" => null,
"timezone" => null
],
],
[
"T10",
[
"year" => null,
"month" => null,
"date" => null,
"hour" => 10,
"minute" => null,
"second" => null,
"timezone" => null
],
],
[
"T-2200",
[
"year" => null,
"month" => null,
"date" => null,
"hour" => null,
"minute" => 22,
"second" => 00,
"timezone" => null
],
],
[
"T--00",
[
"year" => null,
"month" => null,
"date" => null,
"hour" => null,
"minute" => null,
"second" => 00,
"timezone" => null
],
],
[
"T102200Z",
[
"year" => null,
"month" => null,
"date" => null,
"hour" => 10,
"minute" => 22,
"second" => 00,
"timezone" => 'Z'
],
],
[
"T102200-0800",
[
"year" => null,
"month" => null,
"date" => null,
"hour" => 10,
"minute" => 22,
"second" => 00,
"timezone" => '-0800'
],
],
// extended format
[
"2012-11-29T15:10:53Z",
[
"year" => 2012,
"month" => 11,
"date" => 29,
"hour" => 15,
"minute" => 10,
"second" => 53,
"timezone" => 'Z'
],
],
// with milliseconds
[
"20121129T151053.123Z",
[
"year" => 2012,
"month" => 11,
"date" => 29,
"hour" => 15,
"minute" => 10,
"second" => 53,
"timezone" => 'Z'
],
],
// extended format with milliseconds
[
"2012-11-29T15:10:53.123Z",
[
"year" => 2012,
"month" => 11,
"date" => 29,
"hour" => 15,
"minute" => 10,
"second" => 53,
"timezone" => 'Z'
],
],
];
}
function testDateAndOrTime_DateWithYearMonthDay() {
$this->assertDateAndOrTimeEqualsTo(
'20150128',
[
'year' => '2015',
'month' => '01',
'date' => '28'
]
);
}
function testDateAndOrTime_DateWithYearMonth() {
$this->assertDateAndOrTimeEqualsTo(
'2015-01',
[
'year' => '2015',
'month' => '01'
]
);
}
function testDateAndOrTime_DateWithMonth() {
$this->assertDateAndOrTimeEqualsTo(
'--01',
[
'month' => '01'
]
);
}
function testDateAndOrTime_DateWithMonthDay() {
$this->assertDateAndOrTimeEqualsTo(
'--0128',
[
'month' => '01',
'date' => '28'
]
);
}
function testDateAndOrTime_DateWithDay() {
$this->assertDateAndOrTimeEqualsTo(
'---28',
[
'date' => '28'
]
);
}
function testDateAndOrTime_TimeWithHour() {
$this->assertDateAndOrTimeEqualsTo(
'13',
[
'hour' => '13'
]
);
}
function testDateAndOrTime_TimeWithHourMinute() {
$this->assertDateAndOrTimeEqualsTo(
'1353',
[
'hour' => '13',
'minute' => '53'
]
);
}
function testDateAndOrTime_TimeWithHourSecond() {
$this->assertDateAndOrTimeEqualsTo(
'135301',
[
'hour' => '13',
'minute' => '53',
'second' => '01'
]
);
}
function testDateAndOrTime_TimeWithMinute() {
$this->assertDateAndOrTimeEqualsTo(
'-53',
[
'minute' => '53'
]
);
}
function testDateAndOrTime_TimeWithMinuteSecond() {
$this->assertDateAndOrTimeEqualsTo(
'-5301',
[
'minute' => '53',
'second' => '01'
]
);
}
function testDateAndOrTime_TimeWithSecond() {
$this->assertTrue(true);
/**
* This is unreachable due to a conflict between date and time pattern.
* This is an error in the specification, not in our implementation.
*/
}
function testDateAndOrTime_TimeWithSecondZ() {
$this->assertDateAndOrTimeEqualsTo(
'--01Z',
[
'second' => '01',
'timezone' => 'Z'
]
);
}
function testDateAndOrTime_TimeWithSecondTZ() {
$this->assertDateAndOrTimeEqualsTo(
'--01+1234',
[
'second' => '01',
'timezone' => '+1234'
]
);
}
function testDateAndOrTime_DateTimeWithYearMonthDayHour() {
$this->assertDateAndOrTimeEqualsTo(
'20150128T13',
[
'year' => '2015',
'month' => '01',
'date' => '28',
'hour' => '13'
]
);
}
function testDateAndOrTime_DateTimeWithMonthDayHour() {
$this->assertDateAndOrTimeEqualsTo(
'--0128T13',
[
'month' => '01',
'date' => '28',
'hour' => '13'
]
);
}
function testDateAndOrTime_DateTimeWithDayHour() {
$this->assertDateAndOrTimeEqualsTo(
'---28T13',
[
'date' => '28',
'hour' => '13'
]
);
}
function testDateAndOrTime_DateTimeWithDayHourMinute() {
$this->assertDateAndOrTimeEqualsTo(
'---28T1353',
[
'date' => '28',
'hour' => '13',
'minute' => '53'
]
);
}
function testDateAndOrTime_DateTimeWithDayHourMinuteSecond() {
$this->assertDateAndOrTimeEqualsTo(
'---28T135301',
[
'date' => '28',
'hour' => '13',
'minute' => '53',
'second' => '01'
]
);
}
function testDateAndOrTime_DateTimeWithDayHourZ() {
$this->assertDateAndOrTimeEqualsTo(
'---28T13Z',
[
'date' => '28',
'hour' => '13',
'timezone' => 'Z'
]
);
}
function testDateAndOrTime_DateTimeWithDayHourTZ() {
$this->assertDateAndOrTimeEqualsTo(
'---28T13+1234',
[
'date' => '28',
'hour' => '13',
'timezone' => '+1234'
]
);
}
protected function assertDateAndOrTimeEqualsTo($date, $parts) {
$this->assertSame(
DateTimeParser::parseVCardDateAndOrTime($date),
array_merge(
[
'year' => null,
'month' => null,
'date' => null,
'hour' => null,
'minute' => null,
'second' => null,
'timezone' => null
],
$parts
)
);
}
}