MWDebugTest: disable MWDebug on test teardown
authorOri Livneh <ori@wikimedia.org>
Sun, 15 May 2016 05:09:13 +0000 (22:09 -0700)
committerOri Livneh <ori@wikimedia.org>
Wed, 18 May 2016 09:23:26 +0000 (02:23 -0700)
MWDebug::init() is currently irreversible -- once MWDebug is enabled, it cannot
be disabled in that execution context. This means that the MWDebug test suite
(which enables MWDebug) has a nasty side-effect -- all the tests that run after
it run with MWDebug enabled. So add an MWDebug::deinit(), and call it on test
teardown.

Ostensibly this is a great use-case for services and dependency injection. The
reason I am not going that route is that it's not entirely clear to me what the
MWDebug class is supposed to represent. If I were going to spend any
substantial amount of time on this, I would be trying to move it out of core
and into an extension, not converting it into a service.

Change-Id: I52c511be049bc276d203d07283e3aa0944f22d34

includes/debug/MWDebug.php
tests/phpunit/includes/debug/MWDebugTest.php

index 13d25a8..d90ef8a 100644 (file)
@@ -75,6 +75,15 @@ class MWDebug {
                self::$enabled = true;
        }
 
+       /**
+        * Disable the debugger.
+        *
+        * @since 1.28
+        */
+       public static function deinit() {
+               self::$enabled = false;
+       }
+
        /**
         * Add ResourceLoader modules to the OutputPage object if debugging is
         * enabled.
index 9c2bc75..c1449ea 100644 (file)
@@ -4,20 +4,18 @@ class MWDebugTest extends MediaWikiTestCase {
 
        protected function setUp() {
                parent::setUp();
-               // Make sure MWDebug class is enabled
-               static $MWDebugEnabled = false;
-               if ( !$MWDebugEnabled ) {
-                       MWDebug::init();
-                       $MWDebugEnabled = true;
-               }
                /** Clear log before each test */
                MWDebug::clearLog();
+       }
+
+       public static function setUpBeforeClass() {
+               MWDebug::init();
                MediaWiki\suppressWarnings();
        }
 
-       protected function tearDown() {
+       public static function tearDownAfterClass() {
+               MWDebug::deinit();
                MediaWiki\restoreWarnings();
-               parent::tearDown();
        }
 
        /**