From fc1d2af36c28ff853faa59fc799bbf05f1ab9410 Mon Sep 17 00:00:00 2001 From: Suralc Date: Mon, 29 Jul 2013 16:21:07 +0200 Subject: [PATCH] UrlValidator Tests --- framework/yii/validators/UrlValidator.php | 2 + .../framework/validators/FakedValidationModel.php | 5 ++ .../unit/framework/validators/UrlValidatorTest.php | 89 ++++++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 tests/unit/framework/validators/UrlValidatorTest.php diff --git a/framework/yii/validators/UrlValidator.php b/framework/yii/validators/UrlValidator.php index aa3dad1..c9b3a2b 100644 --- a/framework/yii/validators/UrlValidator.php +++ b/framework/yii/validators/UrlValidator.php @@ -54,7 +54,9 @@ class UrlValidator extends Validator { parent::init(); if ($this->enableIDN && !function_exists('idn_to_ascii')) { + // @codeCoverageIgnoreStart throw new InvalidConfigException('In order to use IDN validation intl extension must be installed and enabled.'); + // @codeCoverageIgnoreEnd } if ($this->message === null) { $this->message = Yii::t('yii', '{attribute} is not a valid URL.'); diff --git a/tests/unit/framework/validators/FakedValidationModel.php b/tests/unit/framework/validators/FakedValidationModel.php index d3c0424..89632c7 100644 --- a/tests/unit/framework/validators/FakedValidationModel.php +++ b/tests/unit/framework/validators/FakedValidationModel.php @@ -17,4 +17,9 @@ class FakedValidationModel { $this->errors[$attribute] = $message; } + + public function resetErrors() + { + $this->errors = array(); + } } \ No newline at end of file diff --git a/tests/unit/framework/validators/UrlValidatorTest.php b/tests/unit/framework/validators/UrlValidatorTest.php new file mode 100644 index 0000000..81ddf41 --- /dev/null +++ b/tests/unit/framework/validators/UrlValidatorTest.php @@ -0,0 +1,89 @@ +assertFalse($val->validateValue('google.de')); + $this->assertTrue($val->validateValue('http://google.de')); + $this->assertTrue($val->validateValue('https://google.de')); + $this->assertFalse($val->validateValue('htp://yiiframework.com')); + $this->assertTrue($val->validateValue('https://www.google.de/search?q=yii+framework&ie=utf-8&oe=utf-8' + .'&rls=org.mozilla:de:official&client=firefox-a&gws_rd=cr')); + $this->assertFalse($val->validateValue('ftp://ftp.ruhr-uni-bochum.de/')); + $this->assertFalse($val->validateValue('http://invalid,domain')); + $this->assertFalse($val->validateValue('http://äüö?=!"§$%&/()=}][{³²€.edu')); + } + + public function testValidateValueWithDefaultScheme() + { + $val = new UrlValidator(array('defaultScheme' => 'https')); + $this->assertTrue($val->validateValue('yiiframework.com')); + $this->assertTrue($val->validateValue('http://yiiframework.com')); + } + + public function testValidateWithCustomScheme() + { + $val = new UrlValidator(array( + 'validSchemes' => array('http', 'https', 'ftp', 'ftps'), + 'defaultScheme' => 'http', + )); + $this->assertTrue($val->validateValue('ftp://ftp.ruhr-uni-bochum.de/')); + $this->assertTrue($val->validateValue('google.de')); + $this->assertTrue($val->validateValue('http://google.de')); + $this->assertTrue($val->validateValue('https://google.de')); + $this->assertFalse($val->validateValue('htp://yiiframework.com')); + // relative urls not supported + $this->assertFalse($val->validateValue('//yiiframework.com')); + } + + public function testValidateWithIdn() + { + if(!function_exists('idn_to_ascii')) { + $this->markTestSkipped('intl package required'); + return; + } + $val = new UrlValidator(array( + 'enableIDN' => true, + )); + $this->assertTrue($val->validateValue('http://äüößìà.de')); + // converted via http://mct.verisign-grs.com/convertServlet + $this->assertTrue($val->validateValue('http://xn--zcack7ayc9a.de')); + } + + public function testValidateLength() + { + $url = 'http://' . str_pad('base', 2000, 'url') . '.de'; + $val = new UrlValidator; + $this->assertFalse($val->validateValue($url)); + } + + public function testValidateAttributeAndError() + { + $obj = new FakedValidationModel; + $obj->url = 'http://google.de'; + $val = new UrlValidator; + $val->validateAttribute($obj, 'url'); + $this->assertFalse(isset($obj->errors['url'])); + $this->assertSame('http://google.de', $obj->url); + $obj->resetErrors(); + $val->defaultScheme = 'http'; + $obj->url = 'google.de'; + $val->validateAttribute($obj, 'url'); + $this->assertFalse(isset($obj->errors['url'])); + $this->assertTrue(stripos($obj->url, 'http') !== false); + $obj->resetErrors(); + $obj->url = 'gttp;/invalid string'; + $val->validateAttribute($obj, 'url'); + $this->assertTrue(isset($obj->errors['url'])); + } +}