Browse Source

Adding test suite to the core.
Creating directories for application level testing

git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@4433 3807eeeb-6ff5-0310-8944-8be069107fe0

phpnut 19 years ago
parent
commit
d4a4105616

+ 231 - 0
app/webroot/test.php

@@ -0,0 +1,231 @@
+<?php
+/* SVN FILE: $Id$ */
+/**
+ * Short description for file.
+ *
+ * Long description for file
+ *
+ * PHP versions 4 and 5
+ *
+ * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
+ * Copyright 2005-2007, Cake Software Foundation, Inc.
+ *								1785 E. Sahara Avenue, Suite 490-204
+ *								Las Vegas, Nevada 89104
+ *
+ *  Licensed under The Open Group Test Suite License
+ *  Redistributions of files must retain the above copyright notice.
+ *
+ * @filesource
+ * @copyright		Copyright 2005-2007, Cake Software Foundation, Inc.
+ * @link				https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
+ * @package			cake
+ * @subpackage		cake.cake.tests.libs
+ * @since			CakePHP(tm) v 1.2.0.4433
+ * @version			$Revision$
+ * @modifiedby		$LastChangedBy$
+ * @lastmodified	$Date$
+ * @license			http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
+ */
+error_reporting(E_ALL);
+set_time_limit(600);
+ini_set('memory_limit','128M');
+class CakeDummyTestClass{
+
+}
+
+if (!defined('DS')) {
+	define('DS', DIRECTORY_SEPARATOR);
+}
+if (!defined('ROOT')) {
+	//define('ROOT', 'FULL PATH TO DIRECTORY WHERE APP DIRECTORY IS LOCATED DO NOT ADD A TRAILING DIRECTORY SEPARATOR';
+	define('ROOT', dirname(dirname(dirname(dirname(__FILE__)))).DS);
+}
+if (!defined('APP_DIR')) {
+	//define('APP_DIR', 'DIRECTORY NAME OF APPLICATION';
+	define ('APP_DIR', basename(dirname(dirname(dirname(__FILE__)))).DS);
+}
+/**
+ * This only needs to be changed if the cake installed libs are located
+ * outside of the distributed directory structure.
+ */
+if (!defined('CAKE_CORE_INCLUDE_PATH')) {
+	//define ('CAKE_CORE_INCLUDE_PATH', FULL PATH TO DIRECTORY WHERE CAKE CORE IS INSTALLED DO NOT ADD A TRAILING DIRECTORY SEPARATOR';
+	define('CAKE_CORE_INCLUDE_PATH', ROOT);
+}
+if (!defined('WEBROOT_DIR')) {
+	define ('WEBROOT_DIR', basename(dirname(dirname(__FILE__))));
+}
+define('WWW_ROOT', dirname(dirname(__FILE__)));
+
+if (!defined('CORE_PATH')) {
+	if (function_exists('ini_set')) {
+		ini_set('include_path', CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS . PATH_SEPARATOR . ini_get('include_path'));
+		define('APP_PATH', null);
+		define('CORE_PATH', null);
+	} else {
+		define('APP_PATH', ROOT . DS . APP_DIR . DS);
+		define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS);
+	}
+}
+
+require_once APP_PATH . 'core.php';
+if(DEBUG < 1) {
+	die('Invalid url.');
+}
+require_once 'cake' . DS . 'bootstrap.php';
+require_once 'cake' . DS . 'basics.php';
+require_once 'cake' . DS . 'config' . DS . 'paths.php';
+require_once 'cake' . DS . 'tests' . DS . 'lib' . DS . 'test_manager.php';
+vendor('simpletest' . DS . 'reporter');
+
+if (!isset($_SERVER['SERVER_NAME'])) {
+	$_SERVER['SERVER_NAME'] = '';
+}
+if (empty( $_GET['output'])) {
+	$_GET['output'] = 'html';
+}
+
+if (!defined('BASE_URL')){
+	$dispatch =& new Dispatcher();
+	define('BASE_URL', $dispatch->baseUrl());
+}
+/**
+ *
+ * Used to determine output to display
+ */
+define('CAKE_TEST_OUTPUT_HTML',1);
+define('CAKE_TEST_OUTPUT_TEXT',2);
+
+if(isset($_GET['output']) && $_GET['output'] == 'html') {
+	define('CAKE_TEST_OUTPUT', CAKE_TEST_OUTPUT_HTML);
+} else {
+	define('CAKE_TEST_OUTPUT', CAKE_TEST_OUTPUT_TEXT);
+}
+
+	function &CakeTestsGetReporter() {
+		static $Reporter = NULL;
+		if (!$Reporter) {
+			switch (CAKE_TEST_OUTPUT) {
+				case CAKE_TEST_OUTPUT_HTML:
+					require_once TESTS . 'lib'.DS.'cake_reporter.php';
+					$Reporter = new CakeHtmlReporter();
+				break;
+				default:
+					$Reporter = new TextReporter();
+				break;
+			}
+		}
+		return $Reporter;
+	}
+
+	function CakePHPTestRunMore() {
+		switch (CAKE_TEST_OUTPUT) {
+			case CAKE_TEST_OUTPUT_HTML:
+				echo "<p><a href='" . $_SERVER['PHP_SELF'] . "'>Run more tests</a></p>\n";
+			break;
+		}
+	}
+
+	function CakePHPTestCaseList() {
+		switch (CAKE_TEST_OUTPUT) {
+			case CAKE_TEST_OUTPUT_HTML:
+				if (isset($_GET['app'])) {
+					echo HtmlTestManager::getTestCaseList(APP_TEST_CASES);
+				} else {
+					echo HtmlTestManager::getTestCaseList(CORE_TEST_CASES);
+				}
+			break;
+			case CAKE_TEST_OUTPUT_TEXT:
+			default:
+				if (isset($_GET['app'])) {
+					echo TextTestManager::getTestCaseList(APP_TEST_CASES);
+				} else {
+					echo TextTestManager::getTestCaseList(CORE_TEST_CASES);
+				}
+			break;
+		}
+	}
+
+	function CakePHPTestGroupTestList() {
+		switch (CAKE_TEST_OUTPUT) {
+			case CAKE_TEST_OUTPUT_HTML:
+				if (isset($_GET['app'])) {
+					echo HtmlTestManager::getGroupTestList(APP_TEST_GROUPS);
+				} else {
+					echo HtmlTestManager::getGroupTestList(CORE_TEST_GROUPS);
+				}
+			break;
+			case CAKE_TEST_OUTPUT_TEXT:
+			default:
+				if (isset($_GET['app'])) {
+					echo TextTestManager::getGroupTestList(APP_TEST_GROUPS);
+				} else {
+					echo TextTestManager::getGroupTestList(CORE_TEST_GROUPS);
+				}
+				break;
+		}
+	}
+
+	function CakePHPTestHeader() {
+		switch (CAKE_TEST_OUTPUT) {
+			case CAKE_TEST_OUTPUT_HTML:
+				$baseUrl = BASE_URL;
+				include 'cake' . DS . 'tests' . DS . 'lib' . DS . 'header.php';
+			break;
+			case CAKE_TEST_OUTPUT_TEXT:
+			default:
+				header(' content-type: text/plain');
+			break;
+		}
+	}
+
+	function CakePHPTestSuiteHeader() {
+		switch (CAKE_TEST_OUTPUT) {
+			case CAKE_TEST_OUTPUT_HTML:
+				$groups = $_SERVER['PHP_SELF'].'?show=groups';
+				$cases = $_SERVER['PHP_SELF'].'?show=cases';
+				include 'cake' . DS . 'tests' . DS . 'lib' . DS . 'content.php';
+			break;
+		}
+	}
+
+	function CakePHPTestSuiteFooter() {
+		switch ( CAKE_TEST_OUTPUT) {
+			case CAKE_TEST_OUTPUT_HTML:
+				include 'cake' . DS . 'tests' . DS . 'lib' . DS . 'footer.php';
+			break;
+		}
+	}
+
+	if (isset($_GET['group'])) {
+		if ('all' == $_GET['group']) {
+			TestManager::runAllTests(CakeTestsGetReporter());
+		} else {
+			if (isset($_GET['app'])) {
+				TestManager::runGroupTest(ucfirst($_GET['group']), APP_TEST_GROUPS, CakeTestsGetReporter());
+			} else {
+				TestManager::runGroupTest(ucfirst($_GET['group']), CORE_TEST_GROUPS, CakeTestsGetReporter());
+			}
+		}
+		CakePHPTestRunMore();
+		CakePHPTestSuiteFooter();
+		exit();
+	}
+
+	if (isset($_GET['case'])) {
+		TestManager::runTestCase($_GET['case'], CakeTestsGetReporter());
+		CakePHPTestRunMore();
+		CakePHPTestSuiteFooter();
+		exit();
+	}
+
+	CakePHPTestHeader();
+	CakePHPTestSuiteHeader();
+
+	if (isset($_GET['show']) && $_GET['show'] == 'cases') {
+		CakePHPTestCaseList();
+	} else {
+		CakePHPTestGroupTestList();
+	}
+	CakePHPTestSuiteFooter();
+?>

