Browse Source

modified Load and AutoloadBuilder tests for vfs

master
Anton Grebnev 13 years ago
parent
commit
dfbe1e2966
  1. 125
      tests/LoadTest.php

125
tests/LoadTest.php

@ -11,72 +11,111 @@
*/ */
require dirname(__FILE__) . '/../Load.php'; require dirname(__FILE__) . '/../Load.php';
require_once 'vfsStream/vfsStream.php';
class LoadTest extends PHPUnit_Framework_TestCase class LoadTest extends PHPUnit_Framework_TestCase
{ {
private static $inc_dirs = array(); private static $inc_dirs = array();
private static $file; 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() 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 = '<?php return array("Db" => "/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')) { if (!defined('APP')) {
define('APP', 'lib/core/tests/face'); 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); Load::setAutoloadFrom(self::$file);
$autoload = require(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(); * @TODO: Load::autoload() needs self::$autoload = require(self::$file); after self::buildAutoload();
*/ */
public function testDebugAutoload() public function testDebugAutoload()
{ {
$this->setUp();
Load::setAutoloadFrom(self::$file); Load::setAutoloadFrom(self::$file);
$autoload = require(self::$file); $autoload = require(self::$file);
$this->assertNotEmpty($autoload); $this->assertNotEmpty($autoload);
if(!defined('DEBUG')) {
if (!defined('DEBUG')) {
define('DEBUG', true); define('DEBUG', true);
} }
Load::autoload('Func');
Load::autoload('Captcha');
Load::autoload('Some');
Load::autoload('RedisDebug');
} }
public function testAutoloadArrayExists() public function testAutoloadArrayExists()
{ {
$this->assertFileExists(self::$file); $this->assertFileExists(self::$file);
@ -95,13 +134,13 @@ class LoadTest extends PHPUnit_Framework_TestCase
{ {
$autoload = require(self::$file); $autoload = require(self::$file);
$this->assertNotEmpty($autoload); $this->assertNotEmpty($autoload);
$this->assertArrayHasKey('Action', $autoload);
$this->assertArrayHasKey('Db', $autoload);
} }
public function testAutoloadGetFilePath() public function testAutoloadGetFilePath()
{ {
$autoload = require(self::$file); $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')); $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);
}
} }
Loading…
Cancel
Save