You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
5.0 KiB
176 lines
5.0 KiB
<?php
|
|
|
|
/*
|
|
* @copyright NetMonsters <team@netmonsters.ru>
|
|
* @link http://netmonsters.ru
|
|
* @package Majestic
|
|
* @subpackage UnitTests
|
|
* @since 2011-10-28
|
|
*
|
|
* Unit tests for AutoloadBuilder class
|
|
*/
|
|
|
|
require_once dirname(__FILE__) . '/../../util/AutoloadBuilder.php';
|
|
|
|
/**
|
|
* @TODO: AutoloadBuilder - fix writing to file: construct array first, write to file next - atomic operation
|
|
*/
|
|
class AutoloadBuilderTest extends PHPUnit_Framework_TestCase
|
|
{
|
|
|
|
private static $inc_dirs = array();
|
|
|
|
private static $file;
|
|
|
|
private static $path;
|
|
|
|
private static $lib_path;
|
|
|
|
private static $app;
|
|
|
|
public function run(PHPUnit_Framework_TestResult $result = NULL)
|
|
{
|
|
$this->setPreserveGlobalState(false);
|
|
return parent::run($result);
|
|
}
|
|
|
|
/**
|
|
* @TODO: Load->buildAutoload() - uses two paths - PATH . '/' . APP . '/src' and PATH . '/lib' those are not checked. Can couse error.
|
|
*/
|
|
public static function setUpBeforeClass()
|
|
{
|
|
self::$path = realpath(dirname(__FILE__) . '/../../../..');
|
|
self::$lib_path = realpath(dirname(__FILE__) . '/../..');
|
|
self::$app = 'lib/core/tests/face';
|
|
|
|
self::$file = self::$path . '/' . self::$app . '/cache/autoload.php';
|
|
|
|
self::$inc_dirs[self::$path . '/' . self::$app . '/src'] = true;
|
|
self::$inc_dirs[self::$path . '/' . self::$app . '/cache'] = true;
|
|
self::$inc_dirs[self::$lib_path . '/'] = true;
|
|
|
|
foreach (self::$inc_dirs as $dir => &$is_exist) {
|
|
if (!file_exists($dir)) {
|
|
$is_exist = false;
|
|
mkdir($dir, 0777, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @TODO: AutoloadBuilder - check input params: string for filename, array for dirs
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testBuildParams()
|
|
{
|
|
$this->setConstants();
|
|
$autoload = self::$file;
|
|
$dirs = 'string';
|
|
$builder = new AutoloadBuilder($autoload, $dirs);
|
|
|
|
$this->setExpectedException('PHPUnit_Framework_Error');
|
|
$builder->build();
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testBuild()
|
|
{
|
|
$this->setConstants();
|
|
$builder = new AutoloadBuilder(self::$file, array_keys(self::$inc_dirs));
|
|
|
|
$this->assertFileNotExists(self::$file);
|
|
$builder->build();
|
|
|
|
$this->assertFileExists(self::$file);
|
|
|
|
$array = require self::$file;
|
|
$this->assertFileExists(self::$file);
|
|
$this->assertInternalType('array', $array);
|
|
$this->assertNotEmpty($array);
|
|
$this->assertArrayHasKey('AutoloadBuilder', $array);
|
|
$this->assertArrayHasKey('Load', $array);
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testBuildWithExcluded()
|
|
{
|
|
$this->setConstants();
|
|
$builder = new AutoloadBuilder(self::$file, array_keys(self::$inc_dirs), array(self::$lib_path . '/app/'));
|
|
|
|
$this->assertFileNotExists(self::$file);
|
|
$builder->build();
|
|
|
|
$this->assertFileExists(self::$file);
|
|
|
|
$array = require self::$file;
|
|
$this->assertInternalType('array', $array);
|
|
$this->assertNotEmpty($array);
|
|
$this->assertArrayHasKey('AutoloadBuilder', $array);
|
|
$this->assertArrayNotHasKey('FrontController', $array);
|
|
$this->assertArrayNotHasKey('AjaxAction', $array);
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testAccessDenied()
|
|
{
|
|
$this->setConstants();
|
|
|
|
$this->assertFileNotExists(self::$file);
|
|
|
|
$path = dirname(self::$file);
|
|
chmod($path, 0400);
|
|
$builder = new AutoloadBuilder(self::$file, array(self::$path . '/' . self::$app . '/src', self::$path . '/' . self::$app . '/cache', self::$path . '/lib'));
|
|
|
|
$this->setExpectedException('PHPUnit_Framework_Error', 'Permission denied');
|
|
$builder->build();
|
|
chmod(self::$file, 0777);
|
|
}
|
|
|
|
public static function tearDownAfterClass()
|
|
{
|
|
if (file_exists(self::$file)) {
|
|
unlink(self::$file);
|
|
}
|
|
|
|
foreach (self::$inc_dirs as $dir => $is_exist) {
|
|
if (!$is_exist) {
|
|
self::rrmdir($dir);
|
|
}
|
|
}
|
|
self::rrmdir(self::$path . '/' . self::$app);
|
|
}
|
|
|
|
private function setConstants()
|
|
{
|
|
if (!defined('PATH')) {
|
|
define('PATH', realpath(dirname(__FILE__) . '/../../../..'));
|
|
}
|
|
if (!defined('APP')) {
|
|
define('APP', 'lib/core/tests/face');
|
|
}
|
|
}
|
|
|
|
public static function rrmdir($dir)
|
|
{
|
|
if (is_dir($dir)) {
|
|
$objects = scandir($dir);
|
|
foreach ($objects as $object) {
|
|
if ($object != "." && $object != "..") {
|
|
if (filetype($dir . "/" . $object) == "dir") {
|
|
self::rrmdir($dir . "/" . $object);
|
|
} else {
|
|
unlink($dir . "/" . $object);
|
|
}
|
|
}
|
|
}
|
|
reset($objects);
|
|
rmdir($dir);
|
|
}
|
|
}
|
|
}
|