+ 90 - 0
cake/tests/lib/cake_reporter.php

@@ -0,0 +1,90 @@
+<?php
+/* SVN FILE: $Id$ */
+/**
+ * Short description for file.
+ *
+ * Long description for file
+ *
+ * PHP versions 4 and 5
+ *
+ * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
+ * Copyright 2005-2007, Cake Software Foundation, Inc.
+ *								1785 E. Sahara Avenue, Suite 490-204
+ *								Las Vegas, Nevada 89104
+ *
+ *  Licensed under The Open Group Test Suite License
+ *  Redistributions of files must retain the above copyright notice.
+ *
+ * @filesource
+ * @copyright		Copyright 2005-2007, Cake Software Foundation, Inc.
+ * @link				https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
+ * @package			cake
+ * @subpackage		cake.cake.tests.libs
+ * @since			CakePHP(tm) v 1.2.0.4433
+ * @version			$Revision$
+ * @modifiedby		$LastChangedBy$
+ * @lastmodified	$Date$
+ * @license			http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
+ */
+/**
+ * Short description for class.
+ *
+ * @package    cake
+ * @subpackage cake.cake.tests.lib
+ */
+class CakeHtmlReporter extends HtmlReporter {
+/**
+ *    Does nothing yet. The first output will
+ *    be sent on the first test start. For use
+ *    by a web browser.
+ *    @access public
+ */
+	function CakeHtmlReporter($characterSet = 'ISO-8859-1') {
+		parent::HtmlReporter($characterSet);
+	}
+/**
+ *    Paints the top of the web page setting the
+ *    title to the name of the starting test.
+ *    @param string $test_name      Name class of test.
+ *    @access public
+ */
+	function paintHeader($testName) {
+		$this->sendNoCacheHeaders();
+		$baseUrl = BASE_URL;
+		print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
+		print "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n";
+		print "<head>\n";
+		print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" . $this->_character_set . "\" />\n";
+		print "<title>CakePHP(tm) Test Suite v 1.2.0.0 :: $testName</title>\n";
+		print "<link rel=\"stylesheet\" type=\"text/css\" href=\"$baseUrl/css/cake.generic.css\" />\n";
+		print "<style type=\"text/css\">\n";
+		print $this->_getCss() . "\n";
+		print "</style>\n";
+		print "</head>\n<body>\n";
+		print "<div id=\"wrapper\">\n";
+		print "<div id=\"content\">\n";
+		print "<h1>CakePHP(tm) Test Suite v 1.2.0.0</h1>\n";
+		print "<h2>$testName</h2>\n";
+		flush();
+	}
+/**
+ * Paints the end of the test with a summary of
+ * the passes and failures.
+ *  @param string $test_name Name class of test.
+ * @access public
+ *
+ */
+	function paintFooter($testName) {
+    	$colour = ($this->getFailCount() + $this->getExceptionCount() > 0 ? "red" : "green");
+    	print "<div style=\"";
+    	print "padding: 8px; margin-top: 1em; background-color: $colour; color: white;";
+    	print "\">";
+    	print $this->getTestCaseProgress() . "/" . $this->getTestCaseCount();
+    	print " test cases complete:\n";
+    	print "<strong>" . $this->getPassCount() . "</strong> passes, ";
+    	print "<strong>" . $this->getFailCount() . "</strong> fails and ";
+    	print "<strong>" . $this->getExceptionCount() . "</strong> exceptions.";
+    	print "</div>\n";
+	}
+}
+?>

