From ca32f08966f1b51fcb19460f0996bb0c4048e6fe Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Sat, 3 Dec 2011 13:29:22 +0100 Subject: Update to MediaWiki 1.18.0 * also update ArchLinux skin to chagnes in MonoBook * Use only css to hide our menu bar when printing --- includes/SeleniumWebSettings.php | 197 ++++++++++++++++++++++++++++++++++----- 1 file changed, 173 insertions(+), 24 deletions(-) (limited to 'includes/SeleniumWebSettings.php') diff --git a/includes/SeleniumWebSettings.php b/includes/SeleniumWebSettings.php index 8afb26da..56afa929 100644 --- a/includes/SeleniumWebSettings.php +++ b/includes/SeleniumWebSettings.php @@ -1,5 +1,5 @@ 0 ) { + if ( strlen( $setupTestSuiteName ) > 0 ) { $expire = time() + 600; - setcookie( $cookieName, + setcookie( + $cookieName, $setupTestSuiteName, $expire, $wgCookiePath, $wgCookieDomain, $wgCookieSecure, - true ); + true + ); + } + + $testIncludes = array(); // array containing all the includes needed for this test + $testGlobalConfigs = array(); // an array containg all the global configs needed for this test + $testResourceFiles = array(); // an array containing all the resource files needed for this test + $callback = $wgSeleniumTestConfigs[$setupTestSuiteName]; + call_user_func_array( $callback, array( &$testIncludes, &$testGlobalConfigs, &$testResourceFiles)); + + if ( isset( $testResourceFiles['images'] ) ) { + $testImageZip = $testResourceFiles['images']; + } + + if ( isset( $testResourceFiles['db'] ) ) { + $testSqlFile = $testResourceFiles['db']; + $testResourceName = getTestResourceNameFromTestSuiteName( $setupTestSuiteName ); + + switchToTestResources( $testResourceName, false ); // false means do not switch database yet + setupTestResources( $testResourceName, $testSqlFile, $testImageZip ); } } -//clear the cookie based on a request param + +// clear the cookie based on a request param if ( isset( $_GET['clearTestSuite'] ) ) { - $expire = time() - 600; - setcookie( $cookieName, - '', - $expire, - $wgCookiePath, - $wgCookieDomain, - $wgCookieSecure, - true ); + $testSuiteName = getTestSuiteNameFromCookie( $cookieName ); + + $expire = time() - 600; + setcookie( + $cookieName, + '', + $expire, + $wgCookiePath, + $wgCookieDomain, + $wgCookieSecure, + true + ); + + $testResourceName = getTestResourceNameFromTestSuiteName( $testSuiteName ); + teardownTestResources( $testResourceName ); } -//if a cookie is found, run the appropriate callback to get the config params. +// if a cookie is found, run the appropriate callback to get the config params. if ( isset( $_COOKIE[$cookieName] ) ) { - $testSuiteName = $_COOKIE[$cookieName]; + $testSuiteName = getTestSuiteNameFromCookie( $cookieName ); if ( !isset( $wgSeleniumTestConfigs[$testSuiteName] ) ) { return; } - $testIncludes = array(); //array containing all the includes needed for this test - $testGlobalConfigs = array(); //an array containg all the global configs needed for this test + + $testIncludes = array(); // array containing all the includes needed for this test + $testGlobalConfigs = array(); // an array containg all the global configs needed for this test + $testResourceFiles = array(); // an array containing all the resource files needed for this test $callback = $wgSeleniumTestConfigs[$testSuiteName]; - call_user_func_array( $callback, array( &$testIncludes, &$testGlobalConfigs)); - + call_user_func_array( $callback, array( &$testIncludes, &$testGlobalConfigs, &$testResourceFiles)); + + if ( isset( $testResourceFiles['db'] ) ) { + $testResourceName = getTestResourceNameFromTestSuiteName( $testSuiteName ); + switchToTestResources( $testResourceName ); + } foreach ( $testIncludes as $includeFile ) { $file = $IP . '/' . $includeFile; require_once( $file ); @@ -70,3 +114,108 @@ if ( isset( $_COOKIE[$cookieName] ) ) { } wfProfileOut( $fname ); + +function getTestSuiteNameFromCookie( $cookieName ) { + $testSuiteName = null; + if ( isset( $_COOKIE[$cookieName] ) ) { + $testSuiteName = $_COOKIE[$cookieName]; + } + return $testSuiteName; +} + +function getTestResourceNameFromTestSuiteName( $testSuiteName ) { + $testResourceName = null; + if ( isset( $testSuiteName ) ) { + $testResourceName = $testSuiteName; + } + return $testResourceName; +} + +function getTestUploadPathFromResourceName( $testResourceName ) { + global $IP; + $testUploadPath = "$IP/images/$testResourceName"; + return $testUploadPath; +} + +function setupTestResources( $testResourceName, $testSqlFile, $testImageZip ) { + global $wgDBname; + + // Basic security. Do not allow to drop productive database. + if ( $testResourceName == $wgDBname ) { + die( 'Cannot override productive database.' ); + } + if ( $testResourceName == '' ) { + die( 'Cannot identify a test the resources should be installed for.' ); + } + + // create tables + $dbw = wfGetDB( DB_MASTER ); + $dbw->query( 'DROP DATABASE IF EXISTS ' . $testResourceName ); + $dbw->query( 'CREATE DATABASE ' . $testResourceName ); + + // do not set the new DB name before database is setup + $wgDBname = $testResourceName; + $dbw->selectDB( $testResourceName ); + // populate from SQL file + if ( $testSqlFile ) { + $dbw->sourceFile( $testSqlFile ); + } + + // create test image dir + $testUploadPath = getTestUploadPathFromResourceName( $testResourceName ); + if ( !file_exists( $testUploadPath ) ) { + mkdir( $testUploadPath ); + } + + if ( $testImageZip ) { + $zip = new ZipArchive(); + $zip->open( $testImageZip ); + $zip->extractTo( $testUploadPath ); + $zip->close(); + } +} + +function teardownTestResources( $testResourceName ) { + // remove test database + $dbw = wfGetDB( DB_MASTER ); + $dbw->query( 'DROP DATABASE IF EXISTS ' . $testResourceName ); + + $testUploadPath = getTestUploadPathFromResourceName( $testResourceName ); + // remove test image dir + if ( file_exists( $testUploadPath ) ) { + wfRecursiveRemoveDir( $testUploadPath ); + } +} + +function switchToTestResources( $testResourceName, $switchDB = true ) { + global $wgDBuser, $wgDBpassword, $wgDBname; + global $wgDBtestuser, $wgDBtestpassword; + global $wgUploadPath; + + if ( $switchDB ) { + $wgDBname = $testResourceName; + } + $wgDBuser = $wgDBtestuser; + $wgDBpassword = $wgDBtestpassword; + + $testUploadPath = getTestUploadPathFromResourceName( $testResourceName ); + $wgUploadPath = $testUploadPath; +} + +function wfRecursiveRemoveDir( $dir ) { + // taken from http://de3.php.net/manual/en/function.rmdir.php#98622 + if ( is_dir( $dir ) ) { + $objects = scandir( $dir ); + foreach ( $objects as $object ) { + if ( $object != "." && $object != ".." ) { + if ( filetype( $dir . '/' . $object ) == "dir" ) { + wfRecursiveRemoveDir( $dir . '/' . $object ); + } else { + unlink( $dir . '/' . $object ); + } + } + } + reset( $objects ); + rmdir( $dir ); + } +} \ No newline at end of file -- cgit v1.2.3-54-g00ecf