mirror of
https://github.com/yiisoft/yii2.git
synced 2025-10-28 20:43:38 +08:00
117 lines
3.9 KiB
PHP
117 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace yiiunit\framework\helpers;
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
use yii\helpers\BaseUrl;
|
|
|
|
/**
|
|
* @group helpers
|
|
*/
|
|
class BaseUrlTest extends TestCase
|
|
{
|
|
/** @dataProvider relativeTrueUrlProvider */
|
|
public function testIsRelativeWillReturnTrue($url)
|
|
{
|
|
$this->assertTrue(BaseUrl::isRelative($url));
|
|
}
|
|
|
|
/** @dataProvider relativeFalseUrlProvider */
|
|
public function testIsRelativeWillReturnFalse($url)
|
|
{
|
|
$this->assertFalse(BaseUrl::isRelative($url));
|
|
}
|
|
|
|
/** @dataProvider ensureSchemeUrlProvider */
|
|
public function testEnsureScheme($url, $scheme, $expected)
|
|
{
|
|
$this->assertEquals($expected, BaseUrl::ensureScheme($url, $scheme));
|
|
}
|
|
|
|
public function ensureSchemeUrlProvider()
|
|
{
|
|
return [
|
|
'relative url and https scheme will return input url' => [
|
|
'url' => 'acme.com?name=bugs.bunny',
|
|
'scheme' => 'https',
|
|
'expected result' => 'acme.com?name=bugs.bunny',
|
|
],
|
|
'relative url and another url as parameter will return input url' => [
|
|
'url' => 'acme.com/test?tnt-link=https://tnt.com/',
|
|
'scheme' => 'https',
|
|
'expected' => 'acme.com/test?tnt-link=https://tnt.com/',
|
|
],
|
|
'url with scheme not a string will return input url' => [
|
|
'url' => 'acme.com?name=bugs.bunny',
|
|
'scheme' => 123,
|
|
'expected' => 'acme.com?name=bugs.bunny',
|
|
],
|
|
'protocol relative url and https scheme will be processed' => [
|
|
'url' => '//acme.com?characters/list',
|
|
'scheme' => 'https',
|
|
'expected' => 'https://acme.com?characters/list',
|
|
],
|
|
'protocol relative url and empty scheme will be returned' => [
|
|
'url' => '//acme.com?characters/list',
|
|
'scheme' => '',
|
|
'expected' => '//acme.com?characters/list',
|
|
],
|
|
'absolute url and empty scheme will create protocol relative url' => [
|
|
'url' => 'https://acme.com?characters/list',
|
|
'scheme' => '',
|
|
'expected' => '//acme.com?characters/list',
|
|
],
|
|
'absolute url and different scheme will be processed' => [
|
|
'url' => 'http://acme.com/test?tnt-link=https://tnt.com/',
|
|
'scheme' => 'https',
|
|
'expected' => 'https://acme.com/test?tnt-link=https://tnt.com/',
|
|
]
|
|
];
|
|
}
|
|
|
|
public function relativeTrueUrlProvider()
|
|
{
|
|
return [
|
|
'url url without protocol' => [
|
|
'url' => 'acme.com/tnt-room=123',
|
|
],
|
|
'url without protocol and another url in a parameter value' => [
|
|
'url' => 'acme.com?tnt-room-link=https://tnt.com',
|
|
],
|
|
'path only' => [
|
|
'url' => '/path',
|
|
],
|
|
'path with param' => [
|
|
'url' => '/path=/home/user',
|
|
],
|
|
];
|
|
}
|
|
|
|
public function relativeFalseUrlProvider()
|
|
{
|
|
return [
|
|
'url with https protocol' => [
|
|
'url' => 'https://acme.com',
|
|
],
|
|
'url with https protocol and ending slash' => [
|
|
'url' => 'https://acme.com/',
|
|
],
|
|
'url with https protocol and another url as param value' => [
|
|
'url' => 'https://acme.com?tnt-link=https://tnt.com',
|
|
],
|
|
'url starting with two slashes' => [
|
|
'url' => '//example.com',
|
|
],
|
|
'url with ftp protocol' => [
|
|
'url' => 'ftp://ftp.acme.com/tnt-suppliers.txt',
|
|
],
|
|
'url with http protocol' => [
|
|
'url' => 'http://no-protection.acme.com',
|
|
],
|
|
'file url' => [
|
|
'url' => 'file:///home/User/2ndFile.html',
|
|
]
|
|
];
|
|
}
|
|
}
|