XdebugHandlerTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <?php
  2. /*
  3. * This file is part of Composer.
  4. *
  5. * (c) Nils Adermann <naderman@naderman.de>
  6. * Jordi Boggiano <j.boggiano@seld.be>
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace Composer\Test;
  12. use Composer\Test\Mock\XdebugHandlerMock;
  13. use Composer\Util\IniHelper;
  14. /**
  15. * @author John Stevenson <john-stevenson@blueyonder.co.uk>
  16. *
  17. * We use PHP_BINARY which only became available in PHP 5.4 *
  18. * @requires PHP 5.4
  19. */
  20. class XdebugHandlerTest extends \PHPUnit_Framework_TestCase
  21. {
  22. public static $env = array();
  23. public function testRestartWhenLoaded()
  24. {
  25. $loaded = true;
  26. $xdebug = new XdebugHandlerMock($loaded);
  27. $xdebug->check();
  28. $this->assertTrue($xdebug->restarted);
  29. $this->assertInternalType('string', getenv(IniHelper::ENV_ORIGINAL));
  30. }
  31. public function testNoRestartWhenNotLoaded()
  32. {
  33. $loaded = false;
  34. $xdebug = new XdebugHandlerMock($loaded);
  35. $xdebug->check();
  36. $this->assertFalse($xdebug->restarted);
  37. $this->assertFalse(getenv(IniHelper::ENV_ORIGINAL));
  38. }
  39. public function testNoRestartWhenLoadedAndAllowed()
  40. {
  41. $loaded = true;
  42. putenv(XdebugHandlerMock::ENV_ALLOW.'=1');
  43. $xdebug = new XdebugHandlerMock($loaded);
  44. $xdebug->check();
  45. $this->assertFalse($xdebug->restarted);
  46. }
  47. public function testEnvAllow()
  48. {
  49. $loaded = true;
  50. $xdebug = new XdebugHandlerMock($loaded);
  51. $xdebug->check();
  52. $expected = XdebugHandlerMock::RESTART_ID;
  53. $this->assertEquals($expected, getenv(XdebugHandlerMock::ENV_ALLOW));
  54. // Mimic restart
  55. $xdebug = new XdebugHandlerMock($loaded);
  56. $xdebug->check();
  57. $this->assertFalse($xdebug->restarted);
  58. $this->assertFalse(getenv(XdebugHandlerMock::ENV_ALLOW));
  59. }
  60. public function testEnvAllowWithScanDir()
  61. {
  62. $loaded = true;
  63. $dir = '/some/where';
  64. putenv('PHP_INI_SCAN_DIR='.$dir);
  65. $xdebug = new XdebugHandlerMock($loaded);
  66. $xdebug->check();
  67. $expected = XdebugHandlerMock::RESTART_ID.'|'.$dir;
  68. $this->assertEquals($expected, getenv(XdebugHandlerMock::ENV_ALLOW));
  69. // Mimic setting scan dir and restart
  70. putenv('PHP_INI_SCAN_DIR=');
  71. $xdebug = new XdebugHandlerMock($loaded);
  72. $xdebug->check();
  73. $this->assertEquals($dir, getenv('PHP_INI_SCAN_DIR'));
  74. }
  75. public function testEnvAllowWithEmptyScanDir()
  76. {
  77. $loaded = true;
  78. putenv('PHP_INI_SCAN_DIR=');
  79. $xdebug = new XdebugHandlerMock($loaded);
  80. $xdebug->check();
  81. $expected = XdebugHandlerMock::RESTART_ID.'|';
  82. $this->assertEquals($expected, getenv(XdebugHandlerMock::ENV_ALLOW));
  83. // Unset scan dir and mimic restart
  84. putenv('PHP_INI_SCAN_DIR');
  85. $xdebug = new XdebugHandlerMock($loaded);
  86. $xdebug->check();
  87. $this->assertEquals('', getenv('PHP_INI_SCAN_DIR'));
  88. }
  89. public function testEnvVersionWhenLoaded()
  90. {
  91. $loaded = true;
  92. $xdebug = new XdebugHandlerMock($loaded);
  93. $xdebug->check();
  94. $this->assertEquals($xdebug->testVersion, getenv(XdebugHandlerMock::ENV_VERSION));
  95. // Mimic successful restart
  96. $loaded = false;
  97. $xdebug = new XdebugHandlerMock($loaded);
  98. $xdebug->check();
  99. $this->assertEquals($xdebug->testVersion, getenv(XdebugHandlerMock::ENV_VERSION));
  100. }
  101. public function testEnvVersionWhenNotLoaded()
  102. {
  103. $loaded = false;
  104. $xdebug = new XdebugHandlerMock($loaded);
  105. $xdebug->check();
  106. $this->assertEquals(false, getenv(XdebugHandlerMock::ENV_VERSION));
  107. }
  108. public function testEnvVersionWhenRestartFails()
  109. {
  110. $loaded = true;
  111. $xdebug = new XdebugHandlerMock($loaded);
  112. $xdebug->check();
  113. // Mimic failed restart
  114. $xdebug = new XdebugHandlerMock($loaded);
  115. $xdebug->check();
  116. $this->assertEquals(false, getenv(XdebugHandlerMock::ENV_VERSION));
  117. }
  118. public static function setUpBeforeClass()
  119. {
  120. // Save current state
  121. $names = array(
  122. XdebugHandlerMock::ENV_ALLOW,
  123. XdebugHandlerMock::ENV_VERSION,
  124. 'PHP_INI_SCAN_DIR',
  125. IniHelper::ENV_ORIGINAL,
  126. );
  127. foreach ($names as $name) {
  128. self::$env[$name] = getenv($name);
  129. }
  130. }
  131. public static function tearDownAfterClass()
  132. {
  133. // Restore original state
  134. foreach (self::$env as $name => $value) {
  135. if (false !== $value) {
  136. putenv($name.'='.$value);
  137. } else {
  138. putenv($name);
  139. }
  140. }
  141. }
  142. protected function setUp()
  143. {
  144. // Ensure env is unset
  145. putenv(XdebugHandlerMock::ENV_ALLOW);
  146. putenv(XdebugHandlerMock::ENV_VERSION);
  147. putenv('PHP_INI_SCAN_DIR');
  148. putenv(IniHelper::ENV_ORIGINAL);
  149. }
  150. }