+ 41 - 0
cake/tests/lib/cake_web_test_case.php

@@ -0,0 +1,41 @@
+<?php
+/* SVN FILE: $Id$ */
+/**
+ * Short description for file.
+ *
+ * Long description for file
+ *
+ * PHP versions 4 and 5
+ *
+ * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
+ * Copyright 2005-2007, Cake Software Foundation, Inc.
+ *								1785 E. Sahara Avenue, Suite 490-204
+ *								Las Vegas, Nevada 89104
+ *
+ *  Licensed under The Open Group Test Suite License
+ *  Redistributions of files must retain the above copyright notice.
+ *
+ * @filesource
+ * @copyright		Copyright 2005-2007, Cake Software Foundation, Inc.
+ * @link				https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
+ * @package			cake
+ * @subpackage		cake.cake.tests.lib
+ * @since			CakePHP(tm) v 1.2.0.4433
+ * @version			$Revision$
+ * @modifiedby		$LastChangedBy$
+ * @lastmodified	$Date$
+ * @license			http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
+ */
+/**
+ * Short description
+ */
+	SimpleTestOptions::ignore('CakeWebTestCase');
+/**
+ * Short description for class.
+ *
+ * @package    cake
+ * @subpackage cake.cake.tests.lib
+ */
+class CakeWebTestCase extends WebTestCase {
+}
+?>

