Вход Регистрация
Файл: symfony-2.7/src/Symfony/Bundle/FrameworkBundle/Test/KernelTestCase.php
Строк: 225
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyBundleFrameworkBundleTest;

use 
SymfonyComponentFinderFinder;
use 
SymfonyComponentHttpKernelKernelInterface;

/**
 * KernelTestCase is the base class for tests needing a Kernel.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
abstract class KernelTestCase extends PHPUnit_Framework_TestCase
{
    protected static 
$class;

    
/**
     * @var KernelInterface
     */
    
protected static $kernel;

    
/**
     * Finds the directory where the phpunit.xml(.dist) is stored.
     *
     * If you run tests with the PHPUnit CLI tool, everything will work as expected.
     * If not, override this method in your test classes.
     *
     * @return string The directory where phpunit.xml(.dist) is stored
     *
     * @throws RuntimeException
     */
    
protected static function getPhpUnitXmlDir()
    {
        if (!isset(
$_SERVER['argv']) || false === strpos($_SERVER['argv'][0], 'phpunit')) {
            throw new 
RuntimeException('You must override the KernelTestCase::createKernel() method.');
        }

        
$dir = static::getPhpUnitCliConfigArgument();
        if (
null === $dir &&
            (
is_file(getcwd().DIRECTORY_SEPARATOR.'phpunit.xml') ||
            
is_file(getcwd().DIRECTORY_SEPARATOR.'phpunit.xml.dist'))) {
            
$dir getcwd();
        }

        
// Can't continue
        
if (null === $dir) {
            throw new 
RuntimeException('Unable to guess the Kernel directory.');
        }

        if (!
is_dir($dir)) {
            
$dir dirname($dir);
        }

        return 
$dir;
    }

    
/**
     * Finds the value of the CLI configuration option.
     *
     * PHPUnit will use the last configuration argument on the command line, so this only returns
     * the last configuration argument.
     *
     * @return string The value of the PHPUnit CLI configuration option
     */
    
private static function getPhpUnitCliConfigArgument()
    {
        
$dir null;
        
$reversedArgs array_reverse($_SERVER['argv']);
        foreach (
$reversedArgs as $argIndex => $testArg) {
            if (
preg_match('/^-[^ -]*c$/'$testArg) || $testArg === '--configuration') {
                
$dir realpath($reversedArgs[$argIndex 1]);
                break;
            } elseif (
strpos($testArg'--configuration=') === 0) {
                
$argPath substr($testArgstrlen('--configuration='));
                
$dir realpath($argPath);
                break;
            }
        }

        return 
$dir;
    }

    
/**
     * Attempts to guess the kernel location.
     *
     * When the Kernel is located, the file is required.
     *
     * @return string The Kernel class name
     *
     * @throws RuntimeException
     */
    
protected static function getKernelClass()
    {
        if (isset(
$_SERVER['KERNEL_DIR'])) {
            
$dir $_SERVER['KERNEL_DIR'];

            if (!
is_dir($dir)) {
                
$phpUnitDir = static::getPhpUnitXmlDir();
                if (
is_dir("$phpUnitDir/$dir")) {
                    
$dir "$phpUnitDir/$dir";
                }
            }
        } else {
            
$dir = static::getPhpUnitXmlDir();
        }

        
$finder = new Finder();
        
$finder->name('*Kernel.php')->depth(0)->in($dir);
        
$results iterator_to_array($finder);
        if (!
count($results)) {
            throw new 
RuntimeException('Either set KERNEL_DIR in your phpunit.xml according to http://symfony.com/doc/current/book/testing.html#your-first-functional-test or override the WebTestCase::createKernel() method.');
        }

        
$file current($results);
        
$class $file->getBasename('.php');

        require_once 
$file;

        return 
$class;
    }

    
/**
     * Boots the Kernel for this test.
     *
     * @param array $options
     */
    
protected static function bootKernel(array $options = array())
    {
        static::
ensureKernelShutdown();

        static::
$kernel = static::createKernel($options);
        static::
$kernel->boot();
    }

    
/**
     * Creates a Kernel.
     *
     * Available options:
     *
     *  * environment
     *  * debug
     *
     * @param array $options An array of options
     *
     * @return KernelInterface A KernelInterface instance
     */
    
protected static function createKernel(array $options = array())
    {
        if (
null === static::$class) {
            static::
$class = static::getKernelClass();
        }

        return new static::
$class(
            isset(
$options['environment']) ? $options['environment'] : 'test',
            isset(
$options['debug']) ? $options['debug'] : true
        
);
    }

    
/**
     * Shuts the kernel down if it was used in the test.
     */
    
protected static function ensureKernelShutdown()
    {
        if (
null !== static::$kernel) {
            static::
$kernel->shutdown();
        }
    }

    
/**
     * Clean up Kernel usage in this test.
     */
    
protected function tearDown()
    {
        static::
ensureKernelShutdown();
    }
}
Онлайн: 0
Реклама