GIF89a;
Direktori : /home/serb/www/api/vendor/slim/slim/tests/ |
Current File : /home/serb/www/api/vendor/slim/slim/tests/EnvironmentTest.php |
<?php /** * Slim - a micro PHP 5 framework * * @author Josh Lockhart <info@slimframework.com> * @copyright 2011 Josh Lockhart * @link http://www.slimframework.com * @license http://www.slimframework.com/license * @version 2.6.1 * * MIT LICENSE * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ class EnvironmentTest extends PHPUnit_Framework_TestCase { /** * Default server settings assume the Slim app is installed * in a subdirectory `foo/` directly beneath the public document * root directory; URL rewrite is disabled; requested app * resource is GET `/bar/xyz` with three query params. * * These only provide a common baseline for the following * tests; tests are free to override these values. */ public function setUp() { $_SERVER['DOCUMENT_ROOT'] = '/var/www'; $_SERVER['SCRIPT_FILENAME'] = '/var/www/foo/index.php'; $_SERVER['SERVER_NAME'] = 'slim'; $_SERVER['SERVER_PORT'] = '80'; $_SERVER['SCRIPT_NAME'] = '/foo/index.php'; $_SERVER['REQUEST_URI'] = '/foo/index.php/bar/xyz'; $_SERVER['PATH_INFO'] = '/bar/xyz'; $_SERVER['REQUEST_METHOD'] = 'GET'; $_SERVER['QUERY_STRING'] = 'one=1&two=2&three=3'; $_SERVER['HTTPS'] = ''; $_SERVER['REMOTE_ADDR'] = '127.0.0.1'; unset($_SERVER['CONTENT_TYPE'], $_SERVER['CONTENT_LENGTH']); } /** * Test mock environment * * This should return the custom values where specified * and the default values otherwise. */ public function testMockEnvironment() { $env = \Slim\Environment::mock(array( 'REQUEST_METHOD' => 'PUT' )); $env2 = \Slim\Environment::getInstance(); $this->assertSame($env, $env2); $this->assertInstanceOf('\Slim\Environment', $env); $this->assertEquals('PUT', $env['REQUEST_METHOD']); $this->assertEquals(80, $env['SERVER_PORT']); $this->assertNull($env['foo']); } /** * Test sets HTTP method */ public function testSetsHttpMethod() { $env = \Slim\Environment::getInstance(true); $this->assertEquals('GET', $env['REQUEST_METHOD']); } /** * Test parses script name and path info * * Pre-conditions: * URL Rewrite is disabled; * App installed in subdirectory; */ public function testParsesPathsWithoutUrlRewriteInSubdirectory() { $env = \Slim\Environment::getInstance(true); $this->assertEquals('/bar/xyz', $env['PATH_INFO']); $this->assertEquals('/foo/index.php', $env['SCRIPT_NAME']); } /** * Test parses script name and path info * * Pre-conditions: * URL Rewrite is disabled; * App installed in root directory; */ public function testParsesPathsWithoutUrlRewriteInRootDirectory() { $_SERVER['SCRIPT_FILENAME'] = '/var/www/index.php'; $_SERVER['REQUEST_URI'] = '/index.php/bar/xyz'; $_SERVER['SCRIPT_NAME'] = '/index.php'; $env = \Slim\Environment::getInstance(true); $this->assertEquals('/bar/xyz', $env['PATH_INFO']); $this->assertEquals('/index.php', $env['SCRIPT_NAME']); } /** * Test parses script name and path info * * Pre-conditions: * URL Rewrite disabled; * App installed in root directory; * Requested resource is "/"; */ public function testParsesPathsWithoutUrlRewriteInRootDirectoryForAppRootUri() { $_SERVER['SCRIPT_FILENAME'] = '/var/www/index.php'; $_SERVER['REQUEST_URI'] = '/index.php'; $_SERVER['SCRIPT_NAME'] = '/index.php'; unset($_SERVER['PATH_INFO']); $env = \Slim\Environment::getInstance(true); $this->assertEquals('/', $env['PATH_INFO']); $this->assertEquals('/index.php', $env['SCRIPT_NAME']); } /** * Test parses script name and path info * * Pre-conditions: * URL Rewrite enabled; * App installed in subdirectory; */ public function testParsesPathsWithUrlRewriteInSubdirectory() { $_SERVER['SCRIPT_NAME'] = '/foo/index.php'; $_SERVER['REQUEST_URI'] = '/foo/bar/xyz'; unset($_SERVER['PATH_INFO']); $env = \Slim\Environment::getInstance(true); $this->assertEquals('/bar/xyz', $env['PATH_INFO']); $this->assertEquals('/foo', $env['SCRIPT_NAME']); } /** * Test parses script name and path info * * Pre-conditions: * URL Rewrite enabled; * App installed in root directory; */ public function testParsesPathsWithUrlRewriteInRootDirectory() { $_SERVER['SCRIPT_FILENAME'] = '/var/www/index.php'; $_SERVER['SCRIPT_NAME'] = '/index.php'; $_SERVER['REQUEST_URI'] = '/bar/xyz'; unset($_SERVER['PATH_INFO']); $env = \Slim\Environment::getInstance(true); $this->assertEquals('/bar/xyz', $env['PATH_INFO']); $this->assertEquals('', $env['SCRIPT_NAME']); } /** * Test parses script name and path info * * Pre-conditions: * URL Rewrite enabled; * App installed in root directory; * Requested resource is "/" */ public function testParsesPathsWithUrlRewriteInRootDirectoryForAppRootUri() { $_SERVER['SCRIPT_FILENAME'] = '/var/www/index.php'; $_SERVER['REQUEST_URI'] = '/'; $_SERVER['SCRIPT_NAME'] = '/index.php'; unset($_SERVER['PATH_INFO']); $env = \Slim\Environment::getInstance(true); $this->assertEquals('/', $env['PATH_INFO']); $this->assertEquals('', $env['SCRIPT_NAME']); } /** * Test parses query string * * Pre-conditions: * $_SERVER['QUERY_STRING'] exists and is not empty; */ public function testParsesQueryString() { $env = \Slim\Environment::getInstance(true); $this->assertEquals('one=1&two=2&three=3', $env['QUERY_STRING']); } /** * Test removes query string from PATH_INFO when using URL Rewrite * * Pre-conditions: * $_SERVER['QUERY_STRING'] exists and is not empty; * URL Rewrite enabled; */ public function testRemovesQueryStringFromPathInfo() { $_SERVER['SCRIPT_NAME'] = '/foo/index.php'; $_SERVER['REQUEST_URI'] = '/foo/bar/xyz?one=1&two=2&three=3'; unset($_SERVER['PATH_INFO']); $env = \Slim\Environment::getInstance(true); $this->assertEquals('/bar/xyz', $env['PATH_INFO']); } /** * Test environment's PATH_INFO retains URL encoded characters (e.g. #) * * In earlier version, \Slim\Environment would use PATH_INFO instead * of REQUEST_URI to determine the root URI and resource URI. * Unfortunately, the server would URL decode the PATH_INFO string * before it was handed to PHP. This prevented certain URL-encoded * characters like the octothorpe from being delivered correctly to * the Slim application environment. This test ensures the * REQUEST_URI is used instead and parsed as expected. */ public function testPathInfoRetainsUrlEncodedCharacters() { $_SERVER['SCRIPT_FILENAME'] = '/var/www/index.php'; $_SERVER['SCRIPT_NAME'] = '/index.php'; $_SERVER['REQUEST_URI'] = '/foo/%23bar'; //<-- URL-encoded "#bar" $env = \Slim\Environment::getInstance(true); $this->assertEquals('/foo/%23bar', $env['PATH_INFO']); } /** * Test parses query string * * Pre-conditions: * $_SERVER['QUERY_STRING'] does not exist; */ public function testParsesQueryStringThatDoesNotExist() { unset($_SERVER['QUERY_STRING']); $env = \Slim\Environment::getInstance(true); $this->assertEquals('', $env['QUERY_STRING']); } /** * Test SERVER_NAME is not empty */ public function testServerNameIsNotEmpty() { $env = \Slim\Environment::getInstance(true); $this->assertFalse(empty($env['SERVER_NAME'])); } /** * Test SERVER_PORT is not empty */ public function testServerPortIsNotEmpty() { $env = \Slim\Environment::getInstance(true); $this->assertFalse(empty($env['SERVER_PORT'])); } /** * Test unsets HTTP_CONTENT_TYPE and HTTP_CONTENT_LENGTH * * Pre-conditions: * HTTP_CONTENT_TYPE is sent with HTTP request; * HTTP_CONTENT_LENGTH is sent with HTTP request; */ public function testUnsetsContentTypeAndContentLength() { $_SERVER['HTTP_CONTENT_LENGTH'] = 150; $env = \Slim\Environment::getInstance(true); $this->assertFalse(isset($env['HTTP_CONTENT_LENGTH'])); } /** * Test sets special request headers if not empty * * Pre-conditions: * CONTENT_TYPE, CONTENT_LENGTH, X_REQUESTED_WITH are sent in client HTTP request; * CONTENT_TYPE, CONTENT_LENGTH, X_REQUESTED_WITH are not empty; */ public function testSetsSpecialHeaders() { $_SERVER['CONTENT_TYPE'] = 'text/csv'; $_SERVER['CONTENT_LENGTH'] = '100'; $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XmlHttpRequest'; $env = \Slim\Environment::getInstance(true); $this->assertEquals('text/csv', $env['CONTENT_TYPE']); $this->assertEquals('100', $env['CONTENT_LENGTH']); $this->assertEquals('XmlHttpRequest', $env['HTTP_X_REQUESTED_WITH']); } /** * Tests X-HTTP-Method-Override is allowed through unmolested. * * Pre-conditions: * X_HTTP_METHOD_OVERRIDE is sent in client HTTP request; * X_HTTP_METHOD_OVERRIDE is not empty; */ public function testSetsHttpMethodOverrideHeader() { $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] = 'DELETE'; $env = \Slim\Environment::getInstance(true); $this->assertEquals('DELETE', $env['HTTP_X_HTTP_METHOD_OVERRIDE']); } /** * Test detects HTTPS * * Pre-conditions: * $_SERVER['HTTPS'] is set to a non-empty value; */ public function testHttps() { $_SERVER['HTTPS'] = 1; $env = \Slim\Environment::getInstance(true); $this->assertEquals('https', $env['slim.url_scheme']); } /** * Test detects not HTTPS * * Pre-conditions: * $_SERVER['HTTPS'] is set to an empty value; */ public function testNotHttps() { $_SERVER['HTTPS'] = ''; $env = \Slim\Environment::getInstance(true); $this->assertEquals('http', $env['slim.url_scheme']); } /** * Test detects not HTTPS on IIS * * Pre-conditions: * $_SERVER['HTTPS'] is set to "off"; */ public function testNotHttpsIIS() { $_SERVER['HTTPS'] = 'off'; $env = \Slim\Environment::getInstance(true); $this->assertEquals('http', $env['slim.url_scheme']); } /** * Test input is an empty string (and not false) * * Pre-conditions: * Input at php://input may only be read once; subsequent attempts * will return `false`; in which case, use an empty string. */ public function testInputIsEmptyString() { $env = \Slim\Environment::getInstance(true); $this->assertEquals('', $env['slim.input']); } /** * Test valid resource handle to php://stdErr */ public function testErrorResource() { $env = \Slim\Environment::getInstance(true); $this->assertTrue(is_resource($env['slim.errors'])); } }