+ 111 - 0
cake/tests/lib/cli_reporter.php

@@ -0,0 +1,111 @@
+<?php
+/* SVN FILE: $Id$ */
+/**
+ * Short description for file.
+ *
+ * Long description for file
+ *
+ * PHP versions 4 and 5
+ *
+ * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
+ * Copyright 2005-2007, Cake Software Foundation, Inc.
+ *								1785 E. Sahara Avenue, Suite 490-204
+ *								Las Vegas, Nevada 89104
+ *
+ *  Licensed under The Open Group Test Suite License
+ *  Redistributions of files must retain the above copyright notice.
+ *
+ * @filesource
+ * @copyright		Copyright 2005-2007, Cake Software Foundation, Inc.
+ * @link				https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
+ * @package			cake
+ * @subpackage		cake.cake.tests.libs
+ * @since			CakePHP(tm) v 1.2.0.4433
+ * @version			$Revision$
+ * @modifiedby		$LastChangedBy$
+ * @lastmodified	$Date$
+ * @license			http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
+ */
+	if (! defined('ST_FAILDETAIL_SEPARATOR')) {
+	    define('ST_FAILDETAIL_SEPARATOR', "->");
+	}
+
+	if (! defined('ST_FAILS_RETURN_CODE')) {
+	    define('ST_FAILS_RETURN_CODE', 1);
+	}
+
+	if (version_compare(phpversion(), '4.3.0', '<') ||
+	    php_sapi_name() == 'cgi') {
+	    define('STDOUT', fopen('php://stdout', 'w'));
+	    define('STDERR', fopen('php://stderr', 'w'));
+	    register_shutdown_function(
+	        create_function('', 'fclose(STDOUT); fclose(STDERR); return true;'));
+	}
+/**
+ * Minimal command line test displayer. Writes fail details to STDERR. Returns 0
+ * to the shell if all tests pass, ST_FAILS_RETURN_CODE if any test fails.
+ *
+ * @package    cake
+ * @subpackage cake.cake.tests.libs
+ */
+class CLIReporter extends SimpleReporter {
+	var $faildetail_separator = ST_FAILDETAIL_SEPARATOR;
+
+	function CLIReporter($faildetail_separator = NULL) {
+		$this->SimpleReporter();
+		if (! is_null($faildetail_separator)) {
+			$this->setFailDetailSeparator($faildetail_separator);
+		}
+	}
+
+	function setFailDetailSeparator($separator) {
+		$this->faildetail_separator = $separator;
+	}
+/**
+ * Return a formatted faildetail for printing.
+ */
+	function &_paintTestFailDetail(&$message) {
+		$buffer = '';
+		$faildetail = $this->getTestList();
+		array_shift($faildetail);
+		$buffer .= implode($this->faildetail_separator, $faildetail);
+		$buffer .= $this->faildetail_separator . "$message\n";
+		return $buffer;
+	}
+/**
+ * Paint fail faildetail to STDERR.
+ */
+	function paintFail($message) {
+		parent::paintFail($message);
+		fwrite(STDERR, 'FAIL' . $this->faildetail_separator . $this->_paintTestFailDetail($message));
+	}
+/**
+ * Paint exception faildetail to STDERR.
+ */
+	function paintException($message) {
+		parent::paintException($message);
+		fwrite(STDERR, 'EXCEPTION' . $this->faildetail_separator . $this->_paintTestFailDetail($message));
+	}
+/**
+ * Paint a footer with test case name, timestamp, counts of fails and exceptions.
+ */
+	function paintFooter($test_name) {
+		$buffer = $this->getTestCaseProgress() . '/' . $this->getTestCaseCount() . ' test cases complete: ';
+
+		if (0 < ($this->getFailCount() + $this->getExceptionCount())) {
+			$buffer .= $this->getPassCount() . " passes";
+			if (0 < $this->getFailCount()) {
+				$buffer .= ", " . $this->getFailCount() . " fails";
+			}
+			if (0 < $this->getExceptionCount()) {
+				$buffer .= ", " . $this->getExceptionCount() . " exceptions";
+			}
+			$buffer .= ".\n";
+			fwrite(STDOUT, $buffer);
+			exit(ST_FAILS_RETURN_CODE);
+		} else {
+			fwrite(STDOUT, $buffer . $this->getPassCount() . " passes.\n");
+		}
+	}
+}
+?>

