From 20db05bbdef7c523537f81eb86916169491fe7ad Mon Sep 17 00:00:00 2001 From: Anton Grebnev Date: Mon, 10 Oct 2011 14:22:44 +0400 Subject: [PATCH] AutoloadBuilder tested with vfsStream mock --- tests/util/AutoloadBuilderTestVFS.php | 130 ++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 tests/util/AutoloadBuilderTestVFS.php diff --git a/tests/util/AutoloadBuilderTestVFS.php b/tests/util/AutoloadBuilderTestVFS.php new file mode 100644 index 0000000..ae31499 --- /dev/null +++ b/tests/util/AutoloadBuilderTestVFS.php @@ -0,0 +1,130 @@ + + * @link http://netmonsters.ru + * @package Majestic + * @subpackage UnitTests + * @since 2011-10-.. + * + * Unit tests for AutoloadBuilder class + */ + +require_once 'vfsStream/vfsStream.php'; +require_once dirname(__FILE__) . '/../../util/AutoloadBuilder.php'; + +/** + * @TODO: AutoloadBuilder - fix writing to file: construct array first, write to file next - atomic operation + * @TODO: vfsStream doesn't work with SPLFIleObject->getRealPath - $file->getPath .'/'. $file->getFIleName instead + */ +class AutoloadBuilderTestVFS extends PHPUnit_Framework_TestCase +{ + + private static $inc_dirs = array(); + private static $file; + private $root; + private $array = array(); + + /** + * @TODO: Load->buildAutoload() - uses two paths - PATH . '/' . APP . '/src' and PATH . '/lib' those are not checked. Can couse error. + * @expectedException UnexpectedValueException + * @expectedException PHPUnit_Framework_Error + */ + public function setUp() + { + if (!defined('PATH')) { + define('PATH', realpath(dirname(__FILE__) . '/../../../..')); + } + + if (!defined('APP')) { + define('APP', 'lib/core/tests/face'); + } + + vfsStreamWrapper::register(); + $this->root = vfsStream::create( + array( + 'cache' => array( + 'face' => array() + ), + 'face' => array( + 'src' => array( + 'Registry.php' => ' class Registry' + ) + ), + 'lib' => array( + 'Registry.php' => ' class Registry', + 'Load.php' => 'class Load extends Registry', + 'devel.config' => ' development config file' + ) + ) + ); + vfsStreamWrapper::setRoot($this->root); + } + + public function testVFS() + { + $builder = new AutoloadBuilder(vfsStream::url('root/cache/face/autoload.php'), array(vfsStream::url('root/lib'), vfsStream::url('root/face/src'))); + $this->assertTrue($this->root->hasChild('lib')); + $this->assertFalse($this->root->hasChild('nochild')); + $this->assertFalse($this->root->hasChild('cache/face/autoload.php')); + $handle = fopen(vfsStream::url('root/cache/face/autoload.php'), 'w'); + fwrite($handle, 'new string'); + fclose($handle); + $this->assertTrue($this->root->hasChild('cache/face/autoload.php')); + $this->assertSame('new string', $this->root->getChild('cache/face/autoload.php')->getContent()); + } + + public function testBuild() + { + $this->markTestSkipped( + 'AutoloadBuilder uses $file->getRealPath method, that doesn`t work properly with vfsStream.' + ); + $builder = new AutoloadBuilder(vfsStream::url('root/cache/face/autoload.php'), array(vfsStream::url('root/lib'), vfsStream::url('root/face/src'))); + $builder->build(); + $this->assertTrue($this->root->hasChild('cache/face/autoload.php')); + $this->assertFileExists(vfsStream::url('root/cache/face/autoload.php')); + } + + public function testAutoloadArray() + { + $this->markTestSkipped( + 'AutoloadBuilder uses $file->getRealPath method, that doesn`t work properly with vfsStream.' + ); + $this->assertFileNotExists(vfsStream::url('root/cache/face/autoload.php')); + $builder = new AutoloadBuilder(vfsStream::url('root/cache/face/autoload.php'), array(vfsStream::url('root/lib'), vfsStream::url('root/face/src'))); + $builder->build(); + $this->assertFileExists(vfsStream::url('root/cache/face/autoload.php')); + $this->assertEmpty($this->array); + $this->array = require vfsStream::url('root/cache/face/autoload.php'); + $this->assertInternalType('array', $this->array); + $this->assertArrayHasKey('Load', $this->array); + $this->assertArrayNotHasKey('Key', $this->array); + $this->assertEquals(2, count($this->array)); + } + + public function testAutoloadHasNoAccess() + { + $this->markTestSkipped( + 'AutoloadBuilder uses $file->getRealPath method, that doesn`t work properly with vfsStream.' + ); + $this->assertFileNotExists(vfsStream::url('root/cache/face/autoload.php')); + $autoloadFIle = new vfsStreamFile('cache/face/autoload.php', 0400); + $this->root->addChild($autoloadFIle); + $builder = new AutoloadBuilder(vfsStream::url('root/cache/face/autoload.php'), array(vfsStream::url('root/lib'), vfsStream::url('root/face/src'))); + $builder->build(); + $this->assertFileExists(vfsStream::url('root/cache/face/autoload.php')); + $this->assertEmpty($this->root->getChild('cache/face/autoload.php')->getContent()); + $this->array = require vfsStream::url('root/cache/face/autoload.php'); + $this->assertInternalType('integer', $this->array); + + $autoloadFIle->chmod(0777); + $builder = new AutoloadBuilder(vfsStream::url('root/cache/face/autoload.php'), array(vfsStream::url('root/lib'), vfsStream::url('root/face/src'))); + $builder->build(); + $this->assertFileExists(vfsStream::url('root/cache/face/autoload.php')); + $this->assertNotEmpty($this->root->getChild('cache/face/autoload.php')->getContent()); + $this->array = require vfsStream::url('root/cache/face/autoload.php'); + $this->assertInternalType('array', $this->array); + $this->assertNotEmpty($this->array); + } + +} \ No newline at end of file