mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-03 14:54:04 +01:00
189 lines
6.6 KiB
PHP
189 lines
6.6 KiB
PHP
<?php
|
|
require_once('ValidatorTestModel.php');
|
|
|
|
class CUrlValidatorTest extends CTestCase
|
|
{
|
|
public function testEmpty()
|
|
{
|
|
$model = new ValidatorTestModel('CUrlValidatorTest');
|
|
$model->validate(array('url'));
|
|
$this->assertArrayHasKey('url', $model->getErrors());
|
|
}
|
|
|
|
public function testArbitraryUrl()
|
|
{
|
|
$urlValidator = new CUrlValidator();
|
|
$url = 'http://testing-arbitrary-domain.com/';
|
|
$result = $urlValidator->validateValue($url);
|
|
$this->assertEquals($url, $result);
|
|
}
|
|
|
|
public function providerIDNUrl()
|
|
{
|
|
return array(
|
|
// IDN validation enabled
|
|
array('http://президент.рф/', true, 'http://президент.рф/'),
|
|
array('http://bücher.de/?get=param', true, 'http://bücher.de/?get=param'),
|
|
array('http://检查域.cn/', true, 'http://检查域.cn/'),
|
|
array('http://mañana.com/', true, 'http://mañana.com/'),
|
|
array('http://☃-⌘.com/', true, 'http://☃-⌘.com/'),
|
|
array('http://google.com/', true, 'http://google.com/'),
|
|
array('https://www.yiiframework.com/forum/', true, 'https://www.yiiframework.com/forum/'),
|
|
array('https://www.yiiframework.com/extensions/', true, 'https://www.yiiframework.com/extensions/'),
|
|
array('ftp://www.yiiframework.com/', true, false),
|
|
array('www.yiiframework.com', true, false),
|
|
|
|
// IDN validation disabled
|
|
array('http://президент.рф/', false, false),
|
|
array('http://bücher.de/?get=param', false, false),
|
|
array('http://检查域.cn/', false, false),
|
|
array('http://mañana.com/', false, false),
|
|
array('http://☃-⌘.com/', false, false),
|
|
array('http://google.com/', false, 'http://google.com/'),
|
|
array('https://www.yiiframework.com/forum/', false, 'https://www.yiiframework.com/forum/'),
|
|
array('https://www.yiiframework.com/extensions/', false, 'https://www.yiiframework.com/extensions/'),
|
|
array('ftp://www.yiiframework.com/', false, false),
|
|
array('www.yiiframework.com', false, false),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerIDNUrl
|
|
*
|
|
* @param string $url
|
|
* @param boolean $validateIDN
|
|
* @param string $assertion
|
|
*/
|
|
public function testIDNUrl($url, $validateIDN, $assertion)
|
|
{
|
|
$urlValidator = new CUrlValidator();
|
|
$urlValidator->validateIDN = $validateIDN;
|
|
$result = $urlValidator->validateValue($url);
|
|
$this->assertEquals($assertion, $result);
|
|
}
|
|
|
|
public function providerValidSchemes()
|
|
{
|
|
return array(
|
|
array('ftp://yiiframework.com/', array('ftp', 'http', 'https'), 'ftp://yiiframework.com/'),
|
|
array('ftp://yiiframework.com/', array('http', 'https'), false),
|
|
array('ftp://yiiframework.com/', array('ftp'), 'ftp://yiiframework.com/'),
|
|
|
|
array('that-s-not-an-url-at-all', array('ftp', 'http', 'https'), false),
|
|
array('that-s-not-an-url-at-all', array(), false),
|
|
array('ftp://that-s-not-an-url-at-all', array('ftp'), false),
|
|
|
|
array('http://☹.com/', array('ftp'), false),
|
|
array('http://☹.com/', array('rsync'), false),
|
|
array('http://☹.com/', array('http', 'https'), false),
|
|
|
|
array('rsync://gentoo.org:873/distfiles/', array('rsync', 'http', 'https'), 'rsync://gentoo.org:873/distfiles/'),
|
|
array('rsync://gentoo.org:873/distfiles/', array('http', 'https'), false),
|
|
array('rsync://gentoo.org:873/distfiles/', array('rsync'), 'rsync://gentoo.org:873/distfiles/'),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerValidSchemes
|
|
*
|
|
* @param string $url
|
|
* @param array $validSchemes
|
|
* @param string $assertion
|
|
*/
|
|
public function testValidSchemes($url, $validSchemes, $assertion)
|
|
{
|
|
$urlValidator = new CUrlValidator();
|
|
$urlValidator->validSchemes = $validSchemes;
|
|
$result = $urlValidator->validateValue($url);
|
|
$this->assertEquals($assertion, $result);
|
|
}
|
|
|
|
public function providerDefaultScheme()
|
|
{
|
|
return array(
|
|
array('https://yiiframework.com/?get=param', null, 'https://yiiframework.com/?get=param'),
|
|
array('ftp://yiiframework.com/?get=param', null, false),
|
|
array('yiiframework.com/?get=param', null, false),
|
|
array('that-s-not-an-url-at-all', null, false),
|
|
|
|
array('http://yiiframework.com/?get=param', 'http', 'http://yiiframework.com/?get=param'),
|
|
array('ftp://yiiframework.com/?get=param', 'http', false),
|
|
array('yiiframework.com/?get=param', 'http', 'http://yiiframework.com/?get=param'),
|
|
array('that-s-not-an-url-at-all', 'http', false),
|
|
|
|
array('https://yiiframework.com/?get=param', 'ftp', 'https://yiiframework.com/?get=param'),
|
|
array('ftp://yiiframework.com/?get=param', 'ftp', false),
|
|
array('yiiframework.com/?get=param', 'ftp', false),
|
|
array('that-s-not-an-url-at-all', 'ftp', false),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerDefaultScheme
|
|
*
|
|
* @param string $url
|
|
* @param array $defaultScheme
|
|
* @param string $assertion
|
|
*/
|
|
public function testDefaultScheme($url, $defaultScheme, $assertion)
|
|
{
|
|
$urlValidator = new CUrlValidator();
|
|
$urlValidator->defaultScheme = $defaultScheme;
|
|
$result = $urlValidator->validateValue($url);
|
|
$this->assertEquals($assertion, $result);
|
|
}
|
|
|
|
|
|
public function providerAllowEmpty()
|
|
{
|
|
return array(
|
|
array('https://yiiframework.com/?get=param', false, 'https://yiiframework.com/?get=param'),
|
|
array('ftp://yiiframework.com/?get=param', false, false),
|
|
array('yiiframework.com/?get=param', false, false),
|
|
array('that-s-not-an-url-at-all', false, false),
|
|
array('http://☹.com/', false, false),
|
|
array('rsync://gentoo.org:873/distfiles/', false, false),
|
|
array('https://gentoo.org:8080/distfiles/', false, 'https://gentoo.org:8080/distfiles/'),
|
|
array(' ', false, false),
|
|
array('', false, false),
|
|
|
|
array('https://yiiframework.com/?get=param', true, 'https://yiiframework.com/?get=param'),
|
|
array('ftp://yiiframework.com/?get=param', true, false),
|
|
array('yiiframework.com/?get=param', true, false),
|
|
array('that-s-not-an-url-at-all', true, false),
|
|
array('http://☹.com/', true, false),
|
|
array('rsync://gentoo.org:873/distfiles/', true, false),
|
|
array('https://gentoo.org:8080/distfiles/', true, 'https://gentoo.org:8080/distfiles/'),
|
|
array(' ', true, false),
|
|
array('', true, ''),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerAllowEmpty
|
|
*
|
|
* @param string $url
|
|
* @param array $allowEmpty
|
|
* @param string $assertion
|
|
*/
|
|
public function testAllowEmpty($url, $allowEmpty, $assertion)
|
|
{
|
|
$urlValidator = new CUrlValidator();
|
|
$urlValidator->allowEmpty = $allowEmpty;
|
|
$result = $urlValidator->validateValue($url);
|
|
$this->assertEquals($assertion, $result);
|
|
}
|
|
|
|
/**
|
|
* https://github.com/yiisoft/yii/issues/1955
|
|
*/
|
|
public function testArrayValue()
|
|
{
|
|
$model=new ValidatorTestModel('CUrlValidatorTest');
|
|
$model->url=array('https://yiiframework.com/');
|
|
$model->validate(array('url'));
|
|
$this->assertTrue($model->hasErrors('url'));
|
|
$this->assertEquals(array('Url is not a valid URL.'),$model->getErrors('url'));
|
|
}
|
|
}
|