1<?php 2 3/* 4 * This file is part of Respect/Validation. 5 * 6 * (c) Alexandre Gomes Gaigalas <alexandre@gaigalas.net> 7 * 8 * For the full copyright and license information, please view the "LICENSE.md" 9 * file that was distributed with this source code. 10 */ 11 12namespace Respect\Validation\Exceptions; 13 14use DirectoryIterator; 15use ReflectionClass; 16 17class CheckExceptionsTest extends \PHPUnit_Framework_TestCase 18{ 19 protected $deprecateds = ['Iterable']; 20 21 public function provideListOfRuleNames() 22 { 23 $rulesDirectory = 'library/Rules'; 24 $rulesDirectoryIterator = new DirectoryIterator($rulesDirectory); 25 $ruleNames = []; 26 foreach ($rulesDirectoryIterator as $fileInfo) { 27 if ($fileInfo->isDir()) { 28 continue; 29 } 30 31 $ruleName = substr($fileInfo->getBasename(), 0, -4); 32 $ruleIsDeprecated = in_array($ruleName, $this->deprecateds); 33 $isRuleClassFile = (bool) ($fileInfo->getExtension() !== 'php'); 34 if ($ruleIsDeprecated || $isRuleClassFile) { 35 continue; 36 } 37 38 $className = 'Respect\\Validation\\Rules\\'.$ruleName; 39 $reflectionClass = new ReflectionClass($className); 40 if ($reflectionClass->isAbstract() || $reflectionClass->isInterface()) { 41 continue; 42 } 43 44 $ruleNames[] = [$ruleName]; 45 } 46 47 return $ruleNames; 48 } 49 50 /** 51 * @dataProvider provideListOfRuleNames 52 */ 53 public function testRuleHasAnExceptionWhichHasValidApi($ruleName) 54 { 55 $exceptionClass = 'Respect\\Validation\\Exceptions\\'.$ruleName.'Exception'; 56 $this->assertTrue( 57 class_exists($exceptionClass), 58 sprintf('Expected exception class to exist: %s.', $ruleName) 59 ); 60 61 $expectedMessage = 'Test exception message.'; 62 $exceptionObject = new $exceptionClass($expectedMessage); 63 $this->assertInstanceOf( 64 'Exception', 65 $exceptionObject, 66 'Every exception should extend an Exception class.' 67 ); 68 $this->assertInstanceOf( 69 'Respect\Validation\Exceptions\ValidationException', 70 $exceptionObject, 71 'Every Respect/Validation exception must extend ValidationException.' 72 ); 73 } 74} 75