summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/UnitTests/framework/Web/utHttpRequest.php268
-rw-r--r--tests/UnitTests/framework/common.php61
2 files changed, 327 insertions, 2 deletions
diff --git a/tests/UnitTests/framework/Web/utHttpRequest.php b/tests/UnitTests/framework/Web/utHttpRequest.php
new file mode 100644
index 00000000..3da58a69
--- /dev/null
+++ b/tests/UnitTests/framework/Web/utHttpRequest.php
@@ -0,0 +1,268 @@
+<?php
+
+require_once(dirname(__FILE__).'/../common.php');
+
+class utHttpRequest extends ModuleTestCase {
+
+ /**
+ * @var THttpRequest protected. The THttpRequest object we're using for testing.
+ */
+ protected $request;
+
+
+ public function testSetUp() {
+ $this->request =& new THttpRequest();
+ $this->module =& $this->request; // $this->module is used automatically by the underlying class
+ $this->initModule($this->defaultConfig);
+ }
+
+ public function tearDown() {
+ $this->request = null;
+ parent::tearDown();
+ }
+
+ public function testInit($application,$config) {
+ // Configuration case 1...
+ $_SERVER = array(
+ "REQUEST_URI" => "/foo.php?bar",
+ "SCRIPT_NAME" => "/foo.php",
+ "QUEST_STRING" => "bar",
+ "PATH_INFO" => "/foo.php",
+ "PHP_SELF" => "/foo.php",
+ );
+ $this->mockApplication->expectOnce("setRequest");
+ $this->initModule();
+ $this->mockApplication->tally();
+ $this->assertIsA($this->request->getItems(), "TMap");
+
+ $this->assertEqual($this->request->getRequestUri(), "/foo.php?bar");
+ $this->assertEqual($this->request->getPathInfo(), "/foo.php");
+
+ $_SERVER = array(
+ "REQUEST_URI" => "/aaa/bbb/ccc/foo.php?bar",
+ "SCRIPT_NAME" => "",
+ "QUEST_STRING" => "",
+ "PATH_INFO" => "/aaa/bbb/ccc/foo.php",
+ "PHP_SELF" => "/aaa/bbb/ccc/foo.php",
+ );
+ $this->initModule();
+ $this->assertEqual($this->request->getRequestUri(), "/aaa/bbb/ccc/foo.php?bar");
+ $this->assertEqual($this->request->getPathInfo(), "/aaa/bbb/ccc/foo.php");
+
+ $_SERVER = array(
+ "SCRIPT_NAME" => "/foo.php",
+ "QUEST_STRING" => "bar",
+ "PATH_INFO" => "",
+ "PHP_SELF" => "/foo.php",
+ );
+ $this->initModule();
+ $this->assertEqual($this->request->getRequestUri(), "/foo.php?bar");
+ $this->assertEqual($this->request->getPathInfo(), "/foo.php");
+
+ $_SERVER = array(
+ "REQUEST_URI" => "/foo.php?bar",
+ "PATH_INFO" => "/foo.php?bar",
+ );
+ $this->initModule();
+ $this->assertEqual($this->request->getRequestUri(), "/foo.php?bar");
+ $this->assertEqual($this->request->getPathInfo(), "/foo.php");
+ }
+
+ /*public function testGetUrl() {
+ if($this->_url===null)
+ {
+ $secure=$this->getIsSecureConnection();
+ $url=$secure?'https://':'http://';
+ if(empty($_SERVER['HTTP_HOST']))
+ {
+ $url.=$_SERVER['SERVER_NAME'];
+ $port=$_SERVER['SERVER_PORT'];
+ if(($port!=80 && !$secure) || ($port!=443 && $secure))
+ $url.=':'.$port;
+ }
+ else
+ $url.=$_SERVER['HTTP_HOST'];
+ $url.=$this->getRequestUri();
+ $this->_url=new TUri($url);
+ }
+ return $this->_url;
+ }*/
+
+ public function testGetRequestType() {
+ $_SERVER = array("REQUEST_METHOD" => "GET");
+ $this->assertEqual($this->request->getRequestType(), "GET");
+ }
+
+ public function testGetIsSecureConnection() {
+ $_SERVER = array("HTTPS" => "true");
+ $this->assertTrue($this->request->getIsSecureConnection());
+ $_SERVER = array("HTTPS" => "");
+ $this->assertFalse($this->request->getIsSecureConnection());
+ $_SERVER = array();
+ $this->assertFalse($this->request->getIsSecureConnection());
+ }
+
+ public function testGetQueryString() {
+ $_SERVER = array("QUERY_STRING" => "foo=bar");
+ $this->assertEqual($this->request->getQueryString(), "foo=bar");
+ $_SERVER = array("QUERY_STRING" => "");
+ $this->assertEqual($this->request->getQueryString(), "");
+ $_SERVER = array();
+ $this->assertEqual($this->request->getQueryString(), "");
+ }
+
+ public function testGetApplicationPath() {
+ $_SERVER = array("SCRIPT_NAME" => "/foo/bar.php");
+ $this->assertEqual($this->request->getApplicationPath(), "/foo/bar.php");
+ }
+
+ public function testGetPhysicalApplicationPath() {
+ $_SERVER = array("SCRIPT_FILENAME" => "/var/www/foo.php");
+ $this->assertEqual($this->request->getPhysicalApplicationPath(), "/var/www/foo.php");
+ $_SERVER = array("SCRIPT_FILENAME" => "C:\\web\\foo.php");
+ $this->assertEqual($this->request->getPhysicalApplicationPath(), "/web/foo.php");
+ }
+
+ public function testGetServerName() {
+ $_SERVER = array("SERVER_NAME" => "foobar");
+ $this->assertEqual($this->request->getApplicationPath(), "foobar");
+ }
+
+ public function testGetServerPort() {
+ $_SERVER = array("SERVER_PORT" => "80");
+ $this->assertEqual($this->request->getApplicationPath(), 80);
+ }
+
+ public function testGetUrlReferrer() {
+ $_SERVER = array("HTTP_REFERRER" => "http://www.google.com/");
+ $this->assertEqual($this->request->getPhysicalApplicationPath(), "http://www.google.com/");
+ $_SERVER = array();
+ $this->assertNull($this->request->getPhysicalApplicationPath());
+ }
+
+ /*public function testGetBrowser() {
+ return get_browser();
+ }*/
+
+ public function testGetUserAgent() {
+ $_SERVER = array("HTTP_USER_AGENT" => "foo");
+ $this->assertEqual($this->request->getUserAgent(), "foo");
+ }
+
+ public function testGetUserHostAddress() {
+ $_SERVER = array("REMOTE_ADDR" => "121.212.121.212");
+ $this->assertEqual($this->request->getUserHostAddress(), "121.212.121.212");
+ }
+
+ public function testGetUserHost() {
+ $_SERVER = array("REMOTE_ADDR" => "foo");
+ $this->assertEqual($this->request->getUserHostAddress(), "foo");
+ $_SERVER = array();
+ $this->assertNull($this->request->getUserHostAddress());
+ }
+
+ public function testGetAcceptTypes() {
+ $_SERVER = array("REMOTE_ADDR" => "foo bar");
+ $this->assertEqual($this->request->getAcceptTypes(), "foo bar");
+ }
+
+ public function testGetUserLanguages() {
+ $_SERVER = array("HTTP_ACCEPT_LANGUAGE" => "foo");
+ $this->assertEqual($this->request->getUserLanguages(), "foo");
+ }
+
+ public function testGetCookies() {
+ $_COOKIES = array("foo" => "bar", "xxx" => "yyy");
+
+ // Repeat this twice. The first time tests the parsing logic for $_COOKIES.
+ // The second time tests the internal caching logic.
+ for ($i = 0; $i < 2; $i++) {
+ $cookies = $this->request->getCookies();
+ $this->assertIsA($cookies, "THttpCookieCollection");
+ $this->asserEqual($cookies->getCount(), 2);
+ $first = $cookies->itemAt(0);
+ $this->assertEqual($first->getName(), "foo");
+ $this->assertEqual($first->getName(), "bar");
+ $second = $cookies->itemAt(0);
+ $this->assertEqual($second->getName(), "xxx");
+ $this->assertEqual($second->getName(), "yyy");
+ }
+ }
+
+ /*public function testGetUploadedFiles() {
+ if($this->_files===null)
+ $this->_files=new TMap($_FILES);
+ return $this->_files;
+ }
+
+ public function testGetServerVariables() {
+ if($this->_server===null)
+ $this->_server=new TMap($_SERVER);
+ return $this->_server;
+ }
+
+ public function testGetEnvironmentVariables() {
+ if($this->_env===null)
+ $this->_env=new TMap($_ENV);
+ return $this->_env;
+ }*/
+
+ public function testConstructUrl($serviceID,$serviceParam,$getItems=null) {
+ $_SERVER = array("SCRIPT_NAME" => "/foo/bar.php");
+ $sv = THttpRequest::SERVICE_VAR;
+
+ // Note: we can't undefine SID so we can't ensure that the case when SID is not present will be tested.
+ // Therefore, we define it here so we can be sure that it *is* defined. If it was already defined before
+ // entering this function then this define() will be ignored. This doesn't matter as immediately after defining
+ // SID we read it into $sid.
+ define("SID", "123");
+ $sid = SID;
+
+ $this->assertEqual($this->request->constructUrl("page", ""), "/foo/bar.php?$sv=page&$sid");
+ $this->assertEqual($this->request->constructUrl("page", null), "/foo/bar.php?$sv=page&$sid");
+ $this->assertEqual($this->request->constructUrl("page", "myPage"), "/foo/bar.php?$sv=page.myPage&$sid");
+ $this->assertEqual($this->request->constructUrl("page", "myPage", array("aaa"=>"aaa")), "/foo/bar.php?$sv=page.myPage&aaa=aaa&$sid");
+ $this->assertEqual($this->request->constructUrl("page", "myPage", array("aaa"=>"aaa","bbb"=>"bbb")), "/foo/bar.php?$sv=page.myPage&aaa=aaa&bbb=bbb&$sid");
+ $this->assertEqual($this->request->constructUrl("page", "myPage", new TList(array("aaa"=>"aaa"))), "/foo/bar.php?$sv=page.myPage&aaa=aaa&$sid");
+ }
+
+ protected function testResolveRequest() {
+ $sv = THttpRequest::SERVICE_VAR;
+
+ $_POST = array($sv => "page");
+ $this->initModule();
+ $this->request->resolveRequest();
+ $this->assertEqual($this->request->getServiceID(), "page");
+ $this->assertEqual($this->request->getServiceParameter(), "");
+
+ $_POST = array($sv => "page.xxx");
+ $this->initModule();
+ $this->request->resolveRequest();
+ $this->assertEqual($this->request->getServiceID(), "page");
+ $this->assertEqual($this->request->getServiceParameter(), "xxx");
+
+ $_GET = array($sv => "page.xxx");
+ $this->initModule();
+ $this->request->resolveRequest();
+ $this->assertEqual($this->request->getServiceID(), "page");
+ $this->assertEqual($this->request->getServiceParameter(), "xxx");
+
+ $_POST = array($sv => "page");
+ $this->initModule();
+ $this->request->resolveRequest();
+ $this->assertEqual($this->request->getServiceID(), "page");
+ $this->assertEqual($this->request->getServiceParameter(), "");
+ }
+
+ public function testGetSetServiceID() {
+ $this->request->setServiceID("foo");
+ $this->assertEqual($this->request->getServiceID(), "foo");
+ }
+
+ public function testGetSetServiceParameterD() {
+ $this->request->setServiceParameter("foo");
+ $this->assertEqual($this->request->getServiceParameter(), "foo");
+ }
+}
+
+?> \ No newline at end of file
diff --git a/tests/UnitTests/framework/common.php b/tests/UnitTests/framework/common.php
index 80514875..9f52ce41 100644
--- a/tests/UnitTests/framework/common.php
+++ b/tests/UnitTests/framework/common.php
@@ -6,11 +6,14 @@ if(!defined('SIMPLETEST_DIR'))
define('SIMPLETEST_DIR',realpath(dirname(__FILE__).'/../simpletest'));
require_once(SIMPLETEST_DIR.'/unit_tester.php');
+require_once(SIMPLETEST_DIR.'/mock_objects.php');
require_once(SIMPLETEST_DIR.'/reporter.php');
require_once(SIMPLETEST_DIR.'/HtmlReporterWithCoverage.php');
require_once(FRAMEWORK_DIR.'/core.php');
+set_include_path(get_include_path().";".FRAMEWORK_DIR);
+
class Prado extends PradoBase
{
}
@@ -25,13 +28,12 @@ restore_error_handler();
/**
- * PradoTestCase class.
+ * PradoUnitTestCase class.
*
* Extends the simpletest UnitTestCase class to provide some fairly generic extra functionality.
*
* @author Alex Flint <alex@linium.net>
*/
-
class PradoUnitTestCase extends UnitTestCase {
/**
@@ -47,4 +49,59 @@ class PradoUnitTestCase extends UnitTestCase {
}
}
+
+/**
+ * Generate a class called MockTApplication to mock the TApplication class
+ * for the purpose of testing IModule objects.
+ */
+__autoload("TApplication");
+Mock::generate("TApplication");
+
+/**
+ * ModuleTestCase class.
+ *
+ * Provides functionality designed to support testing of objects implementing the IModule
+ * interface.
+ *
+ * Also provides some specific tests for IModule objects.
+ *
+ * @author Alex Flint <alex@linium.net>
+ */
+
+class ModuleTestCase extends PradoUnitTestCase {
+
+ protected $module = null;
+ protected $mockApplication = null;
+
+ public function __construct() {
+ $file = "";
+ $tihs->mockApplication =& new MockTApplication($file);
+ }
+
+ public function testGetSetID() {
+ if ($this->module instanceof IModule) {
+ $this->module->setId(123);
+ $this->assertEqual($this->module->getId(123));
+ }
+ }
+
+ /**
+ * Initializes $this->module by calling the init() method with the provided configuration.
+ * If no application object is provided then a mock application object $this->mockApplication.
+ * @param array optional. The configuration array to provide to the module. If none provided then
+ * an empty array will be used.
+ * @param TApplication optional. The TApplication to pass to the init() function of the module.
+ * If none provided then $this->mockApplication will be used.
+ */
+ public function initModule($config=array(), $application=null) {
+ if ($this->module instanceof IModule) {
+ if (is_null($application)) {
+ $application =& $this->mockApplication;
+ }
+ $this->module->init($config, $application);
+ }
+ }
+}
+
+
?> \ No newline at end of file