From e3a500d41d008ed9f26438e467cd860b7aa0b39a Mon Sep 17 00:00:00 2001 From: quix0r Date: Wed, 11 Jun 2008 22:45:54 +0000 Subject: [PATCH] Tests added, dublicate classes removed --- .gitattributes | 9 +- .../main/controller/registration/.htaccess | 1 - .../class_DefaultRegistrationController.php | 71 --- inc/classes/main/database/classes/.htaccess | 1 - .../classes/class_LocalFileDatabase.php | 465 ------------------ tests/ConfigTest.php | 41 +- tests/RegistryTest.php | 94 ++++ tests/RequestTest.php | 102 ++++ tests/Test.php | 54 ++ tests/all-tests.sh | 3 + tests/unittest.sh | 5 + 11 files changed, 295 insertions(+), 551 deletions(-) delete mode 100644 inc/classes/main/controller/registration/.htaccess delete mode 100644 inc/classes/main/controller/registration/class_DefaultRegistrationController.php delete mode 100644 inc/classes/main/database/classes/.htaccess delete mode 100644 inc/classes/main/database/classes/class_LocalFileDatabase.php create mode 100644 tests/RegistryTest.php create mode 100644 tests/RequestTest.php create mode 100644 tests/Test.php create mode 100644 tests/all-tests.sh create mode 100644 tests/unittest.sh diff --git a/.gitattributes b/.gitattributes index 63a4f43a18..49f206fb04 100644 --- a/.gitattributes +++ b/.gitattributes @@ -177,16 +177,12 @@ inc/classes/main/controller/default/class_WebDefaultController.php -text inc/classes/main/controller/default/class_WebDefaultNewsController.php -text inc/classes/main/controller/form/.htaccess -text inc/classes/main/controller/form/class_WebDoFormController.php -text -inc/classes/main/controller/registration/.htaccess -text -inc/classes/main/controller/registration/class_DefaultRegistrationController.php -text inc/classes/main/criteria/.htaccess -text inc/classes/main/criteria/class_SearchCriteria.php -text inc/classes/main/database/.htaccess -text inc/classes/main/database/class_ -text inc/classes/main/database/class_BaseDatabaseFrontend.php -text inc/classes/main/database/class_BaseDatabaseWrapper.php -text -inc/classes/main/database/classes/.htaccess -text -inc/classes/main/database/classes/class_LocalFileDatabase.php -text inc/classes/main/database/databases/.htaccess -text inc/classes/main/database/databases/class_LocalFileDatabase.php -text inc/classes/main/database/wrapper/.htaccess -text @@ -277,3 +273,8 @@ templates/de/code/footer_msg.ctp -text templates/de/code/header.ctp -text templates/de/html/.htaccess -text tests/ConfigTest.php -text +tests/RegistryTest.php -text +tests/RequestTest.php -text +tests/Test.php -text +tests/all-tests.sh -text +tests/unittest.sh -text diff --git a/inc/classes/main/controller/registration/.htaccess b/inc/classes/main/controller/registration/.htaccess deleted file mode 100644 index 3a42882788..0000000000 --- a/inc/classes/main/controller/registration/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/inc/classes/main/controller/registration/class_DefaultRegistrationController.php b/inc/classes/main/controller/registration/class_DefaultRegistrationController.php deleted file mode 100644 index 2f15e400db..0000000000 --- a/inc/classes/main/controller/registration/class_DefaultRegistrationController.php +++ /dev/null @@ -1,71 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software - * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -class DefaultRegistrationController extends BaseController implements Controller { - /** - * Private constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - - // Set part description - $this->setObjectDescription("Ein Standart-Anmelde-Controller"); - - // Create unique ID number - $this->createUniqueID(); - - // Clean up a little - $this->removeSystemArray(); - } - - /** - * Creates an instance of this class - * - * @return $controllerInstance A prepared instance of this class - */ - public final static function createDefaultRegistrationController () { - // Create the instance - $controllerInstance = new DefaultRegistrationController(); - - // Return the prepared instance - return $controllerInstance; - } - - /** - * Handles the given request and response - * - * @param $requestInstance An instance of a request class - * @param $responseInstance An instance of a response class - * @return void - */ - public function handleRequest (Requestable $requestInstance, Responseable $responseInstance) { - die(__METHOD__.": Stub!"); - } -} - -// [EOF] -?> diff --git a/inc/classes/main/database/classes/.htaccess b/inc/classes/main/database/classes/.htaccess deleted file mode 100644 index 3a42882788..0000000000 --- a/inc/classes/main/database/classes/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/inc/classes/main/database/classes/class_LocalFileDatabase.php b/inc/classes/main/database/classes/class_LocalFileDatabase.php deleted file mode 100644 index 432a168f04..0000000000 --- a/inc/classes/main/database/classes/class_LocalFileDatabase.php +++ /dev/null @@ -1,465 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software - * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontendInterface { - /** - * Save path for "file database" - */ - private $savePath = ""; - - /** - * The file's extension - */ - private $fileExtension = "serialized"; - - /** - * The last read file's name - */ - private $lastFile = ""; - - /** - * The last read file's content including header information - */ - private $lastContents = array(); - - /** - * The private constructor. Do never instance from outside! - * You need to set a local file path. The class will then validate it. - * - * @return void - */ - protected function __construct() { - // Call parent constructor - parent::__construct(__CLASS__); - - // Set description - $this->setObjectDescription("Class for local file databases"); - - // Create unique ID - $this->createUniqueID(); - - // Clean up a little - $this->removeSystemArray(); - } - - /** - * Create an object of LocalFileDatabase and set the save path for local files. - * This method also validates the given file path. - * - * @param $savePath The local file path string - * @param $ioInstance The input/output handler. This - * should be FileIoHandler - * @return $dbInstance An instance of LocalFileDatabase - * @throws SavePathIsEmptyException If the given save path is an - * empty string - * @throws SavePathIsNoDirectoryException If the save path is no - * path (e.g. a file) - * @throws SavePathReadProtectedException If the save path is read- - * protected - * @throws SavePathWriteProtectedException If the save path is write- - * protected - */ - public final static function createLocalFileDatabase ($savePath, FileIoHandler $ioInstance) { - // Get an instance - $dbInstance = new LocalFileDatabase(); - - if (empty($savePath)) { - // Empty string - throw new SavePathIsEmptyException($dbInstance, self::EXCEPTION_UNEXPECTED_EMPTY_STRING); - } elseif (!is_dir($savePath)) { - // Is not a dir - throw new SavePathIsNoDirectoryException($savePath, self::EXCEPTION_INVALID_PATH_NAME); - } elseif (!is_readable($savePath)) { - // Path not readable - throw new SavePathReadProtectedException($savePath, self::EXCEPTION_READ_PROTECED_PATH); - } elseif (!is_writeable($savePath)) { - // Path not writeable - throw new SavePathWriteProtectedException($savePath, self::EXCEPTION_WRITE_PROTECED_PATH); - } - - // Set save path and IO instance - $dbInstance->setSavePath($savePath); - $dbInstance->setFileIoInstance($ioInstance); - - // Return database instance - return $dbInstance; - } - - /** - * Setter for save path - * - * @param $savePath The local save path where we shall put our serialized classes - * @return void - */ - public final function setSavePath ($savePath) { - // Secure string - $savePath = (string) $savePath; - - // Set save path - $this->savePath = $savePath; - } - - /** - * Getter for save path - * - * @return $savePath The local save path where we shall put our serialized classes - */ - public final function getSavePath () { - return $this->savePath; - } - - /** - * Saves a given object to the local file system by serializing and - * transparently compressing it - * - * @param $object The object we shall save to the local file system - * @return void - * @throws NullPointerException If the object instance is null - * @throws NoObjectException If the parameter $object is not - * an object - */ - public final function saveObject ($object) { - // Some tests on the parameter... - if (is_null($object)) { - // Is null, throw exception - throw new NullPointerException($object, self::EXCEPTION_IS_NULL_POINTER); - } elseif (!is_object($object)) { - // Is not an object, throw exception - throw new NoObjectException($object, self::EXCEPTION_IS_NO_OBJECT); - } elseif (!method_exists($object, '__toString')) { - // A highly required method was not found... :-( - throw new MissingMethodException(array($object, '__toString'), self::EXCEPTION_MISSING_METHOD); - } - - // Get a string containing the serialized object. We cannot exchange - // $this and $object here because $object does not need to worry - // about it's limitations... ;-) - $serialized = $this->serializeObject($object); - - // Get a path name plus file name and append the extension - $fqfn = $this->getSavePath() . $object->getPathFileNameFromObject() . "." . $this->getFileExtension(); - - // Save the file to disc we don't care here if the path is there, - // this must be done in later methods. - $this->getFileIoInstance()->saveFile($fqfn, array($this->getCompressorChannel()->getCompressorExtension(), $serialized)); - } - - /** - * Get a serialized string from the given object - * - * @param $object The object we want to serialize and transparently - * compress - * @return $serialized A string containing the serialzed/compressed object - * @see ObjectLimits An object holding limition information - * @see SerializationContainer A special container class for e.g. - * attributes from limited objects - */ - private function serializeObject ($object) { - // If there is no limiter instance we serialize the whole object - // otherwise only in the limiter object (ObjectLimits) specified - // attributes summarized in a special container class - if ($this->getLimitInstance() === null) { - // Serialize the whole object. This tribble call is the reason - // why we need a fall-back implementation in CompressorChannel - // of the methods compressStream() and decompressStream(). - $serialized = $this->getCompressorChannel()->getCompressor()->compressStream(serialize($object)); - } else { - // Serialize only given attributes in a special container - $container = SerializationContainer::createSerializationContainer($this->getLimitInstance(), $object); - - // Serialize the container - $serialized = $this->getCompressorChannel()->getCompressor()->compressStream(serialize($container)); - } - - // Return the serialized object string - return $serialized; - } - - /** - * Analyses if a unique ID has already been used or not by search in the - * local database folder. - * - * @param $uniqueID A unique ID number which shall be checked - * before it will be used - * @param $inConstructor If we got called in a de/con-structor or - * from somewhere else - * @return $isUnused true = The unique ID was not found in the database, - * false = It is already in use by an other object - * @throws NoArrayCreatedException If explode() fails to create an array - * @throws InvalidArrayCountException If the array contains less or - * more than two elements - */ - public function isUniqueIdUsed ($uniqueID, $inConstructor = false) { - // Currently not used... ;-) - $isUsed = false; - - // Split the unique ID up in path and file name - $pathFile = explode("@", $uniqueID); - - // Are there two elements? Index 0 is the path, 1 the file name + global extension - if (!is_array($pathFile)) { - // No array found - if ($inConstructor) { - return false; - } else { - throw new NoArrayCreatedException(array($this, "pathFile"), self::EXCEPTION_ARRAY_EXPECTED); - } - } elseif (count($pathFile) != 2) { - // Invalid ID returned! - if ($inConstructor) { - return false; - } else { - throw new InvalidArrayCountException(array($this, "pathFile", count($pathFile), 2), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT); - } - } - - // Create full path name - $pathName = $this->getSavePath() . $pathFile[0]; - - // Check if the file is there with a file handler - if ($inConstructor) { - // No exceptions in constructors and destructors! - $dirInstance = FrameworkDirectoryPointer::createFrameworkDirectoryPointer($pathName, true); - - // Has an object being created? - if (!is_object($dirInstance)) return false; - } else { - // Outside a constructor - try { - $dirInstance = FrameworkDirectoryPointer::createFrameworkDirectoryPointer($pathName); - } catch (PathIsNoDirectoryException $e) { - // Okay, path not found - return false; - } - } - - // Initialize the search loop - $isValid = false; - while ($dataFile = $dirInstance->readDirectoryExcept(array(".", ".."))) { - // Generate FQFN for testing - $fqfn = sprintf("%s/%s", $pathName, $dataFile); - $this->setLastFile($fqfn); - - // Get instance for file handler - $inputHandler = $this->getFileIoInstance(); - - // Try to read from it. This makes it sure that the file is - // readable and a valid database file - $this->setLastFileContents($inputHandler->loadFileContents($fqfn)); - - // Extract filename (= unique ID) from it - $ID = substr(basename($fqfn), 0, -(strlen($this->getFileExtension()) + 1)); - - // Is this the required unique ID? - if ($ID == $pathFile[1]) { - // Okay, already in use! - $isUsed = true; - } - } - - // Close the directory handler - $dirInstance->closeDirectory(); - - // Now the same for the file... - return $isUsed; - } - - /** - * Setter for the last read file - * - * @param $fqfn The FQFN of the last read file - * @return void - */ - private final function setLastFile ($fqfn) { - // Cast string - $fqfn = (string) $fqfn; - $this->lastFile = $fqfn; - } - - /** - * Getter for last read file - * - * @return $lastFile The last read file's name with full path - */ - public final function getLastFile () { - return $this->lastFile; - } - - /** - * Setter for contents of the last read file - * - * @param $contents An array with header and data elements - * @return void - */ - private final function setLastFileContents ($contents) { - // Cast array - $contents = (array) $contents; - $this->lastContents = $contents; - } - - /** - * Getter for last read file's content as an array - * - * @return $lastContent The array with elements 'header' and 'data'. - */ - public final function getLastContents () { - return $this->lastContents; - } - - /** - * Getter for file extension - * - * @return $fileExtension The array with elements 'header' and 'data'. - */ - public final function getFileExtension () { - return $this->fileExtension; - } - - /** - * Get cached (last fetched) data from the local file database - * - * @param $uniqueID The ID number for looking up the data - * @return $object The restored object from the maybe compressed - * serialized data - * @throws MismatchingCompressorsException If the compressor from - * the loaded file - * mismatches with the - * current used one. - * @throws NullPointerException If the restored object - * is null - * @throws NoObjectException If the restored "object" - * is not an object instance - * @throws MissingMethodException If the required method - * toString() is missing - */ - public final function getObjectFromCachedData ($uniqueID) { - // Get instance for file handler - $inputHandler = $this->getFileIoInstance(); - - // Get last file's name and contents - $fqfn = $this->repairFQFN($this->getLastFile(), $uniqueID); - $contents = $this->repairContents($this->getLastContents(), $fqfn); - - // Let's decompress it. First we need the instance - $compressInstance = $this->getCompressorChannel(); - - // Is the compressor's extension the same as the one from the data? - if ($compressInstance->getCompressorExtension() != $contents['header'][0]) { - /** - * @todo For now we abort here but later we need to make this a little more dynamic. - */ - throw new MismatchingCompressorsException(array($this, $contents['header'][0], $fqfn, $compressInstance->getCompressorExtension()), self::EXCEPTION_MISMATCHING_COMPRESSORS); - } - - // Decompress the data now - $serialized = $compressInstance->getCompressor()->decompressStream($contents['data']); - - // And unserialize it... - $object = unserialize($serialized); - - // This must become a valid object, so let's check it... - if (is_null($object)) { - // Is null, throw exception - throw new NullPointerException($object, self::EXCEPTION_IS_NULL_POINTER); - } elseif (!is_object($object)) { - // Is not an object, throw exception - throw new NoObjectException($object, self::EXCEPTION_IS_NO_OBJECT); - } elseif (!method_exists($object, '__toString')) { - // A highly required method was not found... :-( - throw new MissingMethodException(array($object, '__toString'), self::EXCEPTION_MISSING_METHOD); - } - - // And return the object - return $object; - } - - /** - * Private method for re-gathering (repairing) the FQFN - * - * @param $fqfn The current FQFN we shall validate - * @param $uniqueID The unique ID number - * @return $fqfn The repaired FQFN when it is empty - * @throws NoArrayCreatedException If explode() has not - * created an array - * @throws InvalidArrayCountException If the array count is not - * as the expected - */ - private function repairFQFN ($fqfn, $uniqueID) { - // Cast both strings - $fqfn = (string) $fqfn; - $uniqueID = (string) $uniqueID; - - // Is there pre-cached data available? - if (empty($fqfn)) { - // Split the unique ID up in path and file name - $pathFile = explode("@", $uniqueID); - - // Are there two elements? Index 0 is the path, 1 the file name + global extension - if (!is_array($pathFile)) { - // No array found - throw new NoArrayCreatedException(array($this, "pathFile"), self::EXCEPTION_ARRAY_EXPECTED); - } elseif (count($pathFile) != 2) { - // Invalid ID returned! - throw new InvalidArrayCountException(array($this, "pathFile", count($pathFile), 2), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT); - } - - // Create full path name - $pathName = $this->getSavePath() . $pathFile[0]; - - // Nothing cached, so let's create a FQFN first - $fqfn = sprintf("%s/%s.%s", $pathName, $pathFile[1], $this->getFileExtension()); - $this->setLastFile($fqfn); - } - - // Return repaired FQFN - return $fqfn; - } - - /** - * Private method for re-gathering the contents of a given file - * - * @param $contents The (maybe) already cached contents as an array - * @param $fqfn The current FQFN we shall validate - * @return $contents The repaired contents from the given file - */ - private function repairContents ($contents, $fqfn) { - // Is there some content and header (2 indexes) in? - if ((!is_array($contents)) || (count($contents) != 2) || (!isset($contents['header'])) || (!isset($contents['data']))) { - // No content found so load the file again - $contents = $inputHandler->loadFileContents($fqfn); - - // And remember all data for later usage - $this->setLastContents($contents); - } - - // Return the repaired contents - return $contents; - } - - /* DUMMY */ public final function loadObject () {} -} - -// [EOF] -?> diff --git a/tests/ConfigTest.php b/tests/ConfigTest.php index 84b245d496..1091a5b8a9 100644 --- a/tests/ConfigTest.php +++ b/tests/ConfigTest.php @@ -1,28 +1,51 @@ setConfigEntry("default_application", "ship-simu"); +FrameworkConfiguration::getInstance()->setConfigEntry('default_application', 'ship-simu'); // Set testing mode (no starter.php will be loaded!) define('TEST_MODE', true); // Load the PHPUnit framework -require_once("PHPUnit/Framework.php"); +require_once('PHPUnit/Framework.php'); + +print (basename(__FILE__).": Init completed.\n\n"); /** * A test case for the configuration sub system * + * @author Roland Haeder + * @version 0.0.0 + * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.org + * @see http://www.phpunit.de + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ class ConfigTest extends PHPUnit_Framework_TestCase { /** @@ -39,7 +62,7 @@ class ConfigTest extends PHPUnit_Framework_TestCase { $cfg = FrameworkConfiguration::getInstance(); // Now find a configuration variable that does not exist - $dummy = $cfg->readConfig("does_not_exist"); + $dummy = $cfg->readConfig('does_not_exist'); } catch (ConfigEntryNotFoundException $expected) { // This exception was expected, so it is fine $testPassed = true; @@ -97,7 +120,7 @@ class ConfigTest extends PHPUnit_Framework_TestCase { $cfg = FrameworkConfiguration::getInstance(); // Try to read an empty configuration variable - $cfg->setConfigEntry("", "will_never_be_set"); + $cfg->setConfigEntry("", 'will_never_be_set'); } catch (ConfigEntryIsEmptyException $expected) { // This exception was expected, so it is fine $testPassed = true; @@ -125,10 +148,10 @@ class ConfigTest extends PHPUnit_Framework_TestCase { $cfg = FrameworkConfiguration::getInstance(); // Try to read an empty configuration variable - $cfg->setConfigEntry("test_key", "{$value}"); + $cfg->setConfigEntry('test_key', "{$value}"); // Read the config entry we have just written - $readValue = $cfg->readConfig("test_key"); + $readValue = $cfg->readConfig('test_key'); // Now test the values $this->assertEquals($value, $readValue); diff --git a/tests/RegistryTest.php b/tests/RegistryTest.php new file mode 100644 index 0000000000..4efbbb0168 --- /dev/null +++ b/tests/RegistryTest.php @@ -0,0 +1,94 @@ +setConfigEntry('default_application', 'ship-simu'); + +// Set testing mode (no starter.php will be loaded!) +define('TEST_MODE', true); + +// Load the PHPUnit framework +require_once('PHPUnit/Framework.php'); + +print (basename(__FILE__).": Init completed.\n\n"); + +/** + * A test case for the registry + * + * @author Roland Haeder + * @version 0.0.0 + * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.org + * @see http://www.phpunit.de + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +class RegistryTest extends PHPUnit_Framework_TestCase { + /** + * Tests if we can store an instance to the registry + * + * @return void + */ + public function testInstanceRegistryAdd () { + // Get a registry instance + $registryInstance = Registry::getRegistry(); + + // Create a User instance + $userInstance = User::createUserByEmail("webmaster@mxchange.org"); + + // Now store the instance in the registry + $registryInstance->addInstance('user', $userInstance); + + // Test if the registry key is there + if (!$registryInstance->instanceExists('user')) { + $this->fail("Registry test failed: Cannot locate our user instance in registry!"); + } + } + + /** + * Tests if we can store an instance to the registry + * + * @return void + */ + public function testInstanceRegistryCompare () { + // Get a registry instance + $registryInstance = Registry::getRegistry(); + + // And get it back + $userInstance = $registryInstance->getInstance('user'); + + // Compare both unique keys + $testPassed = ($userInstance instanceof ManageableUser); + + // Test passed? + if (!$testPassed) { + $this->fail("Registry test failed: Method getInstance() returned a non-object."); + } + } +} + +?> diff --git a/tests/RequestTest.php b/tests/RequestTest.php new file mode 100644 index 0000000000..75107b4398 --- /dev/null +++ b/tests/RequestTest.php @@ -0,0 +1,102 @@ +setConfigEntry('default_application', 'ship-simu'); + +// Set testing mode (no starter.php will be loaded!) +define('TEST_MODE', true); + +// Load the PHPUnit framework +require_once('PHPUnit/Framework.php'); + +print (basename(__FILE__).": Init completed.\n\n"); + +/** + * A test case for faked HTTP requests. This is faked because we *set* + * $_REQUEST here. This should be made better in PHP6... :( + * + * @author Roland Haeder + * @version 0.0.0 + * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.org + * @see http://www.phpunit.de + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +class RequestTest extends PHPUnit_Framework_TestCase { + /** + * A non-exist request element is being asked for. null is the expected + * result from the class + * + * @return void + */ + public function testMissingRequestElement () { + // Get a request instance + $requestInstance = HttpRequest::createHttpRequest(); + + // Get the element + $nonExist = $requestInstance->getRequestElement('never_there'); + + // Is this null? + if (!is_null($nonExist)) { + // Is not null! + $this->fail(sprintf("[%s:] Unexpected type %s received from request handler.", + $requestInstance->__toString(), + gettype($nonExists) + )); + } + } + + /** + * Now fake a request array and try the test on it again + * + * @return void + */ + public function testFakeRequestElement () { + // Fake the request here + $_REQUEST = array('test_key' => "test_value"); + + // Again get an instance + $requestInstance = HttpRequest::createHttpRequest(); + + // Get the element + $testValue = $requestInstance->getRequestElement('test_key'); + + // Is it the same? + if ($testValue !== "test_value") { + // Something went wrong + $this->fail(sprintf("[%s] Unexpected value %s (%s) from test key received.", + $requestInstance->__toString(), + $testValue, + gettype($testValue) + )); + } + } +} + +?> diff --git a/tests/Test.php b/tests/Test.php new file mode 100644 index 0000000000..284f9b22a1 --- /dev/null +++ b/tests/Test.php @@ -0,0 +1,54 @@ +setConfigEntry('default_application', 'ship-simu'); + +// Set testing mode (no starter.php will be loaded!) +define('TEST_MODE', true); + +// Load the PHPUnit framework +require_once('PHPUnit/Framework.php'); + +print (basename(__FILE__).": Init completed.\n\n"); +die("You need to remove this line (".__LINE__.") and implement this test!\n"); + +/** + * A test case for + * + * @author Roland Haeder + * @version 0.0.0 + * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.org + * @see http://www.phpunit.de + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +class Test extends PHPUnit_Framework_TestCase { +} + +?> diff --git a/tests/all-tests.sh b/tests/all-tests.sh new file mode 100644 index 0000000000..13c704a648 --- /dev/null +++ b/tests/all-tests.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +find -type f -name "*Test.php" -not -name "Test.php" -exec sh ./unittest.sh {} \; diff --git a/tests/unittest.sh b/tests/unittest.sh new file mode 100644 index 0000000000..18e210c5a9 --- /dev/null +++ b/tests/unittest.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +FILE=`echo $1 | cut -d "/" -f 2` + +phpunit --wait $FILE -- 2.39.5