Browse Source

Add configure values for debugger.

Add configure option support for defining Debugger configuration.
Mark Story 6 years ago
parent
commit
3226ef8895
3 changed files with 42 additions and 7 deletions
  1. 4 1
      src/Error/Debugger.php
  2. 37 5
      tests/TestCase/Error/DebuggerTest.php
  3. 1 1
      tests/bootstrap.php

+ 4 - 1
src/Error/Debugger.php

@@ -16,6 +16,7 @@ declare(strict_types=1);
  */
 namespace Cake\Error;
 
+use Cake\Core\Configure;
 use Cake\Core\InstanceConfigTrait;
 use Cake\Error\Debug\ArrayItemNode;
 use Cake\Error\Debug\ArrayNode;
@@ -138,7 +139,6 @@ class Debugger
     public function __construct()
     {
         $docRef = ini_get('docref_root');
-
         if (empty($docRef) && function_exists('ini_set')) {
             ini_set('docref_root', 'https://secure.php.net/');
         }
@@ -146,6 +146,9 @@ class Debugger
             define('E_RECOVERABLE_ERROR', 4096);
         }
 
+        $config = array_intersect_key((array)Configure::read('Debugger'), $this->_defaultConfig);
+        $this->setConfig($config);
+
         $e = '<pre class="cake-error">';
         $e .= '<a href="javascript:void(0);" onclick="document.getElementById(\'{:id}-trace\')';
         $e .= '.style.display = (document.getElementById(\'{:id}-trace\').style.display == ';

+ 37 - 5
tests/TestCase/Error/DebuggerTest.php

@@ -19,6 +19,7 @@ namespace Cake\Test\TestCase\Error;
 use Cake\Controller\Controller;
 use Cake\Core\Configure;
 use Cake\Error\Debugger;
+use Cake\Error\Debug\TextFormatter;
 use Cake\Log\Log;
 use Cake\TestSuite\TestCase;
 use RuntimeException;
@@ -51,6 +52,7 @@ class DebuggerTest extends TestCase
         Configure::write('debug', true);
         Log::drop('stderr');
         Log::drop('stdout');
+        Debugger::configInstance('exportFormatter', TextFormatter::class);
     }
 
     /**
@@ -73,13 +75,12 @@ class DebuggerTest extends TestCase
      */
     public function testDocRef()
     {
-        $this->skipIf(
-            defined('HHVM_VERSION'),
-            'HHVM does not output doc references'
-        );
         ini_set('docref_root', '');
         $this->assertEquals(ini_get('docref_root'), '');
-        new Debugger();
+        // Force a new instance.
+        Debugger::getInstance(TestDebugger::class);
+        Debugger::getInstance(Debugger::class);
+
         $this->assertEquals(ini_get('docref_root'), 'https://secure.php.net/');
     }
 
@@ -655,6 +656,22 @@ eos;
     }
 
     /**
+     * Test configure based output mask configuration
+     *
+     * @return void
+     */
+    public function testConfigureOutputMask()
+    {
+        Configure::write('Debugger.outputMask', ['wow' => 'xxx']);
+        Debugger::getInstance(TestDebugger::class);
+        Debugger::getInstance(Debugger::class);
+
+        $result = Debugger::exportVar(['wow' => 'pass1234']);
+        $this->assertStringContainsString('xxx', $result);
+        $this->assertStringNotContainsString('pass1234', $result);
+    }
+
+    /**
      * Tests the masking of an array key.
      *
      * @return void
@@ -817,6 +834,21 @@ EXPECTED;
     }
 
     /**
+     * Test configure based editor setup
+     *
+     * @return void
+     */
+    public function testConfigureEditor()
+    {
+        Configure::write('Debugger.editor', 'emacs');
+        Debugger::getInstance(TestDebugger::class);
+        Debugger::getInstance(Debugger::class);
+
+        $result = Debugger::editorUrl('file.php', 123);
+        $this->assertStringContainsString('emacs://', $result);
+    }
+
+    /**
      * test using a valid editor.
      *
      * @return void

+ 1 - 1
tests/bootstrap.php

@@ -108,6 +108,7 @@ ConnectionManager::setConfig('test_custom_i18n_datasource', ['url' => getenv('DB
 Configure::write('Session', [
     'defaults' => 'php',
 ]);
+Configure::write('Debugger.exportFormatter', TextFormatter::class);
 
 Log::setConfig([
     // 'queries' => [
@@ -131,7 +132,6 @@ Log::setConfig([
 
 Chronos::setTestNow(Chronos::now());
 Security::setSalt('a-long-but-not-random-value');
-Debugger::configInstance('exportFormatter', TextFormatter::class);
 
 ini_set('intl.default_locale', 'en_US');
 ini_set('session.gc_divisor', '1');