예제 #1
0
 /**
  * Filters stack frames from PHPUnit classes.
  *
  * @param  Exception $e
  * @param  boolean   $asString
  * @return string
  */
 public static function getFilteredStacktrace(Exception $e, $asString = TRUE)
 {
     if (!defined('PHPUNIT_TESTSUITE')) {
         $blacklist = PHPUnit_Util_GlobalState::phpunitFiles();
     } else {
         $blacklist = array();
     }
     if ($asString === TRUE) {
         $filteredStacktrace = '';
     } else {
         $filteredStacktrace = array();
     }
     if ($e instanceof PHPUnit_Framework_SyntheticError) {
         $eTrace = $e->getSyntheticTrace();
         $eFile = $e->getSyntheticFile();
         $eLine = $e->getSyntheticLine();
     } else {
         $eTrace = $e->getTrace();
         $eFile = $e->getFile();
         $eLine = $e->getLine();
     }
     if (!self::frameExists($eTrace, $eFile, $eLine)) {
         array_unshift($eTrace, array('file' => $eFile, 'line' => $eLine));
     }
     foreach ($eTrace as $frame) {
         if (isset($frame['file']) && is_file($frame['file']) && !isset($blacklist[$frame['file']])) {
             if ($asString === TRUE) {
                 $filteredStacktrace .= sprintf("%s:%s\n", $frame['file'], isset($frame['line']) ? $frame['line'] : '?');
             } else {
                 $filteredStacktrace[] = $frame;
             }
         }
     }
     return $filteredStacktrace;
 }
예제 #2
0
 /**
  * Filters stack frames from PHPUnit classes.
  *
  * @param  Exception $e
  * @param  boolean   $asString
  * @return string
  */
 public static function getFilteredStacktrace(Exception $e, $asString = TRUE)
 {
     $prefix = FALSE;
     $script = realpath($GLOBALS['_SERVER']['SCRIPT_NAME']);
     if (defined('__PHPUNIT_PHAR__')) {
         $prefix = 'phar://' . __PHPUNIT_PHAR__ . '/';
     }
     if (!defined('PHPUNIT_TESTSUITE')) {
         $blacklist = PHPUnit_Util_GlobalState::phpunitFiles();
     } else {
         $blacklist = array();
     }
     if ($asString === TRUE) {
         $filteredStacktrace = '';
     } else {
         $filteredStacktrace = array();
     }
     if ($e instanceof PHPUnit_Framework_SyntheticError) {
         $eTrace = $e->getSyntheticTrace();
         $eFile = $e->getSyntheticFile();
         $eLine = $e->getSyntheticLine();
     } else {
         if ($e->getPrevious()) {
             $eTrace = $e->getPrevious()->getTrace();
         } else {
             $eTrace = $e->getTrace();
         }
         $eFile = $e->getFile();
         $eLine = $e->getLine();
     }
     if (!self::frameExists($eTrace, $eFile, $eLine)) {
         array_unshift($eTrace, array('file' => $eFile, 'line' => $eLine));
     }
     foreach ($eTrace as $frame) {
         if (isset($frame['file']) && is_file($frame['file']) && !isset($blacklist[$frame['file']]) && ($prefix === FALSE || strpos($frame['file'], $prefix) !== 0) && $frame['file'] !== $script) {
             if ($asString === TRUE) {
                 $filteredStacktrace .= sprintf("%s:%s\n", $frame['file'], isset($frame['line']) ? $frame['line'] : '?');
             } else {
                 $filteredStacktrace[] = $frame;
             }
         }
     }
     return $filteredStacktrace;
 }
