diff --git a/framework/yii/validators/EmailValidator.php b/framework/yii/validators/EmailValidator.php index dba1d7b..116d8e3 100644 --- a/framework/yii/validators/EmailValidator.php +++ b/framework/yii/validators/EmailValidator.php @@ -64,7 +64,9 @@ class EmailValidator 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 email address.'); diff --git a/tests/unit/framework/validators/EmailValidatorTest.php b/tests/unit/framework/validators/EmailValidatorTest.php index 852b9f9..2a0de82 100644 --- a/tests/unit/framework/validators/EmailValidatorTest.php +++ b/tests/unit/framework/validators/EmailValidatorTest.php @@ -1,5 +1,6 @@ assertTrue($validator->validateValue('5011@gmail.com')); $this->assertFalse($validator->validateValue('test@example.com')); } + + public function testValidateAttribute() + { + $val = new EmailValidator(); + $model = new FakedValidationModel(); + $model->attr_email = '5011@gmail.com'; + $val->validateAttribute($model, 'attr_email'); + $this->assertFalse($model->hasErrors('attr_email')); + } + + public function testValidateValueIdn() + { + if (!function_exists('idn_to_ascii')) { + $this->markTestSkipped('Intl extension required'); + return; + } + $val = new EmailValidator(array('enableIDN' => true)); + $this->assertTrue($val->validateValue('5011@example.com')); + $this->assertTrue($val->validateValue('example@äüößìà.de')); + $this->assertTrue($val->validateValue('example@xn--zcack7ayc9a.de')); + } + + public function testValidateValueWithName() + { + $val = new EmailValidator(array('allowName' => true)); + $this->assertTrue($val->validateValue('test@example.com')); + $this->assertTrue($val->validateValue('John Smith ')); + $this->assertFalse($val->validateValue('John Smith ')); + } }