+ 40 - 0
cake/tests/lib/content.php

@@ -0,0 +1,40 @@
+<?php
+/* SVN FILE: $Id$ */
+/**
+ * Short description for file.
+ *
+ * Long description for file
+ *
+ * PHP versions 4 and 5
+ *
+ * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
+ * Copyright 2005-2007, Cake Software Foundation, Inc.
+ *								1785 E. Sahara Avenue, Suite 490-204
+ *								Las Vegas, Nevada 89104
+ *
+ *  Licensed under The Open Group Test Suite License
+ *  Redistributions of files must retain the above copyright notice.
+ *
+ * @filesource
+ * @copyright		Copyright 2005-2007, Cake Software Foundation, Inc.
+ * @link				https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
+ * @package			cake
+ * @subpackage		cake.cake.tests.lib
+ * @since			CakePHP(tm) v 1.2.0.4433
+ * @version			$Revision$
+ * @modifiedby		$LastChangedBy$
+ * @lastmodified	$Date$
+ * @license			http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
+ */
+?>
+<div id="wrapper">
+	<div id="content">
+		<h1>CakePHP(tm) Test Suite v 1.2.0.0</h1>
+			<ul>
+				<li><a href='<?php echo $groups;?>'>Core Test Groups</a></li>
+				<li><a href='<?php echo $cases;?>'>Core Test Cases</a></li>
+			</ul>
+			<ul>
+				<li><a href='<?php echo $groups;?>&amp;app=true'>App Test Groups</a></li>
+				<li><a href='<?php echo $cases;?>&amp;app=true'>App Test Cases</a></li>
+			</ul>

+ 42 - 0
cake/tests/lib/footer.php

@@ -0,0 +1,42 @@
+<?php
+/* SVN FILE: $Id$ */
+/**
+ * Short description for file.
+ *
+ * Long description for file
+ *
+ * PHP versions 4 and 5
+ *
+ * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
+ * Copyright 2005-2007, Cake Software Foundation, Inc.
+ *								1785 E. Sahara Avenue, Suite 490-204
+ *								Las Vegas, Nevada 89104
+ *
+ *  Licensed under The Open Group Test Suite License
+ *  Redistributions of files must retain the above copyright notice.
+ *
+ * @filesource
+ * @copyright		Copyright 2005-2007, Cake Software Foundation, Inc.
+ * @link				https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
+ * @package			cake
+ * @subpackage		cake.cake.tests.lib
+ * @since			CakePHP(tm) v 1.2.0.4433
+ * @version			$Revision$
+ * @modifiedby		$LastChangedBy$
+ * @lastmodified	$Date$
+ * @license			http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
+ */
+?>
+ 		</div>
+ 		<div id="footer">
+ 			<p>
+ 				<a href="https://trac.cakephp.org/wiki/Developement/TestSuite">CakePHP(tm) Test Suite </a> ::
+ 				<a href="http://www.cakefoundation.org/"> &copy; 2005-2007, Cake Software Foundation, Inc.</a></p>
+ 			<p>
+ 			<!--PLEASE USE ONE OF THE POWERED BY CAKEPHP LOGO-->
+ 			<a href="http://www.cakephp.org/" target="_new">
+ 				<img src="<?php echo $baseUrl; ?>/img/cake.power.png" alt="CakePHP(tm) :: Rapid Development Framework" height = "15" width = "80" /></a></p>
+ 		</div>
+ 		</div>
+ 	</body>
+ 	</html>

+ 37 - 0
cake/tests/lib/header.php

