/libs/PHPUnit-3.5.0/Util/Fileloader.php

https://github.com/quimateur/SIFO · PHP · 140 lines · 47 code · 14 blank · 79 comment · 8 complexity · 3267229d8b4c15d2772cb65d1318e8c0 MD5 · raw file

  1. <?php
  2. /**
  3. * PHPUnit
  4. *
  5. * Copyright (c) 2002-2011, Sebastian Bergmann <sebastian@phpunit.de>.
  6. * All rights reserved.
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions
  10. * are met:
  11. *
  12. * * Redistributions of source code must retain the above copyright
  13. * notice, this list of conditions and the following disclaimer.
  14. *
  15. * * Redistributions in binary form must reproduce the above copyright
  16. * notice, this list of conditions and the following disclaimer in
  17. * the documentation and/or other materials provided with the
  18. * distribution.
  19. *
  20. * * Neither the name of Sebastian Bergmann nor the names of his
  21. * contributors may be used to endorse or promote products derived
  22. * from this software without specific prior written permission.
  23. *
  24. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  25. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  26. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  27. * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  28. * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  29. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  30. * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  31. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  32. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  33. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  34. * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  35. * POSSIBILITY OF SUCH DAMAGE.
  36. *
  37. * @package PHPUnit
  38. * @subpackage Util
  39. * @author Sebastian Bergmann <sebastian@phpunit.de>
  40. * @copyright 2002-2011 Sebastian Bergmann <sebastian@phpunit.de>
  41. * @license http://www.opensource.org/licenses/bsd-license.php BSD License
  42. * @link http://www.phpunit.de/
  43. * @since File available since Release 2.3.0
  44. */
  45. /**
  46. * Utility methods to load PHP sourcefiles.
  47. *
  48. * @package PHPUnit
  49. * @subpackage Util
  50. * @author Sebastian Bergmann <sebastian@phpunit.de>
  51. * @copyright 2002-2011 Sebastian Bergmann <sebastian@phpunit.de>
  52. * @license http://www.opensource.org/licenses/bsd-license.php BSD License
  53. * @version Release: 3.5.13
  54. * @link http://www.phpunit.de/
  55. * @since Class available since Release 2.3.0
  56. */
  57. class PHPUnit_Util_Fileloader
  58. {
  59. /**
  60. * Checks if a PHP sourcefile is readable and is optionally checked for
  61. * syntax errors through the syntaxCheck() method. The sourcefile is
  62. * loaded through the load() method.
  63. *
  64. * @param string $filename
  65. * @param boolean $syntaxCheck
  66. * @return string
  67. * @throws RuntimeException
  68. */
  69. public static function checkAndLoad($filename, $syntaxCheck = FALSE)
  70. {
  71. $includePathFilename = PHPUnit_Util_Filesystem::fileExistsInIncludePath(
  72. $filename
  73. );
  74. if (!$includePathFilename || !is_readable($includePathFilename)) {
  75. throw new RuntimeException(
  76. sprintf('Cannot open file "%s".' . "\n", $filename)
  77. );
  78. }
  79. if ($syntaxCheck) {
  80. self::syntaxCheck($includePathFilename);
  81. }
  82. self::load($includePathFilename);
  83. return $includePathFilename;
  84. }
  85. /**
  86. * Loads a PHP sourcefile.
  87. *
  88. * @param string $filename
  89. * @return mixed
  90. * @since Method available since Release 3.0.0
  91. */
  92. public static function load($filename)
  93. {
  94. $oldVariableNames = array_keys(get_defined_vars());
  95. include_once $filename;
  96. $newVariables = get_defined_vars();
  97. $newVariableNames = array_diff(
  98. array_keys($newVariables), $oldVariableNames
  99. );
  100. foreach ($newVariableNames as $variableName) {
  101. if ($variableName != 'oldVariableNames') {
  102. $GLOBALS[$variableName] = $newVariables[$variableName];
  103. }
  104. }
  105. return $filename;
  106. }
  107. /**
  108. * Uses a separate process to perform a syntax check on a PHP sourcefile.
  109. *
  110. * @param string $filename
  111. * @throws RuntimeException
  112. * @since Method available since Release 3.0.0
  113. */
  114. protected static function syntaxCheck($filename)
  115. {
  116. $command = PHPUnit_Util_PHP::getPhpBinary();
  117. if (DIRECTORY_SEPARATOR == '\\') {
  118. $command = escapeshellarg($command);
  119. }
  120. $command .= ' -l ' . escapeshellarg($filename);
  121. $output = shell_exec($command);
  122. if (strpos($output, 'Errors parsing') !== FALSE) {
  123. throw new RuntimeException($output);
  124. }
  125. }
  126. }