View source
<?php
namespace Symfony\Component\Validator\Tests\Constraints;
use Symfony\Component\Validator\Constraints\Url;
use Symfony\Component\Validator\Constraints\UrlValidator;
use Symfony\Component\Validator\Validation;
class UrlValidatorTest extends AbstractConstraintValidatorTest {
protected function getApiVersion() {
return Validation::API_VERSION_2_5;
}
protected function createValidator() {
return new UrlValidator();
}
public function testNullIsValid() {
$this->validator
->validate(null, new Url());
$this
->assertNoViolation();
}
public function testEmptyStringIsValid() {
$this->validator
->validate('', new Url());
$this
->assertNoViolation();
}
public function testExpectsStringCompatibleType() {
$this->validator
->validate(new \stdClass(), new Url());
}
public function testValidUrls($url) {
$this->validator
->validate($url, new Url());
$this
->assertNoViolation();
}
public function getValidUrls() {
return array(
array(
'http://a.pl',
),
array(
'http://www.google.com',
),
array(
'http://www.google.com.',
),
array(
'http://www.google.museum',
),
array(
'https://google.com/',
),
array(
'https://google.com:80/',
),
array(
'http://www.example.coop/',
),
array(
'http://www.test-example.com/',
),
array(
'http://www.symfony.com/',
),
array(
'http://symfony.fake/blog/',
),
array(
'http://symfony.com/?',
),
array(
'http://symfony.com/search?type=&q=url+validator',
),
array(
'http://symfony.com/#',
),
array(
'http://symfony.com/#?',
),
array(
'http://www.symfony.com/doc/current/book/validation.html#supported-constraints',
),
array(
'http://very.long.domain.name.com/',
),
array(
'http://localhost/',
),
array(
'http://127.0.0.1/',
),
array(
'http://127.0.0.1:80/',
),
array(
'http://[::1]/',
),
array(
'http://[::1]:80/',
),
array(
'http://[1:2:3::4:5:6:7]/',
),
array(
'http://sãopaulo.com/',
),
array(
'http://xn--sopaulo-xwa.com/',
),
array(
'http://sãopaulo.com.br/',
),
array(
'http://xn--sopaulo-xwa.com.br/',
),
array(
'http://пример.испытание/',
),
array(
'http://xn--e1afmkfd.xn--80akhbyknj4f/',
),
array(
'http://مثال.إختبار/',
),
array(
'http://xn--mgbh0fb.xn--kgbechtv/',
),
array(
'http://例子.测试/',
),
array(
'http://xn--fsqu00a.xn--0zwm56d/',
),
array(
'http://例子.測試/',
),
array(
'http://xn--fsqu00a.xn--g6w251d/',
),
array(
'http://例え.テスト/',
),
array(
'http://xn--r8jz45g.xn--zckzah/',
),
array(
'http://مثال.آزمایشی/',
),
array(
'http://xn--mgbh0fb.xn--hgbk6aj7f53bba/',
),
array(
'http://실례.테스트/',
),
array(
'http://xn--9n2bp8q.xn--9t4b11yi5a/',
),
array(
'http://العربية.idn.icann.org/',
),
array(
'http://xn--ogb.idn.icann.org/',
),
array(
'http://xn--e1afmkfd.xn--80akhbyknj4f.xn--e1afmkfd/',
),
array(
'http://xn--espaa-rta.xn--ca-ol-fsay5a/',
),
array(
'http://xn--d1abbgf6aiiy.xn--p1ai/',
),
array(
'http://☎.com/',
),
array(
'http://username:password@symfony.com',
),
array(
'http://user-name@symfony.com',
),
);
}
public function testInvalidUrls($url) {
$constraint = new Url(array(
'message' => 'myMessage',
));
$this->validator
->validate($url, $constraint);
$this
->buildViolation('myMessage')
->setParameter('{{ value }}', '"' . $url . '"')
->assertRaised();
}
public function getInvalidUrls() {
return array(
array(
'google.com',
),
array(
'://google.com',
),
array(
'http ://google.com',
),
array(
'http:/google.com',
),
array(
'http://goog_le.com',
),
array(
'http://google.com::aa',
),
array(
'http://google.com:aa',
),
array(
'http://symfony.com?',
),
array(
'http://symfony.com#',
),
array(
'ftp://google.fr',
),
array(
'faked://google.fr',
),
array(
'http://127.0.0.1:aa/',
),
array(
'ftp://[::1]/',
),
array(
'http://[::1',
),
array(
'http://hello.☎/',
),
array(
'http://:password@symfony.com',
),
array(
'http://:password@@symfony.com',
),
array(
'http://username:passwordsymfony.com',
),
array(
'http://usern@me:password@symfony.com',
),
);
}
public function testCustomProtocolIsValid($url) {
$constraint = new Url(array(
'protocols' => array(
'ftp',
'file',
'git',
),
));
$this->validator
->validate($url, $constraint);
$this
->assertNoViolation();
}
public function getValidCustomUrls() {
return array(
array(
'ftp://google.com',
),
array(
'file://127.0.0.1',
),
array(
'git://[::1]/',
),
);
}
}