added support for junit log file output, which is neede by phpUnderControl
authorMarkus Glaser <mglaser@users.mediawiki.org>
Thu, 14 Oct 2010 00:42:38 +0000 (00:42 +0000)
committerMarkus Glaser <mglaser@users.mediawiki.org>
Thu, 14 Oct 2010 00:42:38 +0000 (00:42 +0000)
maintenance/tests/RunSeleniumTests.php
maintenance/tests/selenium/Selenium.php
maintenance/tests/selenium/SeleniumConfig.php
maintenance/tests/selenium/selenium_settings.ini.php52.sample
maintenance/tests/selenium/selenium_settings.ini.sample

index 4472751..0197c1d 100644 (file)
@@ -29,9 +29,9 @@ define( 'SELENIUMTEST', true );
 require_once( dirname( dirname( __FILE__ ) )."/Maintenance.php" );
 require_once( 'PHPUnit/Framework.php' );
 require_once( 'PHPUnit/Extensions/SeleniumTestCase.php' );
+require_once( 'PHPUnit/Util/Log/JUnit.php' );
 require_once( dirname( __FILE__ ) . "/selenium/SeleniumServerManager.php" );
 
-
 class SeleniumTester extends Maintenance {
        protected $selenium;
        protected $serverManager;
@@ -51,6 +51,7 @@ class SeleniumTester extends Maintenance {
                $this->addOption( 'verbose', 'Be noisier.' );
                $this->addOption( 'startserver', 'Start Selenium Server (on localhost) before the run.' );
                $this->addOption( 'stopserver', 'Stop Selenium Server (on localhost) after the run.' );
+               $this->addOption( 'jUnitLogFile', 'Log results in a specified JUnit log file.', false, true );
                $this->deleteOption( 'dbpass' );
                $this->deleteOption( 'dbuser' );
                $this->deleteOption( 'globals' );
@@ -111,9 +112,13 @@ class SeleniumTester extends Maintenance {
        protected function runTests( $seleniumTestSuites = array() ) {
                $result = new PHPUnit_Framework_TestResult;
                $result->addListener( new SeleniumTestListener( $this->selenium->getLogger() ) );
+               if ( $this->selenium->getJUnitLogFile() ) {
+                       $jUnitListener = new PHPUnit_Util_Log_JUnit( $this->selenium->getJUnitLogFile(), true );
+                       $result->addListener( $jUnitListener );
+               }
                
                foreach ( $seleniumTestSuites as $testSuiteName => $testSuiteFile ) {
-                       require( $testSuiteFile );              
+                       require( $testSuiteFile );
                        $suite = new $testSuiteName();
                        $suite->addTests();
                        
@@ -124,6 +129,10 @@ class SeleniumTester extends Maintenance {
                                throw new MWException( $e->getMessage() );
                        }
                }
+               
+               if ( $this->selenium->getJUnitLogFile() ) {
+                       $jUnitListener->flush();
+               }
        }
 
        public function execute() {
@@ -169,6 +178,7 @@ class SeleniumTester extends Maintenance {
                if ( !isset( $seleniumSettings['username'] ) ) $seleniumSettings['username'] = '';
                if ( !isset( $seleniumSettings['userPassword'] ) ) $seleniumSettings['userPassword'] = '';
                if ( !isset( $seleniumSettings['testBrowser'] ) ) $seleniumSettings['testBrowser'] = 'firefox';
+               if ( !isset( $seleniumSettings['jUnitLogFile'] ) ) $seleniumSettings['jUnitLogFile'] = false;
 
                // Setup Selenium class
                $this->selenium = new Selenium( );
@@ -180,6 +190,7 @@ class SeleniumTester extends Maintenance {
                $this->selenium->setUser( $this->getOption( 'username', $seleniumSettings['username'] ) );
                $this->selenium->setPass( $this->getOption( 'userPassword', $seleniumSettings['userPassword'] ) );
                $this->selenium->setVerbose( $this->hasOption( 'verbose' ) );
+               $this->selenium->setJUnitLogFile( $this->getOption( 'jUnitLogFile', $seleniumSettings['jUnitLogFile'] ) );
 
                if( $this->hasOption( 'list-browsers' ) ) {
                        $this->listBrowsers();
index e41e673..25f1037 100644 (file)
@@ -21,6 +21,7 @@ class Selenium {
        protected $pass;
        protected $timeout = 30000;
        protected $verbose;
+       protected $junitlogfile; //processed by phpUnderControl
 
        /**
         * @todo this shouldn't have to be static
@@ -136,6 +137,14 @@ class Selenium {
                $this->browsers = $availableBrowsers;
        }
 
+       public function setJUnitLogfile( $junitlogfile ) {
+               $this->junitlogfile = $junitlogfile;
+       }
+       
+       public function getJUnitLogfile( ) {
+               return $this->junitlogfile;
+       }       
+       
        public function setBrowser( $b ) {
                if ( !isset( $this->browsers[$b] ) ) {
                        throw new MWException( "Invalid Browser: $b.\n" );
index 757bc09..75f96eb 100644 (file)
@@ -48,6 +48,7 @@ class SeleniumConfig {
                        $seleniumSettings['startserver'] = $configArray['SeleniumSettings']['startserver'];
                        $seleniumSettings['stopserver'] = $configArray['SeleniumSettings']['stopserver'];
                        $seleniumSettings['seleniumserverexecpath'] = $configArray['SeleniumSettings']['seleniumserverexecpath'];
+                       $seleniumSettings['jUnitLogFile'] = $configArray['SeleniumSettings']['jUnitLogFile'];
 
                        wfRestoreWarnings();
                }
index 7b617ea..666ba9d 100644 (file)
@@ -14,6 +14,7 @@ userPassword  = "Wikiadminpw"
 testBrowser            = "firefox"
 startserver            =
 stopserver             =
+jUnitLogFile   =
 
 [testSuite]
 
index 3d743d8..c439b82 100644 (file)
@@ -11,6 +11,7 @@ userPassword          = "wikipass"
 testBrowser            = "firefox"
 startserver                    =
 stopserver                     =
+jUnitLogFile           =
 
 [SeleniumTests]