XdebugHandlerTest.php 5.0 KB

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