summaryrefslogtreecommitdiff
path: root/tests/FunctionalTests/config.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/FunctionalTests/config.php')
-rw-r--r--tests/FunctionalTests/config.php229
1 files changed, 229 insertions, 0 deletions
diff --git a/tests/FunctionalTests/config.php b/tests/FunctionalTests/config.php
new file mode 100644
index 00000000..c53d206d
--- /dev/null
+++ b/tests/FunctionalTests/config.php
@@ -0,0 +1,229 @@
+<?php
+
+//error_reporting(E_ALL);
+//restore_error_handler();
+
+$SIMPLE_TEST = dirname(__FILE__).'/../UnitTests';
+
+require_once($SIMPLE_TEST.'/simpletest/unit_tester.php');
+require_once($SIMPLE_TEST.'/simpletest/web_tester.php');
+require_once($SIMPLE_TEST.'/simpletest/mock_objects.php');
+require_once($SIMPLE_TEST.'/simpletest/reporter.php');
+require(dirname(__FILE__).'/selenium/php/selenium.php');
+
+/** test configurations , OVERRIDE to suite your enviornment !!! **/
+class PradoTestConfig
+{
+ //directories containing test files
+ public function unit_test_groups()
+ {
+ return array();
+ }
+
+ //test directory base
+ public function tests_directory()
+ {
+ return dirname(__FILE__).'/framework/';
+ }
+
+ //prado frame work directory
+ public static function framework()
+ {
+ return realpath(dirname(__FILE__).'/../../framework/');
+ }
+
+ //do test that require mysql database connection?
+ public function doMySQLTests()
+ {
+ return false;
+ }
+
+ //run the prado application
+ public function runApplication($appUrl='tests.php', $file=null, $class='PradoApplicationTester')
+ {
+ if(is_null($file))
+ $file = $this->tests_directory().'/application.xml';
+ $app = new $class($file, $this, $appUrl);
+ $app->run();
+ }
+
+ //file patterns to accept for test
+ public function acceptPattern()
+ {
+ return '/test(\w+)\.php/';
+ }
+
+ public function rejectPattern()
+ {
+ return null;
+ }
+
+ public function getTestCase()
+ {
+ return isset($_GET['file']) ? $_GET['file'] : '';
+ }
+}
+
+//set up the PradoApplication Testing stub.
+
+require_once(PradoTestConfig::framework().'/prado.php');
+require_once(PradoTestConfig::framework().'/TApplication.php');
+
+class PradoApplicationTester extends TApplication
+{
+ protected $testConfig;
+
+
+ public function __construct($spec, $config, $appUrl)
+ {
+ $this->testConfig = $config;
+ parent::__construct($spec);
+ $request = new FunctionTestRequest();
+ $request->init($this, null);
+ $request->setAppUrl($appUrl);
+ $this->setRequest($request);
+ $response = new FunctionTestResponse();
+ $response->init($this, null);
+ $this->setResponse($response);
+ }
+
+ public function run()
+ {
+ $this->applyDefaultExceptionHandlers();
+ $this->initApplication($this->getConfigurationFile(),null);
+ }
+
+ public function getServiceConfig()
+ {
+ $config=new TApplicationConfiguration;
+ $config->loadFromFile($this->getConfigurationFile());
+ return $config->getService($this->getTestServiceID());
+ }
+
+ public function getTestServiceID()
+ {
+ if(($serviceID=$this->getRequest()->getServiceID())===null)
+ $serviceID=self::DEFAULT_SERVICE;
+ return $serviceID;
+ }
+
+ public function getTestPage($file)
+ {
+ $parameter = $this->getTestServiceParameter($file);
+ $this->getRequest()->setServiceParameter($parameter);
+ $service = $this->getService();
+ $config = $this->getServiceConfig();
+ $service->init($this, $config[2]);
+ $service->run();
+ return $service->getRequestedPage();
+ }
+
+ protected function getTestServiceParameter($file)
+ {
+ $file = realpath($file);
+ $base = realpath($this->testConfig->tests_directory());
+ $search = array($base, '.php');
+ $replace = array('', '');
+ $pagePath = str_replace($search, $replace, $file);
+ $separator = array("/", "\\");
+ if(in_array($pagePath[0], $separator))
+ $pagePath = substr($pagePath, 1);
+ return str_replace($separator, array('.','.'), $pagePath);
+ }
+}
+
+class FunctionTestRequest extends THttpRequest
+{
+ protected $appUrl;
+
+ public function setServiceParameter($parameter)
+ {
+ parent::setServiceParameter($parameter);
+ }
+
+ public function setAppUrl($url)
+ {
+ $this->appUrl = $url;
+ }
+
+ public function getApplicationPath()
+ {
+ return $this->appUrl;
+ }
+
+ public function getTestUrl()
+ {
+ $serviceParam = $this->getServiceParameter();
+ $serviceID= prado::getApplication()->getTestServiceID();
+ return $this->constructUrl($serviceID, $serviceParam);
+ }
+}
+
+class FunctionTestResponse extends THttpResponse
+{
+ public function write($str)
+ {
+
+ }
+}
+
+/** set up the tests **/
+
+class PradoSimpleTester
+{
+ protected $tester;
+
+ function __construct($tester)
+ {
+ $this->tester = $tester;
+ $this->tester->runApplication();
+ }
+
+ function getTests($name='All Tests')
+ {
+ $unit_tests = new GroupTest($name);
+
+ foreach($this->tester->unit_test_groups() as $group => $dir)
+ {
+ $unit_tests->addTestCase($this->testSuits($group, $dir));
+ }
+ return $unit_tests;
+ }
+
+ protected function testSuits($group, $path)
+ {
+ $suite = new GroupTest($group);
+ $dir = dir($path);
+
+ while (false !== ($entry = $dir->read()))
+ {
+ $file = realpath($path.'/'.$entry);
+ $matchFile = $this->tester->getTestCase();
+ if(is_file($file) && $this->filePatternMatch($file))
+ {
+ if(empty($matchFile) ||
+ (!empty($matchFile)
+ && is_int(strpos($file, $matchFile))))
+ $suite->addTestFile($file);
+ }
+
+ }
+ $dir->close();
+ return $suite;
+ }
+
+ protected function filePatternMatch($file)
+ {
+ $accept = $this->tester->acceptPattern();
+ $reject = $this->tester->rejectPattern();
+
+ $valid = true;
+ if(!is_null($accept))
+ $valid = $valid && preg_match($accept, $file);
+ if(!is_null($reject))
+ $valid = $valid && !preg_match($reject, $file);
+ return $valid;
+ }
+}
+
+?> \ No newline at end of file