@@ -0,0 +1,37 @@
+<?php
+/* SVN FILE: $Id$ */
+/**
+ * Short description for file.
+ *
+ * Long description for file
+ *
+ * PHP versions 4 and 5
+ *
+ * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
+ * Copyright 2005-2007, Cake Software Foundation, Inc.
+ *								1785 E. Sahara Avenue, Suite 490-204
+ *								Las Vegas, Nevada 89104
+ *
+ *  Licensed under The Open Group Test Suite License
+ *  Redistributions of files must retain the above copyright notice.
+ *
+ * @filesource
+ * @copyright		Copyright 2005-2007, Cake Software Foundation, Inc.
+ * @link				https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
+ * @package			cake
+ * @subpackage		cake.cake.tests.lib
+ * @since			CakePHP(tm) v 1.2.0.4433
+ * @version			$Revision$
+ * @modifiedby		$LastChangedBy$
+ * @lastmodified	$Date$
+ * @license			http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
+ */
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv='content-Type' content='text/html; charset=iso-8859-1' />
+		<title>CakePHP(tm) Test Suite v 1.2.0.0</title>
+		<link rel="stylesheet" type="text/css" href="<?php echo $baseUrl; ?>/css/cake.generic.css" />
+	</head>
+	<body>

+ 353 - 0
cake/tests/lib/test_manager.php

