Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F1821115
DateTimeParserTest.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Size
11 KB
Subscribers
None
DateTimeParserTest.php
View Options
<?php
namespace
Sabre\VObject
;
use
DateTime
;
use
DateTimeZone
;
use
DateInterval
;
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 LogicException
*/
function
testParseICalendarDurationFail
()
{
DateTimeParser
::
parseDuration
(
'P1X'
,
true
);
}
function
testParseICalendarDateTime
()
{
$dateTime
=
DateTimeParser
::
parseDateTime
(
'20100316T141405'
);
$compare
=
new
DateTime
(
'2010-03-16 14:14:05'
,
new
DateTimeZone
(
'UTC'
));
$this
->
assertEquals
(
$compare
,
$dateTime
);
}
/**
* @depends testParseICalendarDateTime
* @expectedException LogicException
*/
function
testParseICalendarDateTimeBadFormat
()
{
$dateTime
=
DateTimeParser
::
parseDateTime
(
'20100316T141405 '
);
}
/**
* @depends testParseICalendarDateTime
*/
function
testParseICalendarDateTimeUTC
()
{
$dateTime
=
DateTimeParser
::
parseDateTime
(
'20100316T141405Z'
);
$compare
=
new
DateTime
(
'2010-03-16 14:14:05'
,
new
DateTimeZone
(
'UTC'
));
$this
->
assertEquals
(
$compare
,
$dateTime
);
}
/**
* @depends testParseICalendarDateTime
*/
function
testParseICalendarDateTimeUTC2
()
{
$dateTime
=
DateTimeParser
::
parseDateTime
(
'20101211T160000Z'
);
$compare
=
new
DateTime
(
'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
DateTime
(
'2010-03-16 14:14:05'
,
new
DateTimeZone
(
'Europe/Amsterdam'
));
$this
->
assertEquals
(
$compare
,
$dateTime
);
}
function
testParseICalendarDate
()
{
$dateTime
=
DateTimeParser
::
parseDate
(
'20100316'
);
$expected
=
new
DateTime
(
'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
DateTime
(
'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
DateTime
(
'4500-12-31 23:59:59'
,
new
DateTimeZone
(
'UTC'
));
$this
->
assertEquals
(
$expected
,
$dateTime
);
$dateTime
=
DateTimeParser
::
parse
(
'45001231T235959'
);
$this
->
assertEquals
(
$expected
,
$dateTime
);
}
/**
* @depends testParseICalendarDate
* @expectedException LogicException
*/
function
testParseICalendarDateBadFormat
()
{
$dateTime
=
DateTimeParser
::
parseDate
(
'20100316T141405'
);
}
/**
* @dataProvider vcardDates
*/
function
testVCardDate
(
$input
,
$output
)
{
$this
->
assertEquals
(
$output
,
DateTimeParser
::
parseVCardDateTime
(
$input
)
);
}
/**
* @dataProvider vcardDates
* @expectedException \InvalidArgumentException
*/
function
testBadVCardDate
()
{
DateTimeParser
::
parseVCardDateTime
(
'1985---01'
);
}
/**
* @dataProvider vcardDates
* @expectedException \InvalidArgumentException
*/
function
testBadVCardTime
()
{
DateTimeParser
::
parseVCardTime
(
'23:12:166'
);
}
function
vcardDates
()
{
return
array
(
array
(
"19961022T140000"
,
array
(
"year"
=>
1996
,
"month"
=>
10
,
"date"
=>
22
,
"hour"
=>
14
,
"minute"
=>
00
,
"second"
=>
00
,
"timezone"
=>
null
),
),
array
(
"--1022T1400"
,
array
(
"year"
=>
null
,
"month"
=>
10
,
"date"
=>
22
,
"hour"
=>
14
,
"minute"
=>
00
,
"second"
=>
null
,
"timezone"
=>
null
),
),
array
(
"---22T14"
,
array
(
"year"
=>
null
,
"month"
=>
null
,
"date"
=>
22
,
"hour"
=>
14
,
"minute"
=>
null
,
"second"
=>
null
,
"timezone"
=>
null
),
),
array
(
"19850412"
,
array
(
"year"
=>
1985
,
"month"
=>
4
,
"date"
=>
12
,
"hour"
=>
null
,
"minute"
=>
null
,
"second"
=>
null
,
"timezone"
=>
null
),
),
array
(
"1985-04"
,
array
(
"year"
=>
1985
,
"month"
=>
04
,
"date"
=>
null
,
"hour"
=>
null
,
"minute"
=>
null
,
"second"
=>
null
,
"timezone"
=>
null
),
),
array
(
"1985"
,
array
(
"year"
=>
1985
,
"month"
=>
null
,
"date"
=>
null
,
"hour"
=>
null
,
"minute"
=>
null
,
"second"
=>
null
,
"timezone"
=>
null
),
),
array
(
"--0412"
,
array
(
"year"
=>
null
,
"month"
=>
4
,
"date"
=>
12
,
"hour"
=>
null
,
"minute"
=>
null
,
"second"
=>
null
,
"timezone"
=>
null
),
),
array
(
"---12"
,
array
(
"year"
=>
null
,
"month"
=>
null
,
"date"
=>
12
,
"hour"
=>
null
,
"minute"
=>
null
,
"second"
=>
null
,
"timezone"
=>
null
),
),
array
(
"T102200"
,
array
(
"year"
=>
null
,
"month"
=>
null
,
"date"
=>
null
,
"hour"
=>
10
,
"minute"
=>
22
,
"second"
=>
0
,
"timezone"
=>
null
),
),
array
(
"T1022"
,
array
(
"year"
=>
null
,
"month"
=>
null
,
"date"
=>
null
,
"hour"
=>
10
,
"minute"
=>
22
,
"second"
=>
null
,
"timezone"
=>
null
),
),
array
(
"T10"
,
array
(
"year"
=>
null
,
"month"
=>
null
,
"date"
=>
null
,
"hour"
=>
10
,
"minute"
=>
null
,
"second"
=>
null
,
"timezone"
=>
null
),
),
array
(
"T-2200"
,
array
(
"year"
=>
null
,
"month"
=>
null
,
"date"
=>
null
,
"hour"
=>
null
,
"minute"
=>
22
,
"second"
=>
00
,
"timezone"
=>
null
),
),
array
(
"T--00"
,
array
(
"year"
=>
null
,
"month"
=>
null
,
"date"
=>
null
,
"hour"
=>
null
,
"minute"
=>
null
,
"second"
=>
00
,
"timezone"
=>
null
),
),
array
(
"T102200Z"
,
array
(
"year"
=>
null
,
"month"
=>
null
,
"date"
=>
null
,
"hour"
=>
10
,
"minute"
=>
22
,
"second"
=>
00
,
"timezone"
=>
'Z'
),
),
array
(
"T102200-0800"
,
array
(
"year"
=>
null
,
"month"
=>
null
,
"date"
=>
null
,
"hour"
=>
10
,
"minute"
=>
22
,
"second"
=>
00
,
"timezone"
=>
'-0800'
),
),
// extended format
array
(
"2012-11-29T15:10:53Z"
,
array
(
"year"
=>
2012
,
"month"
=>
11
,
"date"
=>
29
,
"hour"
=>
15
,
"minute"
=>
10
,
"second"
=>
53
,
"timezone"
=>
'Z'
),
),
// with milliseconds
array
(
"20121129T151053.123Z"
,
array
(
"year"
=>
2012
,
"month"
=>
11
,
"date"
=>
29
,
"hour"
=>
15
,
"minute"
=>
10
,
"second"
=>
53
,
"timezone"
=>
'Z'
),
),
// extended format with milliseconds
array
(
"2012-11-29T15:10:53.123Z"
,
array
(
"year"
=>
2012
,
"month"
=>
11
,
"date"
=>
29
,
"hour"
=>
15
,
"minute"
=>
10
,
"second"
=>
53
,
"timezone"
=>
'Z'
),
),
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Mon, Dec 23, 3:43 AM (23 h, 48 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
915822
Default Alt Text
DateTimeParserTest.php (11 KB)
Attached To
rDAVCAL DokuWiki DAVCal PlugIn
Event Timeline
Log In to Comment