Merge "Followup Idfee1b4d per Tim"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 26 Jul 2013 17:24:27 +0000 (17:24 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 26 Jul 2013 17:24:27 +0000 (17:24 +0000)
includes/specials/SpecialWatchlist.php
resources/jquery/jquery.placeholder.js
tests/TestsAutoLoader.php
tests/phpunit/MediaWikiPHPUnitCommand.php
tests/phpunit/MediaWikiPHPUnitTestListener.php [new file with mode: 0644]

index b322547..9ef02fa 100644 (file)
@@ -239,12 +239,8 @@ class SpecialWatchlist extends SpecialPage {
                        $output->showLagWarning( $lag );
                }
 
-               # Create output form
-               $form = Xml::fieldset(
-                       $this->msg( 'watchlist-options' )->text(),
-                       false,
-                       array( 'id' => 'mw-watchlist-options' )
-               );
+               # Create output
+               $form = '';
 
                # Show watchlist header
                $form .= "<p>";
@@ -269,7 +265,16 @@ class SpecialWatchlist extends SpecialPage {
                        $form .= Xml::closeElement( 'form' ) . "\n";
                }
 
-               $form .= "<hr />\n";
+               $form .= Xml::openElement( 'form', array(
+                       'method' => 'post',
+                       'action' => $this->getTitle()->getLocalURL(),
+                       'id' => 'mw-watchlist-form'
+               ) );
+               $form .= Xml::fieldset(
+                       $this->msg( 'watchlist-options' )->text(),
+                       false,
+                       array( 'id' => 'mw-watchlist-options' )
+               );
 
                $tables = array( 'recentchanges', 'watchlist' );
                $fields = RecentChange::selectFields();
@@ -349,7 +354,6 @@ class SpecialWatchlist extends SpecialPage {
                $form .= $wlInfo;
                $form .= $cutofflinks;
                $form .= $lang->pipeList( $links ) . "\n";
-               $form .= Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalURL(), 'id' => 'mw-watchlist-form-namespaceselector' ) ) . "\n";
                $form .= "<hr />\n<p>";
                $form .= Html::namespaceSelector(
                        array(
@@ -380,8 +384,8 @@ class SpecialWatchlist extends SpecialPage {
                foreach ( $hiddenFields as $key => $value ) {
                        $form .= Html::hidden( $key, $value ) . "\n";
                }
-               $form .= Xml::closeElement( 'form' ) . "\n";
                $form .= Xml::closeElement( 'fieldset' ) . "\n";
+               $form .= Xml::closeElement( 'form' ) . "\n";
                $output->addHTML( $form );
 
                # If there's nothing to show, stop here
index 7badb11..73f701b 100644 (file)
  */
 ( function ( $ ) {
 
-       $.fn.placeholder = function () {
+       $.fn.placeholder = function ( text ) {
+               // Check whether supplied argument is a string
+               var textIsValid = ( typeof text === 'string' );
 
                return this.each( function () {
                        var placeholder, $input;
 
+
                        // If the HTML5 placeholder attribute is supported, use it
                        if ( this.placeholder && 'placeholder' in document.createElement( this.tagName ) ) {
+                               if ( textIsValid ) {
+                                       this.setAttribute( 'placeholder', text );
+                               }
                                return;
                        }
 
-                       placeholder = this.getAttribute( 'placeholder' );
+                       placeholder = textIsValid ? text : this.getAttribute( 'placeholder' );
                        $input = $(this);
 
                        // Show initially, if empty
index d7237f7..0939ebe 100644 (file)
@@ -38,6 +38,7 @@ $wgAutoloadClasses += array(
        # tests/phpunit
        'MediaWikiTestCase' => "$testDir/phpunit/MediaWikiTestCase.php",
        'MediaWikiPHPUnitCommand' => "$testDir/phpunit/MediaWikiPHPUnitCommand.php",
+       'MediaWikiPHPUnitTestListener' => "$testDir/phpunit/MediaWikiPHPUnitTestListener.php",
        'MediaWikiLangTestCase' => "$testDir/phpunit/MediaWikiLangTestCase.php",
        'MediaWikiProvide' => "$testDir/phpunit/includes/Providers.php",
        'TestUser' => "$testDir/phpunit/includes/TestUser.php",
index f5760ea..387107b 100644 (file)
@@ -12,6 +12,7 @@ class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
                'use-normal-tables' => false,
                'reuse-db' => false,
                'wiki=' => false,
+               'debug-tests' => false,
        );
 
        public function __construct() {
@@ -20,6 +21,22 @@ class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
                }
        }
 
+       protected function handleArguments(array $argv) {
+               parent::handleArguments( $argv );
+
+               if ( !isset( $this->arguments['listeners'] ) ) {
+                       $this->arguments['listeners'] = array();
+               }
+
+               foreach ($this->options[0] as $option) {
+                       switch ($option[0]) {
+                               case '--debug-tests':
+                                       $this->arguments['listeners'][] = new MediaWikiPHPUnitTestListener( 'PHPUnitCommand' );
+                                       break;
+                       }
+               }
+       }
+
        public static function main( $exit = true ) {
                $command = new self;
 
@@ -94,6 +111,9 @@ Database options:
   --reuse-db               Init DB only if tables are missing and keep after finish.
 
 
+Debugging options:
+  --debug-tests            Log testing activity to the PHPUnitCommand log channel.
+
 EOT;
        }
 }
diff --git a/tests/phpunit/MediaWikiPHPUnitTestListener.php b/tests/phpunit/MediaWikiPHPUnitTestListener.php
new file mode 100644 (file)
index 0000000..18e3fb7
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+class MediaWikiPHPUnitTestListener implements PHPUnit_Framework_TestListener {
+
+       /**
+        * @var string
+        */
+       protected $logChannel;
+
+       public function __construct( $logChannel ) {
+               $this->logChannel = $logChannel;
+       }
+
+       protected function getTestName( PHPUnit_Framework_Test $test ) {
+               $name = get_class( $test );
+
+               if ( $test instanceof PHPUnit_Framework_TestCase ) {
+                       $name .= '::' . $test->getName( true );
+               }
+
+               return $name;
+       }
+
+       protected function getErrorName( Exception $exception ) {
+               $name = get_class( $exception );
+               $name = "[$name] " . $exception->getMessage();
+
+               return $name;
+       }
+
+       /**
+        * An error occurred.
+        *
+        * @param  PHPUnit_Framework_Test $test
+        * @param  Exception              $e
+        * @param  float                  $time
+        */
+       public function addError( PHPUnit_Framework_Test $test, Exception $e, $time ) {
+               wfDebugLog( $this->logChannel, 'ERROR in ' . $this->getTestName( $test ) . ': ' . $this->getErrorName( $e ) );
+       }
+
+       /**
+        * A failure occurred.
+        *
+        * @param  PHPUnit_Framework_Test                 $test
+        * @param  PHPUnit_Framework_AssertionFailedError $e
+        * @param  float                                  $time
+        */
+       public function addFailure( PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time ) {
+               wfDebugLog( $this->logChannel, 'FAILURE in ' . $this->getTestName( $test ) . ': ' . $this->getErrorName( $e ) );
+       }
+
+       /**
+        * Incomplete test.
+        *
+        * @param  PHPUnit_Framework_Test $test
+        * @param  Exception              $e
+        * @param  float                  $time
+        */
+       public function addIncompleteTest( PHPUnit_Framework_Test $test, Exception $e, $time ) {
+               wfDebugLog( $this->logChannel, 'Incomplete test ' . $this->getTestName( $test ) . ': ' . $this->getErrorName( $e ) );
+       }
+
+       /**
+        * Skipped test.
+        *
+        * @param  PHPUnit_Framework_Test $test
+        * @param  Exception              $e
+        * @param  float                  $time
+        *
+        * @since  Method available since Release 3.0.0
+        */
+       public function addSkippedTest( PHPUnit_Framework_Test $test, Exception $e, $time ) {
+               wfDebugLog( $this->logChannel, 'Skipped test ' . $this->getTestName( $test ) . ': ' . $this->getErrorName( $e ) );
+       }
+
+       /**
+        * A test suite started.
+        *
+        * @param  PHPUnit_Framework_TestSuite $suite
+        * @since  Method available since Release 2.2.0
+        */
+       public function startTestSuite( PHPUnit_Framework_TestSuite $suite ) {
+               wfDebugLog( $this->logChannel, 'START suite ' . $suite->getName() );
+       }
+
+       /**
+        * A test suite ended.
+        *
+        * @param  PHPUnit_Framework_TestSuite $suite
+        * @since  Method available since Release 2.2.0
+        */
+       public function endTestSuite( PHPUnit_Framework_TestSuite $suite ) {
+               wfDebugLog( $this->logChannel, 'END suite ' . $suite->getName() );
+       }
+
+       /**
+        * A test started.
+        *
+        * @param  PHPUnit_Framework_Test $test
+        */
+       public function startTest( PHPUnit_Framework_Test $test ) {
+               wfDebugLog( $this->logChannel, 'Start test ' . $this->getTestName( $test ) );
+       }
+
+       /**
+        * A test ended.
+        *
+        * @param  PHPUnit_Framework_Test $test
+        * @param  float                  $time
+        */
+       public function endTest( PHPUnit_Framework_Test $test, $time ) {
+               wfDebugLog( $this->logChannel, 'End test ' . $this->getTestName( $test ) );
+       }
+}
\ No newline at end of file