<?php
namespace Jasny\Twig;
use Jasny\Twig\DateExtension;
use Jasny\Twig\TestHelper;
/**
* @covers Jasny\Twig\DateExtension
*/
class DateExtensionTest extends \PHPUnit_Framework_TestCase
{
use TestHelper;
public function setUp()
{
date_default_timezone_set('UTC');
\Locale::setDefault("en_EN");
}
protected function getExtension()
{
return new DateExtension();
}
public function localDateTimeProvider()
{
return [
['9/20/2015', '20-09-2015', "{{ '20-09-2015'|localdate }}"],
['September 20, 2015', '20 september 2015', "{{ '20-09-2015'|localdate('long') }}"],
['9/20/15', "20-09-15", "{{ '20-09-2015'|localdate('short') }}"],
['Sunday, September 20, 2015', "zondag 20 september 2015", "{{ '20-09-2015'|localdate('full') }}"],
['20|09|2015', "20|09|2015", "{{ '20-09-2015'|localdate('dd|MM|yyyy') }}"],
['11:14 PM', "23:14", "{{ '23:14:12'|localtime }}"],
['11:14:12 PM GMT', "23:14:12 GMT", "{{ '23:14:12'|localtime('long') }}"],
['11:14 PM', "23:14", "{{ '23:14:12'|localtime('short') }}"],
['11:14:12 PM GMT', "23:14:12 GMT", "{{ '23:14:12'|localtime('full') }}"],
['23|14|12', "23|14|12", "{{ '23:14:12'|localtime('HH|mm|ss') }}"],
// NOTE: a `replace` is used to remove the comma, which seems to be inconsistant accross environments.
['9/20/2015 11:14 PM', '20-09-2015 23:14', "{{ '20-09-2015 23:14:12'|localdatetime|replace({',': ''}) }}"],
['20|23', '20|23', "{{ '20-09-2015 23:14:12'|localdatetime('dd|HH') }}"],
[
'9/20/15 11:14:12 PM GMT',
'20-09-15 23:14:12 GMT',
"{{ '20-09-2015 23:14:12'|localdatetime({date: 'short', time: 'full'})|replace({',': ''}) }}"
],
[
'20150920 11:14:12 PM GMT',
'20150920 23:14:12 GMT',
"{{ '20-09-2015 23:14:12'|localdatetime({date: 'yyyyMMdd', time: 'full'}) }}"
]
];
}
/**
* @dataProvider localDateTimeProvider
*
* @param string $en
* @param string $nl
* @param string $template
*/
public function testLocalDateTimeEn($en, $nl, $template)
{
if (!\Locale::setDefault("en_EN")) {
return $this->markAsSkipped("Unable to set locale to 'en_EN'");
}
$this->assertRender($en, $template);
}
/**
* @dataProvider localDateTimeProvider
*
* @param string $en
* @param string $nl
* @param string $template
*/
public function testLocalDateTimeNL($en, $nl, $template)
{
if (!\Locale::setDefault("nl_NL")) {
return $this->markAsSkipped("Unable to set locale to 'nl_NL'");
}
$this->assertRender($nl, $template);
}
public function durationProvider()
{
return [
['31s', "{{ 31|duration }}"],
['17m 31s', "{{ 1051|duration }}"],
['3h 17m 31s', "{{ 11851|duration }}"],
['2d 3h 17m 31s', "{{ 184651|duration }}"],
['3w 2d 3h 17m 31s', "{{ 1999051|duration }}"],
['1y 3w 2d 3h 17m 31s', "{{ 33448651|duration }}"],
['17 minute(s)', "{{ 1051|duration([null, ' minute(s)', ' hour(s)', ' day(s)']) }}"],
['3 hour(s)', "{{ 11851|duration([null, null, ' hour(s)']) }}"],
['2 day(s)', "{{ 184651|duration([null, null, null, ' day(s)']) }}"],
['3 week(s)', "{{ 1999051|duration([null, null, null, null, ' week(s)']) }}"],
['1 year(s)', "{{ 33448651|duration([null, null, null, null, null, ' year(s)']) }}"],
['3u:17m', "{{ 11851|duration([null, 'm', 'u'], ':') }}"],
['3:17h', "{{ 11851|duration([null, '', ''], ':') }}h"],
];
}
/**
* @dataProvider durationProvider
*
* @param string $expect
* @param string $template
*/
public function testDuration($expect, $template)
{
$this->assertRender($expect, $template);
}
public function ageProvider()
{
$time = time() - (((32 * 365) + 100) * 24 * 3600);
$date = date('Y-m-d', $time);
return [
['32', "{{ $time|age }}"],
['32', "{{ '$date'|age }}"]
];
}
/**
* @dataProvider ageProvider
*
* @param string $expect
* @param string $template
*/
public function testAge($expect, $template)
{
$this->assertRender($expect, $template);
}
public function filterProvider()
{
return [
['localdate'],
['localtime'],
['localdatetime'],
['duration'],
['age']
];
}
/**
* @dataProvider filterProvider
*
* @param string $filter
*/
public function testWithNull($filter)
{
$this->assertRender('-', '{{ null|' . $filter . '("//")|default("-") }}');
}
}