diff options
Diffstat (limited to 'tests/FunctionalTests/config.php')
-rw-r--r-- | tests/FunctionalTests/config.php | 229 |
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 |