From dfbe1e29668a70a7491815f7a8bad2d8849ac599 Mon Sep 17 00:00:00 2001 From: Anton Grebnev Date: Fri, 28 Oct 2011 10:44:54 +0400 Subject: [PATCH] modified Load and AutoloadBuilder tests for vfs --- tests/LoadTest.php | 125 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 87 insertions(+), 38 deletions(-) diff --git a/tests/LoadTest.php b/tests/LoadTest.php index 388827b..ea7d086 100644 --- a/tests/LoadTest.php +++ b/tests/LoadTest.php @@ -11,72 +11,111 @@ */ require dirname(__FILE__) . '/../Load.php'; +require_once 'vfsStream/vfsStream.php'; class LoadTest extends PHPUnit_Framework_TestCase { private static $inc_dirs = array(); + private static $file; + private $root; + + public static $file_contents; + public static $autoload_array; + /** * @TODO: Load->buildAutoload() should recieve AutoloadBuilder as a parameter - * @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 + * @TODO: Load->buildAutoload() - uses two paths - PATH . '/' . APP . '/src' and PATH . '/lib' those are not checked. Can cause error. */ - public static function setUpBeforeClass() + public function setUp() { - if (!defined('PATH')) { - define('PATH', realpath(dirname(__FILE__) . '/../../..')); + self::$file_contents = ' "/lib/core/model/Db.php", "RedisDebug" => "/lib/core/redis/RedisDebug.php"); ?>'; + self::$autoload_array = array('Db' => '/lib/core/model/Db.php', 'RedisDebug' => '/lib/core/redis/RedisDebug.php'); + + vfsStreamWrapper::register(); + $this->root = vfsStream::create( + array( + 'lib' => array( + 'core' => + array( + 'util' => array( + 'AutoloadBuilder.php' => '' + ), + 'model' => array( + 'Db.php' => '', + ), + 'redis' => array( + 'RedisDebug.php' => '' + ), + 'Registry.php' => '', + 'Load.php' => '', + 'devel.config' => ' development config file' + ) + ), + 'autoload.php' => self::$file_contents + ) + ); + + if (!class_exists('AutoloadBuilder')) { + $this->getMock('AutoloadBuilder'); } -// default application name + if (!defined('PATH')) { + //define('PATH', realpath(dirname(__FILE__) . '/../../../')); + define('PATH', vfsStream::url('root')); + } if (!defined('APP')) { define('APP', 'lib/core/tests/face'); } - self::$file = PATH . '/' . APP . '/cache/autoload.php'; + vfsStreamWrapper::setRoot($this->root); - // value - if dir exists (to delete it if it was created), default true - self::$inc_dirs[PATH . '/' . APP . '/src'] = true; - self::$inc_dirs[PATH . '/' . APP . '/cache'] = true; - self::$inc_dirs[PATH . '/lib'] = true; + self::$file = vfsStream::url('root/autoload.php'); - foreach (self::$inc_dirs as $dir => &$is_exist) { - if (!file_exists($dir)) { - $is_exist = false; - mkdir($dir, 0777, true); - } - } + set_new_overload(array($this, 'newCallback')); } - public function testSetAutoLoadFrom() + public function testSetAutoLoadFromExistingFile() { - // autoload Load::setAutoloadFrom(self::$file); $autoload = require(self::$file); - $this->assertNotEmpty($autoload); - Load::autoload('Action'); + $this->assertEquals(self::$autoload_array, $autoload); + Load::autoload('Db'); } - + + public function testAutoloadFromNonExistingFile() + { + $this->assertTrue($this->root->removeChild('autoload.php')); + $this->assertFileNotExists(self::$file); + + Load::setAutoloadFrom(self::$file); + $autoload = require(self::$file); + + $this->assertEquals(self::$autoload_array, $autoload); + } + /** * @TODO: Load::autoload() needs self::$autoload = require(self::$file); after self::buildAutoload(); */ public function testDebugAutoload() { + $this->setUp(); Load::setAutoloadFrom(self::$file); $autoload = require(self::$file); $this->assertNotEmpty($autoload); - - if(!defined('DEBUG')) { + + if (!defined('DEBUG')) { define('DEBUG', true); } - Load::autoload('Func'); - Load::autoload('Captcha'); + Load::autoload('Some'); + Load::autoload('RedisDebug'); } + public function testAutoloadArrayExists() { $this->assertFileExists(self::$file); @@ -95,13 +134,13 @@ class LoadTest extends PHPUnit_Framework_TestCase { $autoload = require(self::$file); $this->assertNotEmpty($autoload); - $this->assertArrayHasKey('Action', $autoload); + $this->assertArrayHasKey('Db', $autoload); } public function testAutoloadGetFilePath() { $autoload = require(self::$file); - $this->assertNotEmpty(Load::getFilePath('Registry')); + $this->assertNotEmpty(Load::getFilePath('RedisDebug')); } /** @@ -114,18 +153,28 @@ class LoadTest extends PHPUnit_Framework_TestCase $this->assertNotEmpty(Load::getFilePath('anton')); } - public static function tearDownAfterClass() + protected function newCallback($className) { - if (file_exists(self::$file)) { - unlink(self::$file); + switch ($className) { + case 'AutoloadBuilder': + return 'AutoloadBuilderMock'; + default: + return $className; } + } - foreach (self::$inc_dirs as $dir => $is_exist) { - if (!$is_exist) { - rmdir($dir); - } - } - rmdir(PATH . '/' . APP); + public function tearDown() + { + unset_new_overload(); } +} +class AutoloadBuilderMock +{ + public function build() + { + $file = new vfsStreamFile('autoload.php'); + $file->setContent(LoadTest::$file_contents); + vfsStreamWrapper::getRoot()->addChild($file); + } } \ No newline at end of file