respect-validation/tests/unit/Rules/DirectoryTest.php
2017-11-12 14:22:22 +01:00

104 lines
2.9 KiB
PHP

<?php
/*
* This file is part of Respect/Validation.
*
* (c) Alexandre Gomes Gaigalas <alexandre@gaigalas.net>
*
* For the full copyright and license information, please view the "LICENSE.md"
* file that was distributed with this source code.
*/
namespace Respect\Validation\Rules;
use PHPUnit\Framework\TestCase;
/**
* @group rule
* @covers \Respect\Validation\Rules\Directory
* @covers \Respect\Validation\Exceptions\DirectoryException
*/
class DirectoryTest extends TestCase
{
/**
* @dataProvider providerForValidDirectory
*/
public function testValidDirectoryShouldReturnTrue($input)
{
$rule = new Directory();
$this->assertTrue($rule->__invoke($input));
$this->assertTrue($rule->assert($input));
$this->assertTrue($rule->check($input));
}
/**
* @dataProvider providerForInvalidDirectory
* @expectedException \Respect\Validation\Exceptions\DirectoryException
*/
public function testInvalidDirectoryShouldThrowException($input)
{
$rule = new Directory();
$this->assertFalse($rule->__invoke($input));
$this->assertFalse($rule->assert($input));
$this->assertFalse($rule->check($input));
}
/**
* @dataProvider providerForDirectoryObjects
*/
public function testDirectoryWithObjects($object, $valid)
{
$rule = new Directory();
$this->assertEquals($valid, $rule->validate($object));
}
public function providerForDirectoryObjects()
{
return [
[new \SplFileInfo(__DIR__), true],
[new \SplFileInfo(__FILE__), false],
/*
* PHP 5.4 does not allows to use SplFileObject with directories.
* array(new \SplFileObject(__DIR__), true),
*/
[new \SplFileObject(__FILE__), false],
];
}
public function providerForValidDirectory()
{
$directories = [
sys_get_temp_dir().DIRECTORY_SEPARATOR.'dataprovider-1',
sys_get_temp_dir().DIRECTORY_SEPARATOR.'dataprovider-2',
sys_get_temp_dir().DIRECTORY_SEPARATOR.'dataprovider-3',
sys_get_temp_dir().DIRECTORY_SEPARATOR.'dataprovider-4',
sys_get_temp_dir().DIRECTORY_SEPARATOR.'dataprovider-5',
];
return array_map(
function ($directory) {
if (!is_dir($directory)) {
mkdir($directory, 0766, true);
}
return [realpath($directory)];
},
$directories
);
}
public function providerForInvalidDirectory()
{
return array_chunk(
[
'',
__FILE__,
__DIR__.'/../../../../../README.md',
__DIR__.'/../../../../../composer.json',
new \stdClass(),
[__DIR__],
],
1
);
}
}