123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Component\Validator\Tests\Constraints;
- use Symfony\Bridge\PhpUnit\DnsMock;
- use Symfony\Component\Validator\Constraints\Email;
- use Symfony\Component\Validator\Constraints\EmailValidator;
- use Symfony\Component\Validator\Validation;
- /**
- * @group dns-sensitive
- */
- class EmailValidatorTest extends AbstractConstraintValidatorTest
- {
- protected function getApiVersion()
- {
- return Validation::API_VERSION_2_5;
- }
- protected function createValidator()
- {
- return new EmailValidator(false);
- }
- public function testNullIsValid()
- {
- $this->validator->validate(null, new Email());
- $this->assertNoViolation();
- }
- public function testEmptyStringIsValid()
- {
- $this->validator->validate('', new Email());
- $this->assertNoViolation();
- }
- /**
- * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
- */
- public function testExpectsStringCompatibleType()
- {
- $this->validator->validate(new \stdClass(), new Email());
- }
- /**
- * @dataProvider getValidEmails
- */
- public function testValidEmails($email)
- {
- $this->validator->validate($email, new Email());
- $this->assertNoViolation();
- }
- public function getValidEmails()
- {
- return array(
- array('fabien@symfony.com'),
- array('example@example.co.uk'),
- array('fabien_potencier@example.fr'),
- );
- }
- /**
- * @dataProvider getInvalidEmails
- */
- public function testInvalidEmails($email)
- {
- $constraint = new Email(array(
- 'message' => 'myMessage',
- ));
- $this->validator->validate($email, $constraint);
- $this->buildViolation('myMessage')
- ->setParameter('{{ value }}', '"'.$email.'"')
- ->setCode(Email::INVALID_FORMAT_ERROR)
- ->assertRaised();
- }
- public function getInvalidEmails()
- {
- return array(
- array('example'),
- array('example@'),
- array('example@localhost'),
- array('foo@example.com bar'),
- );
- }
- public function testStrict()
- {
- $constraint = new Email(array('strict' => true));
- $this->validator->validate('example@localhost', $constraint);
- $this->assertNoViolation();
- }
- /**
- * @dataProvider getDnsChecks
- * @requires function Symfony\Bridge\PhpUnit\DnsMock::withMockedHosts
- */
- public function testDnsChecks($type, $violation)
- {
- DnsMock::withMockedHosts(array('example.com' => array(array('type' => $violation ? false : $type))));
- $constraint = new Email(array(
- 'message' => 'myMessage',
- 'MX' === $type ? 'checkMX' : 'checkHost' => true,
- ));
- $this->validator->validate('foo@example.com', $constraint);
- if (!$violation) {
- $this->assertNoViolation();
- } else {
- $this->buildViolation('myMessage')
- ->setParameter('{{ value }}', '"foo@example.com"')
- ->setCode($violation)
- ->assertRaised();
- }
- }
- public function getDnsChecks()
- {
- return array(
- array('MX', false),
- array('MX', Email::MX_CHECK_FAILED_ERROR),
- array('A', false),
- array('A', Email::HOST_CHECK_FAILED_ERROR),
- array('AAAA', false),
- array('AAAA', Email::HOST_CHECK_FAILED_ERROR),
- );
- }
- /**
- * @requires function Symfony\Bridge\PhpUnit\DnsMock::withMockedHosts
- */
- public function testHostnameIsProperlyParsed()
- {
- DnsMock::withMockedHosts(array('baz.com' => array(array('type' => 'MX'))));
- $this->validator->validate(
- '"foo@bar"@baz.com',
- new Email(array('checkMX' => true))
- );
- $this->assertNoViolation();
- }
- /**
- * @dataProvider provideCheckTypes
- */
- public function testEmptyHostIsNotValid($checkType, $violation)
- {
- $this->validator->validate(
- 'foo@bar.fr@',
- new Email(array(
- 'message' => 'myMessage',
- $checkType => true,
- ))
- );
- $this
- ->buildViolation('myMessage')
- ->setParameter('{{ value }}', '"foo@bar.fr@"')
- ->setCode($violation)
- ->assertRaised();
- }
- public function provideCheckTypes()
- {
- return array(
- array('checkMX', Email::MX_CHECK_FAILED_ERROR),
- array('checkHost', Email::HOST_CHECK_FAILED_ERROR),
- );
- }
- }
|