/libs/PHPUnit-3.4.2/PHPUnit/Extensions/OutputTestCase.php

https://github.com/quimateur/SIFO · PHP · 211 lines · 90 code · 25 blank · 96 comment · 15 complexity · 77dac1b4d7a69a7d91ef10dc33e251d6 MD5 · raw file

  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. * @version SVN: $Id: OutputTestCase.php 5135 2009-08-27 08:37:36Z sb $
  43. * @link http://www.phpunit.de/
  44. * @since File available since Release 3.0.0
  45. */
  46. require_once 'PHPUnit/Framework.php';
  47. require_once 'PHPUnit/Util/Filter.php';
  48. PHPUnit_Util_Filter::addFileToFilter(__FILE__, 'PHPUNIT');
  49. /**
  50. * A TestCase that expects a specified output.
  51. *
  52. * @category Testing
  53. * @package PHPUnit
  54. * @author Sebastian Bergmann <sb@sebastian-bergmann.de>
  55. * @copyright 2002-2009 Sebastian Bergmann <sb@sebastian-bergmann.de>
  56. * @license http://www.opensource.org/licenses/bsd-license.php BSD License
  57. * @version Release: 3.4.2
  58. * @link http://www.phpunit.de/
  59. * @since Class available since Release 3.0.0
  60. */
  61. abstract class PHPUnit_Extensions_OutputTestCase extends PHPUnit_Framework_TestCase
  62. {
  63. /**
  64. * @var string
  65. */
  66. protected $expectedRegex = NULL;
  67. /**
  68. * @var string
  69. */
  70. protected $expectedString = NULL;
  71. /**
  72. * @var string
  73. */
  74. protected $output = '';
  75. /**
  76. * @var boolean
  77. */
  78. protected $obActive = FALSE;
  79. /**
  80. * @var mixed
  81. */
  82. protected $outputCallback = FALSE;
  83. /**
  84. * @return bool
  85. */
  86. public function setOutputCallback($callback)
  87. {
  88. if (is_callable($callback)) {
  89. $this->outputCallback = $callback;
  90. $set = TRUE;
  91. } else {
  92. $set = FALSE;
  93. }
  94. return $set;
  95. }
  96. /**
  97. * @return string
  98. */
  99. public function normalizeOutput($buffer)
  100. {
  101. return str_replace("\r", '', $buffer);
  102. }
  103. /**
  104. * @return string
  105. */
  106. public function getActualOutput()
  107. {
  108. if (!$this->obActive) {
  109. return $this->output;
  110. } else {
  111. return ob_get_contents();
  112. }
  113. }
  114. /**
  115. * @return string
  116. */
  117. public function expectedRegex()
  118. {
  119. return $this->expectedRegex;
  120. }
  121. /**
  122. * @param string $expectedRegex
  123. */
  124. public function expectOutputRegex($expectedRegex)
  125. {
  126. if ($this->expectedString !== NULL) {
  127. throw new PHPUnit_Framework_Exception;
  128. }
  129. if (is_string($expectedRegex) || is_null($expectedRegex)) {
  130. $this->expectedRegex = $expectedRegex;
  131. }
  132. }
  133. /**
  134. * @return string
  135. */
  136. public function expectedString()
  137. {
  138. return $this->expectedOutput;
  139. }
  140. /**
  141. * @param string $expectedString
  142. */
  143. public function expectOutputString($expectedString)
  144. {
  145. if ($this->expectedRegex !== NULL) {
  146. throw new PHPUnit_Framework_Exception;
  147. }
  148. if (is_string($expectedString) || is_null($expectedString)) {
  149. $this->expectedString = $expectedString;
  150. }
  151. }
  152. /**
  153. * @return mixed
  154. * @throws RuntimeException
  155. */
  156. protected function runTest()
  157. {
  158. ob_start();
  159. $this->obActive = TRUE;
  160. try {
  161. $testResult = parent::runTest();
  162. }
  163. catch (Exception $e) {
  164. ob_end_clean();
  165. $this->obActive = FALSE;
  166. throw $e;
  167. }
  168. if ($this->outputCallback === FALSE) {
  169. $this->output = ob_get_contents();
  170. } else {
  171. $this->output = call_user_func_array($this->outputCallback, array(ob_get_contents()));
  172. }
  173. ob_end_clean();
  174. $this->obActive = FALSE;
  175. if ($this->expectedRegex !== NULL) {
  176. $this->assertRegExp($this->expectedRegex, $this->output);
  177. $this->expectedRegex = NULL;
  178. }
  179. else if ($this->expectedString !== NULL) {
  180. $this->assertEquals($this->expectedString, $this->output);
  181. $this->expectedString = NULL;
  182. }
  183. return $testResult;
  184. }
  185. }
  186. ?>