100 lines
3.0 KiB
PHP
100 lines
3.0 KiB
PHP
<?php
|
||
|
||
namespace Tests\Unit\Utilities;
|
||
|
||
use App\Utilities\Formatter;
|
||
use Tests\TestCase;
|
||
|
||
class FormatterTest extends TestCase
|
||
{
|
||
public function testNormalizeUrlWithoutQuery()
|
||
{
|
||
$formatter = new Formatter();
|
||
|
||
$url = 'http://example.com/path/to';
|
||
$this->assertEquals($url, $formatter->normalizeUrl($url));
|
||
}
|
||
|
||
public function testNormalizeUrlWithSortedQuery()
|
||
{
|
||
$formatter = new Formatter();
|
||
|
||
$url = 'http://example.com/path/to?foo=bar&hoge=fuga';
|
||
$this->assertEquals($url, $formatter->normalizeUrl($url));
|
||
}
|
||
|
||
public function testNormalizeUrlWithUnsortedQuery()
|
||
{
|
||
$formatter = new Formatter();
|
||
|
||
$url = 'http://example.com/path/to?hoge=fuga&foo=bar';
|
||
$this->assertEquals('http://example.com/path/to?foo=bar&hoge=fuga', $formatter->normalizeUrl($url));
|
||
}
|
||
|
||
public function testNormalizeUrlWithSortedQueryAndFragment()
|
||
{
|
||
$formatter = new Formatter();
|
||
|
||
$url = 'http://example.com/path/to?foo=bar&hoge=fuga#fragment';
|
||
$this->assertEquals($url, $formatter->normalizeUrl($url));
|
||
}
|
||
|
||
public function testNormalizeUrlWithFragment()
|
||
{
|
||
$formatter = new Formatter();
|
||
|
||
$url = 'http://example.com/path/to#fragment';
|
||
$this->assertEquals($url, $formatter->normalizeUrl($url));
|
||
}
|
||
|
||
public function testNormalizeUrlWithSortedQueryAndZeroLengthFragment()
|
||
{
|
||
$formatter = new Formatter();
|
||
|
||
$url = 'http://example.com/path/to?foo=bar&hoge=fuga#';
|
||
$this->assertEquals('http://example.com/path/to?foo=bar&hoge=fuga', $formatter->normalizeUrl($url));
|
||
}
|
||
|
||
public function testProfileImageSrcSet()
|
||
{
|
||
$formatter = new Formatter();
|
||
$profileImageProvider = new class() {
|
||
public function getProfileImageUrl(int $size)
|
||
{
|
||
return "https://example.com/$size.png";
|
||
}
|
||
};
|
||
|
||
$this->assertSame(
|
||
'https://example.com/128.png 1x,https://example.com/256.png 2x',
|
||
$formatter->profileImageSrcSet($profileImageProvider, 128, 2)
|
||
);
|
||
}
|
||
|
||
/**
|
||
* @dataProvider provideNormalizeTagName
|
||
*/
|
||
public function testNormalizeTagName($input, $expected)
|
||
{
|
||
$formatter = new Formatter();
|
||
|
||
$normalized = $formatter->normalizeTagName($input);
|
||
$this->assertSame($expected, $normalized);
|
||
$this->assertSame($expected, $formatter->normalizeTagName($normalized));
|
||
}
|
||
|
||
public function provideNormalizeTagName()
|
||
{
|
||
return [
|
||
'LowerCase' => ['example', 'example'],
|
||
'UpperCase' => ['EXAMPLE', 'example'],
|
||
'HalfWidthKana' => ['ティッシュ', 'ティッシュ'],
|
||
'FullWidthAlphabet' => ['Tissue', 'tissue'],
|
||
'組み文字1' => ['13㎝', '13cm'],
|
||
'組み文字2' => ['13㌢㍍', '13センチメートル'],
|
||
'Script' => ['ℬ𝒶𝒷𝓊𝓂𝒾', 'babumi'],
|
||
'NFD' => ['オカズ', 'オカズ'],
|
||
];
|
||
}
|
||
}
|