diff options
| -rw-r--r-- | engine/lib/testing.php | 40 | ||||
| -rw-r--r-- | mod/diagnostics/index.php | 8 | ||||
| -rw-r--r-- | mod/diagnostics/languages/en.php | 13 | ||||
| -rw-r--r-- | mod/diagnostics/start.php | 28 | ||||
| -rw-r--r-- | mod/diagnostics/testreport.php | 45 | ||||
| -rw-r--r-- | mod/diagnostics/unittester.php | 43 | ||||
| -rw-r--r-- | mod/diagnostics/views/default/diagnostics/runalltests.php | 15 | ||||
| -rw-r--r-- | mod/diagnostics/views/default/diagnostics/test.php | 29 | ||||
| -rw-r--r-- | mod/diagnostics/views/default/diagnostics/testresult.php | 42 | 
9 files changed, 253 insertions, 10 deletions
diff --git a/engine/lib/testing.php b/engine/lib/testing.php index afa5dd2e2..6af96d8cf 100644 --- a/engine/lib/testing.php +++ b/engine/lib/testing.php @@ -52,6 +52,27 @@  			$this->details = $details;  			$this->debug = $debug;  		} +		 +		/** +		 * Successful execution or not? +		 * +		 * @return bool +		 */ +		public function isSuccess() { return $this->successful; } +		 +		/** +		 * Retrieve details. +		 * +		 * @return string +		 */ +		public function getDetails() { return $this->details; } +		 +		/** +		 * Retrieve debug. +		 * +		 * @return string +		 */ +		public function getDebug() { return $this->debug; }  		/**  		 * Factory function to generate a successful result. @@ -73,10 +94,12 @@  	 */  	function execute_elgg_test($function)  	{ -		if (is_callable($function)) -			return $function(); +		global $ELGG_TEST_REGISTRY; +		 +		if ((is_callable($function)) && (isset($ELGG_TEST_REGISTRY[$function]))) // must be callable, and registered (for security) +			return array('function' => $function, 'result' => $function()); -		return false; +		return array('function' => $function, 'result' => false);  	}  	/** @@ -113,4 +136,15 @@  		$ELGG_TEST_REGISTRY[$function] = $description;  	} +	/** +	 * Return a list of available tests. +	 * +	 * @return array +	 */ +	function get_available_tests() +	{ +		global $ELGG_TEST_REGISTRY; +		 +		return $ELGG_TEST_REGISTRY; +	}  ?>
\ No newline at end of file diff --git a/mod/diagnostics/index.php b/mod/diagnostics/index.php index b9aa2e309..54c8e9c4f 100644 --- a/mod/diagnostics/index.php +++ b/mod/diagnostics/index.php @@ -18,11 +18,9 @@  	$title = elgg_view_title(elgg_echo('diagnostics')); -	$body .= "<div class=\"contentWrapper\">"; -	$body .= elgg_echo('diagnostics:description'); -	 -	$body .= elgg_view('diagnostics/forms/download'); -	$body .= "</div>"; +	$body = elgg_view('page_elements/contentwrapper', array('body' =>  +		elgg_echo('diagnostics:description') . elgg_view('diagnostics/forms/download')) +	);  	page_draw(elgg_echo('diagnostics'),elgg_view_layout("two_column_left_sidebar", '', $title . $body)); diff --git a/mod/diagnostics/languages/en.php b/mod/diagnostics/languages/en.php index 79d35e938..5d19824bd 100644 --- a/mod/diagnostics/languages/en.php +++ b/mod/diagnostics/languages/en.php @@ -12,8 +12,21 @@  	$english = array(  			'diagnostics' => 'System diagnostics', +			'diagnostics:unittester' => 'Unit tests',  			'diagnostics:description' => 'The following diagnostic report is useful for diagnosing any problems with Elgg, and should be attached to any bug reports you file.', +			'diagnostics:unittester:description' => 'The following are diagnostic tests which are registered by plugins and may be performed in order to debug parts of the Elgg framework.', +	 +			'diagnostics:test:executetest' => 'Execute test', +			'diagnostics:test:executeall' => 'Execute All', +			'diagnostics:unittester:notests' => 'Sorry, there are no unit test modules currently installed.', +			'diagnostics:unittester:testnotfound' => 'Sorry, the report could not be generated because that test was not found', +	 +			'diagnostics:unittester:testresult:nottestclass' => 'FAIL - Result not a test class', +			'diagnostics:unittester:testresult:fail' => 'FAIL', +			'diagnostics:unittester:testresult:success' => 'FAIL', +	 +			'diagnostics:unittester:report' => 'Test report for %s',  			'diagnostics:download' => 'Download .txt', diff --git a/mod/diagnostics/start.php b/mod/diagnostics/start.php index 5bf2dc468..a7afe346e 100644 --- a/mod/diagnostics/start.php +++ b/mod/diagnostics/start.php @@ -33,6 +33,7 @@  		if (get_context() == 'admin' && isadminloggedin()) {  			global $CONFIG;  			add_submenu_item(elgg_echo('diagnostics'), $CONFIG->wwwroot . 'pg/diagnostics/'); +			add_submenu_item(elgg_echo('diagnostics:unittester'), $CONFIG->wwwroot . 'pg/diagnostics/tests/');  		}  	} @@ -45,8 +46,31 @@  	{  		global $CONFIG; -		// only interested in one page for now -		include($CONFIG->pluginspath . "diagnostics/index.php");  +		if (isset($page[0])) +		{ +			switch ($page[0]) +			{ +				case 'tests' : 	 +					if ((isset($page[1])) && ($page[1])) { +						switch ($page[1])  +						{ +							case 'all': break;  +							default: set_input('test_func', $page[1]); +						} +						 +						include($CONFIG->pluginspath . "diagnostics/testreport.php");  +					} +					else +						include($CONFIG->pluginspath . "diagnostics/unittester.php");  +				break; +				default: include($CONFIG->pluginspath . "diagnostics/index.php");  	 +			} +		} +		else +		{ +			// only interested in one page for now +			include($CONFIG->pluginspath . "diagnostics/index.php"); +		}   	}  	/** diff --git a/mod/diagnostics/testreport.php b/mod/diagnostics/testreport.php new file mode 100644 index 000000000..979cca267 --- /dev/null +++ b/mod/diagnostics/testreport.php @@ -0,0 +1,45 @@ +<?php +	/** +	 * Elgg diagnostics - test report +	 *  +	 * @package ElggDiagnostics +	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 +	 * @author Curverider Ltd +	 * @copyright Curverider Ltd 2008-2009 +	 * @link http://elgg.com/ +	 */ + +	require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + +	admin_gatekeeper(); +	set_context('admin'); +	// Set admin user for user block +		set_page_owner($_SESSION['guid']); +		 +	// Which test are we executing? +	$test_func = get_input('test_func'); + +	$title_txt = sprintf(elgg_echo('diagnostics:unittester:report'), $test_func ? $testfunc : elgg_echo('diagnostics:test:executeall')); +		 +	$title = elgg_view_title(); +	 +	$result = null; +	if ($test_func) +		$result = array(execute_elgg_test($test_func)); +	else +		$result = execute_elgg_tests(); +		 +	if ($result) +	{ +		foreach ($result as $r) +			$body .= elgg_view('page_elements/contentwrapper', array('body' => +				elgg_view('diagnostics/testresult', array('function' => $r['function'], 'result' => $r['result'])) +			)); +	} +	else +		$body = elgg_view('page_elements/contentwrapper', array('body' =>  +			elgg_echo('diagnostics:unittester:testnotfound' )  +		)); +	 +	page_draw($title_txt, elgg_view_layout("two_column_left_sidebar", '', $title . $body)); +?>
\ No newline at end of file diff --git a/mod/diagnostics/unittester.php b/mod/diagnostics/unittester.php new file mode 100644 index 000000000..d0aa0c8c4 --- /dev/null +++ b/mod/diagnostics/unittester.php @@ -0,0 +1,43 @@ +<?php +	/** +	 * Elgg diagnostics - unit tester +	 *  +	 * @package ElggDiagnostics +	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 +	 * @author Curverider Ltd +	 * @copyright Curverider Ltd 2008-2009 +	 * @link http://elgg.com/ +	 */ + +	require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + +	admin_gatekeeper(); +	set_context('admin'); +	// Set admin user for user block +		set_page_owner($_SESSION['guid']); + +	$title = elgg_view_title(elgg_echo('diagnostics:unittester')); +	 +	$tests = get_available_tests(); +	$test_body = ""; +	if ($tests) +	{ +		foreach ($tests as $func => $desc) +			$test_body .= elgg_view('diagnostics/test', array('function' => $func, 'description' => $desc)); +	} +	else +		$test_body = elgg_echo('diagnostics:unittester:notests'); +	 +	$body = elgg_view('page_elements/contentwrapper', array('body' =>  +		elgg_echo('diagnostics:unittester:description') .   +		elgg_view('diagnostics/runalltests') +		)  +	); +	 +	$body .= elgg_view('page_elements/contentwrapper', array('body' =>  +		$test_body )  +	); +	 +	 +	page_draw(elgg_echo('diagnostics:unittester'),elgg_view_layout("two_column_left_sidebar", '', $title . $body)); +?>
\ No newline at end of file diff --git a/mod/diagnostics/views/default/diagnostics/runalltests.php b/mod/diagnostics/views/default/diagnostics/runalltests.php new file mode 100644 index 000000000..12bbf2a4a --- /dev/null +++ b/mod/diagnostics/views/default/diagnostics/runalltests.php @@ -0,0 +1,15 @@ +<?php +	/** +	 * Elgg diagnostics - unit tester +	 *  +	 * @package ElggDiagnostics +	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 +	 * @author Curverider Ltd +	 * @copyright Curverider Ltd 2008-2009 +	 * @link http://elgg.com/ +	 */ + +	$form_body .= elgg_view('input/submit', array('internalname' => 'execute', 'value' => elgg_echo('diagnostics:test:executeall'))); + +	echo elgg_view('input/form', array('action' => $vars['url'] . "pg/diagnostics/tests/all", 'body' => $form_body));	 +?>
\ No newline at end of file diff --git a/mod/diagnostics/views/default/diagnostics/test.php b/mod/diagnostics/views/default/diagnostics/test.php new file mode 100644 index 000000000..5010eb903 --- /dev/null +++ b/mod/diagnostics/views/default/diagnostics/test.php @@ -0,0 +1,29 @@ +<?php +	/** +	 * Elgg diagnostics +	 *  +	 * @package ElggDiagnostics +	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 +	 * @author Curverider Ltd +	 * @copyright Curverider Ltd 2008-2009 +	 * @link http://elgg.com/ +	 */ + +	 +?> +<div class="test"> +	<div class="test_header"> +		<?php echo $vars['function']; ?> +	</div> +	<div class="test_description"> +		<?php echo $vars['description']; ?> +	</div> +	<div class="test_button"> +		<?php +		 +			$form_body = elgg_view('input/submit', array('internalname' => 'execute', 'value' => elgg_echo('diagnostics:test:executetest'))); +		 +			echo elgg_view('input/form', array('action' => $vars['url'] . "pg/diagnostics/tests/{$vars['function']}", 'body' => $form_body)); +		?> +	</div> +</div>
\ No newline at end of file diff --git a/mod/diagnostics/views/default/diagnostics/testresult.php b/mod/diagnostics/views/default/diagnostics/testresult.php new file mode 100644 index 000000000..ddd688e93 --- /dev/null +++ b/mod/diagnostics/views/default/diagnostics/testresult.php @@ -0,0 +1,42 @@ +<?php +	/** +	 * Elgg diagnostics - test report +	 *  +	 * @package ElggDiagnostics +	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 +	 * @author Curverider Ltd +	 * @copyright Curverider Ltd 2008-2009 +	 * @link http://elgg.com/ +	 */ + +	$result = $vars['result']; +	 +	$testresult_div = 'fail'; +	$successmessage = ""; +	 +	if (!($result instanceof ElggTestResult)) +	{ +		$successmessage = elgg_echo('diagnostics:unittester:testresult:nottestclass'); +		$result = ElggTestResult::CreateFailResult(elgg_echo('diagnostics:unittester:testresult:fail')); +	} +	else +	{ +		if ($result->isSuccess()) +			$successmessage = elgg_echo('diagnostics:unittester:testresult:success'); +		else +			$successmessage = elgg_echo('diagnostics:unittester:testresult:fail'); +	} +?> +<div class="testreport"> +	<div class="testreport_<?php echo $testresult_div; ?>"> +		<div class="testreport_header"> +			<p><?php echo $vars['function']; ?> : <?php echo $successmessage; ?></p> +		</div> +		<div class="testreport_details"> +			<?php echo $result->getDetails(); ?> +		</div> +		<div class="testreport_debug"> +			<?php echo $result->getDebug(); ?> +		</div> +	</div> +</div>
\ No newline at end of file  | 
