Stash global only once per test case.
authordaniel <daniel.kinzler@wikimedia.de>
Thu, 25 Oct 2012 15:29:10 +0000 (17:29 +0200)
committerAntoine Musso <hashar@free.fr>
Mon, 29 Oct 2012 10:07:06 +0000 (11:07 +0100)
Make sure we only stash a given global only once per test case since we
do not want to override the original value.

This allows the same test to modify the same global multiple times,
while still preserving the original value to be restored after the
test case finished.

Change-Id: I9056d6d6879fb976a192960f661904287f9760a8

tests/phpunit/MediaWikiTestCase.php

index 5bc36ed..25ae32d 100644 (file)
@@ -220,15 +220,22 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *  if an array is given as first argument).
         */
        protected function setMwGlobals( $pairs, $value = null ) {
-               if ( !is_array( $pairs ) ) {
-                       $key = $pairs;
-                       $this->mwGlobals[$key] = $GLOBALS[$key];
-                       $GLOBALS[$key] = $value;
-               } else {
-                       foreach ( $pairs as $key => $value ) {
+
+               // Normalize (string, value) to an array
+               if( is_string( $pairs ) ) {
+                       $pairs = array( $pairs => $value );
+               }
+
+               foreach ( $pairs as $key => $value ) {
+                       // NOTE: make sure we only save the global once or a second call to
+                       // setMwGlobals() on the same global would override the original
+                       // value.
+                       if ( !array_key_exists( $key, $this->mwGlobals ) ) {
                                $this->mwGlobals[$key] = $GLOBALS[$key];
-                               $GLOBALS[$key] = $value;
                        }
+
+                       // Override the global
+                       $GLOBALS[$key] = $value;
                }
        }