예제 #3
0
 /**
  * @return array
  * @since  Method available since Release 3.6.0
  */
 public static function phpunitFiles()
 {
     if (self::$phpunitFiles === NULL) {
         self::$phpunitFiles = phpunit_autoload();
         if (function_exists('phpunit_mockobject_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, phpunit_mockobject_autoload());
         }
         if (function_exists('file_iterator_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, file_iterator_autoload());
         }
         if (function_exists('php_codecoverage_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, php_codecoverage_autoload());
         }
         if (function_exists('php_timer_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, php_timer_autoload());
         }
         if (function_exists('php_tokenstream_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, php_tokenstream_autoload());
         }
         if (function_exists('text_template_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, text_template_autoload());
         }
         if (function_exists('phpunit_dbunit_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, phpunit_dbunit_autoload());
         }
         if (function_exists('phpunit_selenium_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, phpunit_selenium_autoload());
         }
         if (function_exists('phpunit_story_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, phpunit_story_autoload());
         }
         if (function_exists('php_invoker_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, php_invoker_autoload());
         }
         foreach (self::$phpunitFiles as $key => $value) {
             self::$phpunitFiles[$key] = str_replace('/', DIRECTORY_SEPARATOR, $value);
         }
         self::$phpunitFiles = array_flip(self::$phpunitFiles);
     }
     return self::$phpunitFiles;
 }
예제 #4
0
 /**
  * @return array
  * @since  Method available since Release 3.6.0
  */
 public static function phpunitFiles()
 {
     if (self::$phpunitFiles === NULL) {
         self::$phpunitFiles = array_merge(phpunit_autoload(), phpunit_mockobject_autoload(), file_iterator_autoload(), php_codecoverage_autoload(), php_timer_autoload(), php_tokenstream_autoload(), text_template_autoload());
         if (function_exists('phpunit_dbunit_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, phpunit_dbunit_autoload());
         }
         if (function_exists('phpunit_selenium_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, phpunit_selenium_autoload());
         }
         if (function_exists('phpunit_story_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, phpunit_story_autoload());
         }
         if (function_exists('php_invoker_autoload')) {
             self::$phpunitFiles = array_merge(self::$phpunitFiles, php_invoker_autoload());
         }
         self::$phpunitFiles = array_flip(self::$phpunitFiles);
     }
     return self::$phpunitFiles;
 }
예제 #5
0
 /**
  * @return array
  * @since  Method available since Release 3.6.0
  */
 public static function phpunitFiles()
 {
     if (self::$phpunitFiles === NULL) {
         self::$phpunitFiles = array();
         self::addDirectoryContainingClassToPHPUnitFilesList('File_Iterator');
         self::addDirectoryContainingClassToPHPUnitFilesList('PHP_CodeCoverage');
         self::addDirectoryContainingClassToPHPUnitFilesList('PHP_Invoker');
         self::addDirectoryContainingClassToPHPUnitFilesList('PHP_Timer');
         self::addDirectoryContainingClassToPHPUnitFilesList('PHP_Token');
         self::addDirectoryContainingClassToPHPUnitFilesList('PHPUnit_Framework_TestCase', 2);
         self::addDirectoryContainingClassToPHPUnitFilesList('PHPUnit_Extensions_Database_TestCase', 2);
         self::addDirectoryContainingClassToPHPUnitFilesList('PHPUnit_Framework_MockObject_Generator', 2);
         self::addDirectoryContainingClassToPHPUnitFilesList('PHPUnit_Extensions_SeleniumTestCase', 2);
         self::addDirectoryContainingClassToPHPUnitFilesList('PHPUnit_Extensions_Story_TestCase', 2);
         self::addDirectoryContainingClassToPHPUnitFilesList('Text_Template');
     }
     return self::$phpunitFiles;
 }
예제 #6
0
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
require dirname(dirname(__FILE__)) . '/PHPUnit/Autoload.php';
$stub = <<<ENDSTUB
#!/usr/bin/env php
<?php
Phar::mapPhar('phpunit.phar');
require 'phar://phpunit.phar/PHPUnit/Autoload.php';
PHPUnit_TextUI_Command::main();
__HALT_COMPILER();
ENDSTUB;
$phar = new Phar('phpunit.phar', 0, 'phpunit.phar');
$phar->startBuffering();
$files = array_keys(PHPUnit_Util_GlobalState::phpunitFiles());
$offset = substr_count(dirname(__FILE__), '/');
foreach ($files as $file) {
    $phar->addFile($file, join('/', array_slice(explode('/', $file), $offset)));
}
$phar->setStub($stub);
$phar->stopBuffering();
예제 #7
0
 /**
  * Get the dependend classes of this test.
  *
  * @return       string[] An array containing class names as keys and path to the 
  *                        file's defining class as value.
  *
  * @author       Dominik del Bondio <*****@*****.**>
  * @since        1.1.0
  */
 private function getDependendClasses()
 {
     // We need to collect the dependend classes in case there is a test which
     // has set @agaviBootstrap to off. That results in the Agavi autoloader not
     // being started and if the test class depends on any files from Agavi (like
     // AgaviPhpUnitTestCase) it would not be loaded when the test is instantiated
     $classesInTest = array();
     $reflectionClass = new ReflectionClass(get_class($this));
     $testFile = $reflectionClass->getFileName();
     $getDeclaredFuncs = array('get_declared_classes', 'get_declared_interfaces');
     if (version_compare(PHP_VERSION, '5.4', '>=')) {
         $getDeclaredFuncs[] = 'get_declared_traits';
     }
     foreach ($getDeclaredFuncs as $getDeclaredFunc) {
         foreach ($getDeclaredFunc() as $name) {
             $reflectionClass = new ReflectionClass($name);
             if ($testFile === $reflectionClass->getFileName()) {
                 $classesInTest[] = $name;
             }
         }
     }
     // FIXME: added by phpunit 4.x
     if (class_exists('PHPUnit_Util_Blacklist')) {
         $blacklist = new PHPUnit_Util_Blacklist();
         $isBlacklisted = function ($file) use($testFile, $blacklist) {
             return $file === $testFile || $blacklist->isBlacklisted($file);
         };
     } elseif (is_callable(array('PHPUnit_Util_GlobalState', 'phpunitFiles'))) {
         $blacklist = PHPUnit_Util_GlobalState::phpunitFiles();
         $isBlacklisted = function ($file) use($testFile, $blacklist) {
             return $file === $testFile || isset($blacklist[$file]);
         };
     } else {
         $isBlacklisted = function ($file) use($testFile) {
             return $file === $testFile;
         };
     }
     $classesToFile = array('AgaviTesting' => realpath(__DIR__ . '/AgaviTesting.class.php'));
     foreach ($classesInTest as $className) {
         $classesToFile = array_merge($classesToFile, $this->getClassDependendFiles(new ReflectionClass($className), $isBlacklisted));
     }
     return $classesToFile;
 }