XdebugHandlerTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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. }
  96. public function testEnvVersionWhenNotLoaded()
  97. {
  98. $loaded = false;
  99. $xdebug = new XdebugHandlerMock($loaded);
  100. $xdebug->check();
  101. $this->assertEquals(false, getenv(XdebugHandlerMock::ENV_VERSION));
  102. }
  103. public static function setUpBeforeClass()
  104. {
  105. // Save current state
  106. $names = array(
  107. XdebugHandlerMock::ENV_ALLOW,
  108. XdebugHandlerMock::ENV_VERSION,
  109. 'PHP_INI_SCAN_DIR',
  110. IniHelper::ENV_ORIGINAL,
  111. );
  112. foreach ($names as $name) {
  113. self::$env[$name] = getenv($name);
  114. }
  115. }
  116. public static function tearDownAfterClass()
  117. {
  118. // Restore original state
  119. foreach (self::$env as $name => $value) {
  120. if (false !== $value) {
  121. putenv($name.'='.$value);
  122. } else {
  123. putenv($name);
  124. }
  125. }
  126. }
  127. protected function setUp()
  128. {
  129. // Ensure env is unset
  130. putenv(XdebugHandlerMock::ENV_ALLOW);
  131. putenv(XdebugHandlerMock::ENV_VERSION);
  132. putenv('PHP_INI_SCAN_DIR');
  133. putenv(IniHelper::ENV_ORIGINAL);
  134. }
  135. }