Psalm errors plus test for MultipleErrors reason and improved multi validation tests

This commit is contained in:
Eduardo Gulias Davis
2020-09-19 16:17:03 +02:00
parent 8405dcde01
commit 9512ac0b19
6 changed files with 66 additions and 7 deletions
+3
View File
@@ -11,6 +11,9 @@ use Egulias\EmailValidator\Result\Reason\ExpectingATEXT;
class LocalComment implements CommentStrategy
{
/**
* @var array
*/
private $warnings = [];
public function exitCondition(EmailLexer $lexer, int $openedParenthesis) : bool
+4 -1
View File
@@ -15,6 +15,10 @@ use Egulias\EmailValidator\Result\Reason\ExpectingATEXT;
class LocalPart extends Parser
{
/**
* Invalid lexer tokens for local part
* @var array
*/
private $invalidTokens = array(
EmailLexer::S_COMMA => EmailLexer::S_COMMA,
EmailLexer::S_CLOSEBRACKET => EmailLexer::S_CLOSEBRACKET,
@@ -91,7 +95,6 @@ class LocalPart extends Parser
private function parseLocalFWS() : Result
{
//use $this->parseFWS()
$foldingWS = new FoldingWhiteSpace($this->lexer);
$resultFWS = $foldingWS->parse();
if ($resultFWS->isValid()) {
+1 -1
View File
@@ -18,7 +18,7 @@ class MultipleErrors extends InvalidEmail
public function addReason(Reason $reason)
{
$this->errors[$reason->code()] = $reason;
$this->reasons[$reason->code()] = $reason;
}
/**
@@ -0,0 +1,17 @@
<?php
namespace Egulias\EmailValidator\Tests\EmailValidator\Dummy;
use Egulias\EmailValidator\Result\Reason\Reason;
class AnotherDummyReason implements Reason
{
public function code() : int
{
return 1;
}
public function description() : string
{
return 'Dummy Reason';
}
}
@@ -0,0 +1,35 @@
<?php
namespace Egulias\EmailValidator\Tests\EmailValidator\Reason;
use PHPUnit\Framework\TestCase;
use Egulias\EmailValidator\Result\MultipleErrors;
use Egulias\EmailValidator\Tests\EmailValidator\Dummy\AnotherDummyReason;
use Egulias\EmailValidator\Tests\EmailValidator\Dummy\DummyReason;
class MultipleErrorsTests extends TestCase
{
public function testRegisterSameReason()
{
$error1 = new DummyReason();
$error2 = new DummyReason();
$multiError = new MultipleErrors();
$multiError->addReason($error1);
$multiError->addReason($error2);
$this->assertCount(1, $multiError->getReasons());
}
public function testRegisterDifferentReasons()
{
$error1 = new DummyReason();
$error2 = new AnotherDummyReason();
$multiError = new MultipleErrors();
$multiError->addReason($error1);
$multiError->addReason($error2);
$this->assertCount(2, $multiError->getReasons());
}
}
@@ -6,6 +6,7 @@ use PHPUnit\Framework\TestCase;
use Egulias\EmailValidator\EmailLexer;
use Egulias\EmailValidator\Result\InvalidEmail;
use Egulias\EmailValidator\Result\MultipleErrors;
use Egulias\EmailValidator\Tests\EmailValidator\Dummy\AnotherDummyReason;
use Egulias\EmailValidator\Warning\DomainLiteral;
use Egulias\EmailValidator\Warning\AddressLiteral;
use Egulias\EmailValidator\Validation\RFCValidation;
@@ -85,9 +86,10 @@ class MultipleValidationWithAndTest extends TestCase
public function testGathersAllTheErrors()
{
$invalidEmail = new InvalidEmail(new DummyReason(), '');
$invalidEmail2 = new InvalidEmail(new AnotherDummyReason(), '');
$error1 = new DummyReason();
$error2 = new DummyReason();
$error2 = new AnotherDummyReason();
$expectedResult = new MultipleErrors();
$expectedResult->addReason($error1);
@@ -103,7 +105,7 @@ class MultipleValidationWithAndTest extends TestCase
$validation2 = $this->getMockBuilder(EmailValidation::class)->getMock();
$validation2->expects($this->once())->method("isValid")->willReturn(false);
$validation2->expects($this->once())->method("getWarnings")->willReturn([]);
$validation2->expects($this->exactly(2))->method("getError")->willReturn($invalidEmail);
$validation2->expects($this->exactly(2))->method("getError")->willReturn($invalidEmail2);
$multipleValidation = new MultipleValidationWithAnd([$validation1, $validation2]);
$multipleValidation->isValid("example@example.com", $lexer);
@@ -113,13 +115,12 @@ class MultipleValidationWithAndTest extends TestCase
public function testStopsAfterFirstError()
{
$invalidEmail = new InvalidEmail(new DummyReason(), '');
$invalidEmail2 = new InvalidEmail(new AnotherDummyReason(), '');
$error1 = new DummyReason();
$error2 = new DummyReason();
$expectedResult = new MultipleErrors();
$expectedResult->addReason($error1);
$expectedResult->addReason($error2);
$lexer = new EmailLexer();
@@ -131,7 +132,7 @@ class MultipleValidationWithAndTest extends TestCase
$validation2 = $this->getMockBuilder(EmailValidation::class)->getMock();
$validation2->expects($this->any())->method("isValid")->willReturn(false);
$validation2->expects($this->never())->method("getWarnings")->willReturn([]);
$validation1->expects($this->exactly(2))->method("getError")->willReturn($invalidEmail);
$validation1->expects($this->exactly(2))->method("getError")->willReturn($invalidEmail2);
$multipleValidation = new MultipleValidationWithAnd([$validation1, $validation2], MultipleValidationWithAnd::STOP_ON_ERROR);
$multipleValidation->isValid("example@example.com", $lexer);