mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 14:46:19 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			124 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						||
/**
 | 
						||
 * @link http://www.yiiframework.com/
 | 
						||
 * @copyright Copyright (c) 2008 Yii Software LLC
 | 
						||
 * @license http://www.yiiframework.com/license/
 | 
						||
 */
 | 
						||
 | 
						||
namespace yiiunit\framework\helpers;
 | 
						||
 | 
						||
use Yii;
 | 
						||
use yii\helpers\FormatConverter;
 | 
						||
use yii\i18n\Formatter;
 | 
						||
use yiiunit\framework\i18n\IntlTestHelper;
 | 
						||
use yiiunit\TestCase;
 | 
						||
 | 
						||
/**
 | 
						||
 * @group helpers
 | 
						||
 * @group i18n
 | 
						||
 */
 | 
						||
class FormatConverterTest extends TestCase
 | 
						||
{
 | 
						||
    protected function setUp()
 | 
						||
    {
 | 
						||
        parent::setUp();
 | 
						||
 | 
						||
        IntlTestHelper::setIntlStatus($this);
 | 
						||
 | 
						||
        $this->mockApplication([
 | 
						||
            'timeZone' => 'UTC',
 | 
						||
            'language' => 'ru-RU',
 | 
						||
        ]);
 | 
						||
    }
 | 
						||
 | 
						||
    protected function tearDown()
 | 
						||
    {
 | 
						||
        parent::tearDown();
 | 
						||
        IntlTestHelper::resetIntlStatus();
 | 
						||
    }
 | 
						||
 | 
						||
    public function testIntlIcuToPhpShortForm()
 | 
						||
    {
 | 
						||
        $this->assertEquals('n/j/y', FormatConverter::convertDateIcuToPhp('short', 'date', 'en-US'));
 | 
						||
        $this->assertEquals('d.m.y', FormatConverter::convertDateIcuToPhp('short', 'date', 'de-DE'));
 | 
						||
    }
 | 
						||
 | 
						||
    public function testEscapedIcuToPhp()
 | 
						||
    {
 | 
						||
        $this->assertEquals('l, F j, Y \\a\\t g:i:s A T', FormatConverter::convertDateIcuToPhp('EEEE, MMMM d, y \'at\' h:mm:ss a zzzz'));
 | 
						||
        $this->assertEquals('\\o\\\'\\c\\l\\o\\c\\k', FormatConverter::convertDateIcuToPhp('\'o\'\'clock\''));
 | 
						||
    }
 | 
						||
 | 
						||
    public function testEscapedIcuToJui()
 | 
						||
    {
 | 
						||
        $this->assertEquals('l, F j, Y \\a\\t g:i:s A T', FormatConverter::convertDateIcuToPhp('EEEE, MMMM d, y \'at\' h:mm:ss a zzzz'));
 | 
						||
        $this->assertEquals('\'o\'\'clock\'', FormatConverter::convertDateIcuToJui('\'o\'\'clock\''));
 | 
						||
    }
 | 
						||
 | 
						||
    public function testIntlOneDigitIcu()
 | 
						||
    {
 | 
						||
        $formatter = new Formatter(['locale' => 'en-US']);
 | 
						||
        $this->assertEquals('24.8.2014', $formatter->asDate('2014-8-24', 'php:d.n.Y'));
 | 
						||
        $this->assertEquals('24.8.2014', $formatter->asDate('2014-8-24', 'd.M.yyyy'));
 | 
						||
        $this->assertEquals('24.8.2014', $formatter->asDate('2014-8-24', 'd.L.yyyy'));
 | 
						||
    }
 | 
						||
 | 
						||
    public function testOneDigitIcu()
 | 
						||
    {
 | 
						||
        $formatter = new Formatter(['locale' => 'en-US']);
 | 
						||
        $this->assertEquals('24.8.2014', $formatter->asDate('2014-8-24', 'php:d.n.Y'));
 | 
						||
        $this->assertEquals('24.8.2014', $formatter->asDate('2014-8-24', 'd.M.yyyy'));
 | 
						||
        $this->assertEquals('24.8.2014', $formatter->asDate('2014-8-24', 'd.L.yyyy'));
 | 
						||
    }
 | 
						||
 | 
						||
    public function testIntlUtf8Ru()
 | 
						||
    {
 | 
						||
        $this->assertEquals('d M Y \г.', FormatConverter::convertDateIcuToPhp("dd MMM y 'г'.", 'date', 'ru-RU'));
 | 
						||
        $this->assertEquals("dd M yy 'г'.", FormatConverter::convertDateIcuToJui("dd MMM y 'г'.", 'date', 'ru-RU'));
 | 
						||
 | 
						||
        $formatter = new Formatter(['locale' => 'ru-RU']);
 | 
						||
        // There is a dot after month name in updated ICU data and no dot in old data. Both are acceptable.
 | 
						||
        // See https://github.com/yiisoft/yii2/issues/9906
 | 
						||
        $this->assertRegExp('/24 авг\.? 2014 г\./', $formatter->asDate('2014-8-24', "dd MMM y 'г'."));
 | 
						||
    }
 | 
						||
 | 
						||
    public function testPhpToICU()
 | 
						||
    {
 | 
						||
        $expected = "yyyy-MM-dd'T'HH:mm:ssxxx";
 | 
						||
        $actual = FormatConverter::convertDatePhpToIcu('Y-m-d\TH:i:sP');
 | 
						||
        $this->assertEquals($expected, $actual);
 | 
						||
 | 
						||
        $expected = "yyyy-MM-dd'Yii'HH:mm:ssxxx";
 | 
						||
        $actual = FormatConverter::convertDatePhpToIcu('Y-m-d\Y\i\iH:i:sP');
 | 
						||
        $this->assertEquals($expected, $actual);
 | 
						||
 | 
						||
        $expected = "yyyy-MM-dd'Yii'HH:mm:ssxxx''''";
 | 
						||
        $actual = FormatConverter::convertDatePhpToIcu("Y-m-d\Y\i\iH:i:sP''");
 | 
						||
        $this->assertEquals($expected, $actual);
 | 
						||
 | 
						||
        $expected = "yyyy-MM-dd'Yii'\HH:mm:ssxxx''''";
 | 
						||
        $actual = FormatConverter::convertDatePhpToIcu("Y-m-d\Y\i\i\\\\H:i:sP''");
 | 
						||
        $this->assertEquals($expected, $actual);
 | 
						||
 | 
						||
        $expected = "'dDjlNSwZWFmMntLoYyaBghHisueIOPTZcru'";
 | 
						||
        $actual = FormatConverter::convertDatePhpToIcu('\d\D\j\l\N\S\w\Z\W\F\m\M\n\t\L\o\Y\y\a\B\g\h\H\i\s\u\e\I\O\P\T\Z\c\r\u');
 | 
						||
        $this->assertEquals($expected, $actual);
 | 
						||
 | 
						||
        $expected = "yyyy-MM-dd'T'HH:mm:ssxxx";
 | 
						||
        $actual = FormatConverter::convertDatePhpToIcu('c');
 | 
						||
        $this->assertEquals($expected, $actual);
 | 
						||
    }
 | 
						||
 | 
						||
    public function testPhpFormatC()
 | 
						||
    {
 | 
						||
        $time = time();
 | 
						||
 | 
						||
        $formatter = new Formatter(['locale' => 'en-US']);
 | 
						||
        $this->assertEquals(date('c', $time), $formatter->asDatetime($time, 'php:c'));
 | 
						||
 | 
						||
        date_default_timezone_set('Europe/Moscow');
 | 
						||
        $formatter = new Formatter(['locale' => 'ru-RU', 'timeZone' => 'Europe/Moscow']);
 | 
						||
        $this->assertEquals(date('c', $time), $formatter->asDatetime($time, 'php:c'));
 | 
						||
    }
 | 
						||
}
 |