<?php 
 
namespace Melody\Validation; 
 
use Melody\Validation\Common\Collections\ConstraintsCollection; 
use Melody\Validation\ValidationGroupsFactory; 
use Melody\Validation\Validator as v; 
 
class ValidatorTest extends \PHPUnit_Framework_TestCase 
{ 
    public function test_validate_email() 
    { 
        $validator = new Validator(); 
        $email = "[email protected]"; 
 
        $validEmail = v::email(); 
 
        $this->assertTrue($validEmail->validate($email)); 
        $this->assertTrue($validator->validate($email, $validEmail)); 
    } 
 
    public function test_validate_with_constraint_reuse() 
    { 
        $validEmail = v::email(); 
        $validUsername = $validEmail->add(v::minLength(10)->maxLength(20)); 
 
        $username = "[email protected]"; 
        $invalidMinLength = "invalid"; 
        $invalidMaxLength = "invalid"; 
        $invalidUsername = "invalid @email.com"; 
 
        $this->assertTrue($validUsername->validate($username)); 
        $this->assertFalse($validUsername->validate($invalidMinLength)); 
        $this->assertFalse($validUsername->validate($invalidMaxLength)); 
        $this->assertFalse($validUsername->validate($invalidUsername)); 
    } 
 
    public function test_validate_with_not_statement() 
    { 
        $validator = new Validator(); 
 
        $username = "marcelsud"; 
        $validUsername = v::length(6, 12)->alnum()->noWhitespace(); 
        $this->assertTrue($validUsername->validate($username)); 
 
        $password = "pass@2012"; 
        $validPassword = v::length(6, 12) 
            ->containsSpecial(1) 
            ->containsLetter(3) 
            ->containsDigit(2) 
            ->noWhitespace(); 
 
        $this->assertTrue($validator->validate($password, $validPassword)); 
        $this->assertTrue($validPassword->validate($password)); 
    } 
 
    public function test_custom_messages_from_validator_configuration() 
    { 
        $validator = new Validator(); 
 
        $validator->validate("marcelsud @gmail.com", v::email()); 
        $errors = $validator->getViolations(array( 
                'email' => "'{{input}}' deve conter um email válido" 
        )); 
 
        $this->assertEquals($errors['email'], "'marcelsud @gmail.com' deve conter um email válido"); 
    } 
 
    public function test_custom_messages_from_chained_validator_configuration() 
    { 
        $validEmail = v::email();
 
        $validEmail->validate("marcelsud @gmail.com");
 
        $errors = $validEmail->getViolations(array(
 
                'email' => "'{{input}}' deve conter um email válido"
 
        ));
 
 
        $this->assertEquals($errors['email'], "'marcelsud @gmail.com' deve conter um email válido"); 
    } 
 
    public function test_diplicated_constraint_exception() 
    { 
        $this->setExpectedException('InvalidArgumentException');
 
        $this->assertInstanceOf('InvalidArgumentException', v::email()->email()); 
    } 
} 
 
 |