PageRenderTime 43ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/PHPUnit/Runner/StandardTestSuiteLoader.php

https://github.com/item/sugarcrm_dev
PHP | 166 lines | 99 code | 4 blank | 63 comment | 1 complexity | 3fbfb62ccdc39b52f40aa9dab3b909aa MD5 | raw file
Possible License(s): AGPL-3.0, LGPL-2.1
  1. <?php
  2. /**
  3. * PHPUnit
  4. *
  5. * Copyright (c) 2002-2009, Sebastian Bergmann <sb@sebastian-bergmann.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. * @category Testing
  38. * @package PHPUnit
  39. * @author Sebastian Bergmann <sb@sebastian-bergmann.de>
  40. * @copyright 2002-2009 Sebastian Bergmann <sb@sebastian-bergmann.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.0.0
  44. */
  45. require_once 'PHPUnit/Util/Filter.php';
  46. require_once 'PHPUnit/Runner/TestSuiteLoader.php';
  47. require_once 'PHPUnit/Util/Class.php';
  48. require_once 'PHPUnit/Util/Fileloader.php';
  49. PHPUnit_Util_Filter::addFileToFilter(__FILE__, 'PHPUNIT');
  50. /**
  51. * The standard test suite loader.
  52. *
  53. * @category Testing
  54. * @package PHPUnit
  55. * @author Sebastian Bergmann <sb@sebastian-bergmann.de>
  56. * @copyright 2002-2009 Sebastian Bergmann <sb@sebastian-bergmann.de>
  57. * @license http://www.opensource.org/licenses/bsd-license.php BSD License
  58. * @version Release: 3.3.17
  59. * @link http://www.phpunit.de/
  60. * @since Class available since Release 2.0.0
  61. */
  62. class PHPUnit_Runner_StandardTestSuiteLoader implements PHPUnit_Runner_TestSuiteLoader
  63. {
  64. /**
  65. * @param string $suiteClassName
  66. * @param string $suiteClassFile
  67. * @param boolean $syntaxCheck
  68. * @return ReflectionClass
  69. * @throws RuntimeException
  70. */
  71. public function load($suiteClassName, $suiteClassFile = '', $syntaxCheck = TRUE)
  72. {
  73. $suiteClassName = str_replace('.php', '', $suiteClassName);
  74. if (empty($suiteClassFile)) {
  75. $suiteClassFile = str_replace(array('_', '\\'), DIRECTORY_SEPARATOR, $suiteClassName) . '.php';
  76. }
  77. if (!class_exists($suiteClassName, FALSE)) {
  78. if (!file_exists($suiteClassFile)) {
  79. $includePaths = explode(PATH_SEPARATOR, get_include_path());
  80. foreach ($includePaths as $includePath) {
  81. $file = $includePath . DIRECTORY_SEPARATOR . $suiteClassFile;
  82. if (file_exists($file)) {
  83. $suiteClassFile = $file;
  84. break;
  85. }
  86. }
  87. }
  88. PHPUnit_Util_Class::collectStart();
  89. PHPUnit_Util_Fileloader::checkAndLoad($suiteClassFile, $syntaxCheck);
  90. $loadedClasses = PHPUnit_Util_Class::collectEnd();
  91. }
  92. if (!class_exists($suiteClassName, FALSE) && !empty($loadedClasses)) {
  93. $offset = 0 - strlen($suiteClassName);
  94. foreach ($loadedClasses as $loadedClass) {
  95. if (substr($loadedClass, $offset) === $suiteClassName) {
  96. $suiteClassName = $loadedClass;
  97. break;
  98. }
  99. }
  100. }
  101. if (!class_exists($suiteClassName, FALSE) && !empty($loadedClasses)) {
  102. $testCaseClass = 'PHPUnit_Framework_TestCase';
  103. foreach ($loadedClasses as $loadedClass) {
  104. $class = new ReflectionClass($loadedClass);
  105. if ($class->isSubclassOf($testCaseClass)) {
  106. $suiteClassName = $loadedClass;
  107. $testCaseClass = $loadedClass;
  108. if ($class->getFileName() == realpath($suiteClassFile)) {
  109. break;
  110. }
  111. }
  112. if ($class->hasMethod('suite')) {
  113. $method = $class->getMethod('suite');
  114. if (!$method->isAbstract() && $method->isPublic() && $method->isStatic()) {
  115. $suiteClassName = $loadedClass;
  116. break;
  117. }
  118. }
  119. }
  120. }
  121. if (class_exists($suiteClassName, FALSE)) {
  122. $class = new ReflectionClass($suiteClassName);
  123. if ($class->getFileName() == realpath($suiteClassFile)) {
  124. return $class;
  125. }
  126. }
  127. throw new RuntimeException(
  128. sprintf(
  129. 'Class %s could not be found in %s.',
  130. $suiteClassName,
  131. $suiteClassFile
  132. )
  133. );
  134. }
  135. /**
  136. * @param ReflectionClass $aClass
  137. * @return ReflectionClass
  138. */
  139. public function reload(ReflectionClass $aClass)
  140. {
  141. return $aClass;
  142. }
  143. }
  144. ?>