@@ -0,0 +1,353 @@
+<?php
+/* SVN FILE: $Id$ */
+/**
+ * Short description for file.
+ *
+ * Long description for file
+ *
+ * PHP versions 4 and 5
+ *
+ * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
+ * Copyright 2005-2007, Cake Software Foundation, Inc.
+ *								1785 E. Sahara Avenue, Suite 490-204
+ *								Las Vegas, Nevada 89104
+ *
+ *  Licensed under The Open Group Test Suite License
+ *  Redistributions of files must retain the above copyright notice.
+ *
+ * @filesource
+ * @copyright		Copyright 2005-2007, Cake Software Foundation, Inc.
+ * @link				https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
+ * @package			cake
+ * @subpackage		cake.cake.tests.lib
+ * @since			CakePHP(tm) v 1.2.0.4433
+ * @version			$Revision$
+ * @modifiedby		$LastChangedBy$
+ * @lastmodified	$Date$
+ * @license			http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
+ */
+define ('CORE_TEST_CASES', CAKE_CORE_INCLUDE_PATH .'cake' . DS . 'tests' .DS. 'cases');
+define ('CORE_TEST_GROUPS', CAKE_CORE_INCLUDE_PATH  .'cake' . DS . 'tests' .DS. 'groups');
+define ('APP_TEST_CASES', ROOT . APP_DIR . 'tests' .DS. 'cases');
+define ('APP_TEST_GROUPS', ROOT . APP_DIR . 'tests' .DS. 'groups');
+/**
+ * Short description for class.
+ *
+ * @package    cake
+ * @subpackage cake.cake.tests.lib
+ */
+class TestManager {
+	var $_testExtension = '.test.php';
+	var $_groupExtension = '.group.php';
+	var $usersAppTest = false;
+
+	function TestManager() {
+		$this->_installSimpleTest();
+		if (isset($_GET['app'])) {
+			$this->usersAppTest = true;
+		}
+	}
+
+	function _installSimpleTest() {
+		vendor('simpletest'.DS.'unit_tester', 'simpletest'.DS.'web_tester', 'simpletest'.DS.'mock_objects');
+		require_once(LIB_TESTS.'cake_web_test_case.php');
+	}
+
+	function runAllTests(&$reporter) {
+		$manager =& new TestManager();
+
+		if(!empty($manager->usersAppTest)) {
+			$testCasePath = APP_TEST_CASES . DIRECTORY_SEPARATOR;
+		} else {
+			$testCasePath = CORE_TEST_CASES . DIRECTORY_SEPARATOR;
+		}
+		$testCases =& $manager->_getTestFileList($testCasePath);
+		$test =& new GroupTest('All Core Tests');
+
+		if (isset($_GET['app'])) {
+			$test =& new GroupTest('All App Tests');
+		} else {
+			$test =& new GroupTest('All Core Tests');
+		}
+
+		foreach ($testCases as $testCase) {
+			$test->addTestFile($testCase);
+		}
+		$test->run($reporter);
+	}
+
+	function runTestCase($testCaseFile, &$reporter) {
+		$manager =& new TestManager();
+
+		if(!empty($manager->usersAppTest)) {
+			$testCaseFileWithPath = APP_TEST_CASES . DIRECTORY_SEPARATOR . $testCaseFile;
+		} else {
+			$testCaseFileWithPath = CORE_TEST_CASES . DIRECTORY_SEPARATOR . $testCaseFile;
+		}
+		if (! file_exists($testCaseFileWithPath)) {
+			trigger_error("Test case {$testCaseFile} cannot be found", E_USER_ERROR);
+		}
+		$test =& new GroupTest("Individual test case: " . $testCaseFile);
+		$test->addTestFile($testCaseFileWithPath);
+		$test->run($reporter);
+	}
+
+	function runGroupTest($groupTestName, $groupTestDirectory, &$reporter) {
+		$manager =& new TestManager();
+		$filePath = $groupTestDirectory . DIRECTORY_SEPARATOR .
+		strtolower($groupTestName) . $manager->_groupExtension;
+
+		if (! file_exists($filePath)) {
+			trigger_error("Group test {$groupTestName} cannot be found at {$filePath}", E_USER_ERROR);
+		}
+
+		require_once $filePath;
+		$test =& new GroupTest($groupTestName . ' group test');
+
+		foreach ($manager->_getGroupTestClassNames($filePath) as $groupTest) {
+			$test->addTestCase(new $groupTest());
+		}
+		$test->run($reporter);
+	}
+
+	function addTestCasesFromDirectory(&$groupTest, $directory = '.') {
+		$manager =& new TestManager();
+		$testCases =& $manager->_getTestFileList($directory);
+		foreach ($testCases as $testCase) {
+			$groupTest->addTestFile($testCase);
+		}
+	}
+
+	function &getTestCaseList($directory = '.') {
+		$manager =& new TestManager();
+		$return = $manager->_getTestCaseList($directory);
+		return $return;
+	}
+
+	function &_getTestCaseList($directory = '.') {
+		$fileList =& $this->_getTestFileList($directory);
+		$testCases = array();
+		foreach ($fileList as $testCaseFile) {
+			$testCases[$testCaseFile] = str_replace($directory . DS, '', $testCaseFile);
+		}
+		return $testCases;
+	}
+
+	function &_getTestFileList($directory = '.') {
+		$return = $this->_getRecursiveFileList($directory, array(&$this, '_isTestCaseFile'));
+		return $return;
+	}
+
+	function &getGroupTestList($directory = '.') {
+		$manager =& new TestManager();
+		$return = $manager->_getTestGroupList($directory);
+		return $return;
+	}
+
+	function &_getTestGroupFileList($directory = '.') {
+		$return = $this->_getRecursiveFileList($directory, array(&$this, '_isTestGroupFile'));
+		return $return;
+	}
+
+	function &_getTestGroupList($directory = '.') {
+		$fileList =& $this->_getTestGroupFileList($directory);
+		$groupTests = array();
+
+		foreach ($fileList as $groupTestFile) {
+			$groupTests[$groupTestFile] = str_replace($this->_groupExtension, '', basename($groupTestFile));
+		}
+		sort($groupTests);
+		return $groupTests;
+	}
+
+	function &_getGroupTestClassNames($groupTestFile) {
+		$file = implode("\n", file($groupTestFile));
+		preg_match("~lass\s+?(.*)\s+?extends GroupTest~", $file, $matches);
+		if (! empty($matches)) {
+			unset($matches[0]);
+			return $matches;
+		} else {
+			return array();
+		}
+	}
+
+	function &_getRecursiveFileList($directory = '.', $fileTestFunction) {
+		$dh = opendir($directory);
+		if (! is_resource($dh)) {
+			trigger_error("Couldn't open {$directory}", E_USER_ERROR);
+		}
+
+		$fileList = array();
+		while ($file = readdir($dh)) {
+			$filePath = $directory . DIRECTORY_SEPARATOR . $file;
+			if (0 === strpos($file, '.')) {
+				continue;
+			}
+
+			if (is_dir($filePath)) {
+				$fileList = array_merge($fileList, $this->_getRecursiveFileList($filePath, $fileTestFunction));
+			}
+			if ($fileTestFunction[0]->$fileTestFunction[1]($file)) {
+				$fileList[] = $filePath;
+			}
+		}
+		closedir($dh);
+		return $fileList;
+	}
+
+	function _isTestCaseFile($file) {
+		return $this->_hasExpectedExtension($file, $this->_testExtension);
+	}
+
+	function _isTestGroupFile($file) {
+		return $this->_hasExpectedExtension($file, $this->_groupExtension);
+	}
+
+	function _hasExpectedExtension($file, $extension) {
+		return $extension == strtolower(substr($file, (0 - strlen($extension))));
+	}
+}
+/**
+ * Short description for class.
+ *
+ * @package    cake
+ * @subpackage cake.cake.tests.lib
+ */
+class CliTestManager extends TestManager {
+
+	function &getGroupTestList($directory = '.') {
+		$manager =& new CliTestManager();
+		$groupTests =& $manager->_getTestGroupList($directory);
+		$buffer = "Available Group Test:\n";
+
+		foreach ($groupTests as $groupTest) {
+			$buffer .= "  " . $groupTest . "\n";
+		}
+		return $buffer . "\n";
+	}
+
+	function &getTestCaseList($directory = '.') {
+		$manager =& new CliTestManager();
+		$testCases =& $manager->_getTestCaseList($directory);
+		$buffer = "Available Test Cases:\n";
+
+		foreach ($testCases as $testCaseFile => $testCase) {
+			$buffer .= "  " . $testCaseFile . "\n";
+		}
+		return $buffer . "\n";
+	}
+}
+/**
+ * Short description for class.
+ *
+ * @package    cake
+ * @subpackage cake.cake.tests.lib
+ */
+class TextTestManager extends TestManager {
+	var $_url;
+
+	function TextTestManager() {
+		$this->_url = $_SERVER['PHP_SELF'];
+	}
+
+	function getBaseURL() {
+		return $this->_url;
+	}
+
+	function &getGroupTestList($directory = '.') {
+		$manager =& new TextTestManager();
+		$groupTests =& $manager->_getTestGroupList($directory);
+
+		if (1 > count($groupTests)) {
+      $noGroups = "No test groups set up!\n";
+      return $noGroups;
+		}
+		$buffer = "Available test groups:\n";
+		$buffer .=  $manager->getBaseURL() . "?group=all All tests<\n";
+
+		foreach ($groupTests as $groupTest) {
+			$buffer .= "<li><a href='" . $manager->getBaseURL() . "?group={$groupTest}'>" . $groupTest . "&output=txt"."</a></li>\n";
+		}
+		return $buffer . "</ul>\n";
+	}
+
+	function &getTestCaseList($directory = '.') {
+		$manager =& new TextTestManager();
+		$testCases =& $manager->_getTestCaseList($directory);
+
+		if (1 > count($testCases)) {
+			$noTestCases = "No test cases set up!";
+			return $noTestCases;
+		}
+		$buffer = "Available test cases:\n";
+
+		foreach ($testCases as $testCaseFile => $testCase) {
+			$buffer .= $_SERVER['SERVER_NAME']. $manager->getBaseURL()."?case=" . $testCase . "&output=txt"."\n";
+		}
+		return $buffer . "\n";
+	}
+}
+/**
+ * Short description for class.
+ *
+ * @package    cake
+ * @subpackage cake.cake.tests.lib
+ */
+class HtmlTestManager extends TestManager {
+	var $_url;
+
+	function HtmlTestManager() {
+		$this->_url = $_SERVER['PHP_SELF'];
+	}
+
+	function getBaseURL() {
+		return $this->_url;
+	}
+
+	function &getGroupTestList($directory = '.') {
+		$userApp = '';
+		if (isset($_GET['app'])) {
+			$userApp = '&amp;app=true';
+		}
+		$manager =& new HtmlTestManager();
+		$groupTests =& $manager->_getTestGroupList($directory);
+
+		if (isset($_GET['app'])){
+			$buffer = "<p>Available App Test Groups:</p>\n<ul>";
+		} else {
+			$buffer = "<p>Available Core Test Groups:</p>\n<ul>";
+		}
+		$buffer .= "<li><a href='" . $manager->getBaseURL() . "?group=all$userApp'>All tests</a></li>\n";
+
+		foreach ($groupTests as $groupTest) {
+			$buffer .= "<li><a href='" . $manager->getBaseURL() . "?group={$groupTest}" . "{$userApp}'>" . $groupTest . "</a></li>\n";
+		}
+		$buffer  .=  "</ul>\n";
+		return $buffer;
+	}
+
+	function &getTestCaseList($directory = '.') {
+		$userApp = '';
+		if (isset($_GET['app'])) {
+			$userApp = '&amp;app=true';
+		}
+		$manager =& new HtmlTestManager();
+		$testCases =& $manager->_getTestCaseList($directory);
+
+		if (1 > count($testCases)) {
+			$noTestCases = "<p>No test cases set up!</p>";
+			return $noTestCases;
+		}
+		if (isset($_GET['app'])) {
+			$buffer = "<p>Available App Test Cases:</p>\n<ul>";
+		} else {
+			$buffer = "<p>Available Core Test Cases:</p>\n<ul>";
+		}
+		foreach ($testCases as $testCaseFile => $testCase) {
+			$buffer .= "<li><a href='" . $manager->getBaseURL() . "?case=" . urlencode($testCase) . $userApp ."'>" . $testCase . "</a></li>\n";
+		}
+		$buffer  .=  "</ul>\n";
+		return $buffer;
+	}
+}
+?>