cakephp2-php8/vendors/simpletest/test/user_agent_test.php
pies da79dff7d7 - merged in Brego's SimpleTest implementation, fixed some of the tests (the Folder test fails to delete one of the test directories on my system, so it's not perfectly clean yet)
- Dispatcher sets a Controller::here variable with the real URL used to access the page, so that tag generators can that use an url (linkTo and formTag for example) use the real url, not guess it from the controller and action names which often fails
- Log class works more reliably and a LogError() shortcut function was added
- Nstring class added, to store string-related functions (there are just four yet, including a random password generator and an string-to-array splitter
- SimpleTest library (with Rephlux) included in /vendors; I've tweaked SimpleScorer::inCli() function, because it didn't work on my setup, it should work everywhere now (it checks for empty REQUEST_METHOD, which should only be empty in CLI)

git-svn-id: https://svn.cakephp.org/repo/trunk/cake@248 3807eeeb-6ff5-0310-8944-8be069107fe0
2005-06-18 23:26:35 +00:00

546 lines
No EOL
24 KiB
PHP

<?php
// $Id$
require_once(dirname(__FILE__) . '/../user_agent.php');
require_once(dirname(__FILE__) . '/../authentication.php');
require_once(dirname(__FILE__) . '/../http.php');
require_once(dirname(__FILE__) . '/../encoding.php');
Mock::generate('SimpleHttpRequest');
Mock::generate('SimpleHttpResponse');
Mock::generate('SimpleHttpHeaders');
Mock::generatePartial('SimpleUserAgent', 'MockRequestUserAgent', array('_createHttpRequest'));
class TestOfSimpleCookieJar extends UnitTestCase {
function testAddCookie() {
$jar = new SimpleCookieJar();
$jar->setCookie(new SimpleCookie("a", "A"));
$cookies = $jar->getValidCookies();
$this->assertEqual(count($cookies), 1);
$this->assertEqual($cookies[0]->getValue(), "A");
}
function testHostFilter() {
$jar = new SimpleCookieJar();
$cookie = new SimpleCookie('a', 'A');
$cookie->setHost('my-host.com');
$jar->setCookie($cookie);
$cookie = new SimpleCookie('b', 'B');
$cookie->setHost('another-host.com');
$jar->setCookie($cookie);
$cookie = new SimpleCookie('c', 'C');
$jar->setCookie($cookie);
$cookies = $jar->getValidCookies('my-host.com');
$this->assertEqual(count($cookies), 2);
$this->assertEqual($cookies[0]->getValue(), 'A');
$this->assertEqual($cookies[1]->getValue(), 'C');
$this->assertEqual(count($jar->getValidCookies('another-host.com')), 2);
$this->assertEqual(count($jar->getValidCookies('www.another-host.com')), 2);
$this->assertEqual(count($jar->getValidCookies('new-host.org')), 1);
$this->assertEqual(count($jar->getValidCookies()), 3);
}
function testPathFilter() {
$jar = new SimpleCookieJar();
$jar->setCookie(new SimpleCookie("a", "A", "/path/"));
$this->assertEqual(count($jar->getValidCookies(false, "/")), 0);
$this->assertEqual(count($jar->getValidCookies(false, "/elsewhere")), 0);
$this->assertEqual(count($jar->getValidCookies(false, "/path/")), 1);
$this->assertEqual(count($jar->getValidCookies(false, "/path")), 1);
$this->assertEqual(count($jar->getValidCookies(false, "/pa")), 0);
$this->assertEqual(count($jar->getValidCookies(false, "/path/here/")), 1);
}
function testPathFilterDeeply() {
$jar = new SimpleCookieJar();
$jar->setCookie(new SimpleCookie("a", "A", "/path/more_path/"));
$this->assertEqual(count($jar->getValidCookies(false, "/path/")), 0);
$this->assertEqual(count($jar->getValidCookies(false, "/path")), 0);
$this->assertEqual(count($jar->getValidCookies(false, "/pa")), 0);
$this->assertEqual(count($jar->getValidCookies(false, "/path/more_path/")), 1);
$this->assertEqual(count($jar->getValidCookies(false, "/path/more_path/and_more")), 1);
$this->assertEqual(count($jar->getValidCookies(false, "/path/not_here/")), 0);
}
function testMultipleCookieWithDifferentPaths() {
$jar = new SimpleCookieJar();
$jar->setCookie(new SimpleCookie("a", "abc", "/"));
$jar->setCookie(new SimpleCookie("a", "123", "/path/here/"));
$cookies = $jar->getValidCookies("my-host.com", "/");
$this->assertEqual($cookies[0]->getPath(), "/");
$cookies = $jar->getValidCookies("my-host.com", "/path/");
$this->assertEqual($cookies[0]->getPath(), "/");
$cookies = $jar->getValidCookies("my-host.com", "/path/here");
$this->assertEqual($cookies[0]->getPath(), "/");
$this->assertEqual($cookies[1]->getPath(), "/path/here/");
$cookies = $jar->getValidCookies("my-host.com", "/path/here/there");
$this->assertEqual($cookies[0]->getPath(), "/");
$this->assertEqual($cookies[1]->getPath(), "/path/here/");
}
function testOverwrite() {
$jar = new SimpleCookieJar();
$jar->setCookie(new SimpleCookie("a", "abc", "/"));
$jar->setCookie(new SimpleCookie("a", "cde", "/"));
$cookies = $jar->getValidCookies();
$this->assertIdentical($cookies[0]->getValue(), "cde");
}
function testClearSessionCookies() {
$jar = new SimpleCookieJar();
$jar->setCookie(new SimpleCookie("a", "A", "/"));
$jar->restartSession();
$this->assertEqual(count($jar->getValidCookies(false, "/")), 0);
}
function testExpiryFilterByDate() {
$cookie = new SimpleCookie("a", "A", "/", "Wed, 25-Dec-02 04:24:20 GMT");
$jar = new SimpleCookieJar();
$jar->setCookie($cookie);
$jar->restartSession("Wed, 25-Dec-02 04:24:19 GMT");
$this->assertIdentical($list = $jar->getValidCookies(false, "/"), array($cookie));
$jar->restartSession("Wed, 25-Dec-02 04:24:21 GMT");
$this->assertIdentical($list = $jar->getValidCookies(false, "/"), array());
}
function testExpiryFilterByAgeing() {
$cookie = new SimpleCookie("a", "A", "/", "Wed, 25-Dec-02 04:24:20 GMT");
$jar = new SimpleCookieJar();
$jar->setCookie($cookie);
$jar->restartSession("Wed, 25-Dec-02 04:24:19 GMT");
$this->assertIdentical($list = $jar->getValidCookies(false, "/"), array($cookie));
$jar->agePrematurely(2);
$jar->restartSession("Wed, 25-Dec-02 04:24:19 GMT");
$this->assertIdentical($list = $jar->getValidCookies(false, "/"), array());
}
function testCookieClearing() {
$jar = new SimpleCookieJar();
$jar->setCookie(new SimpleCookie("a", "abc", "/"));
$jar->setCookie(new SimpleCookie("a", "", "/"));
$this->assertEqual(count($cookies = $jar->getValidCookies(false, "/")), 1);
$this->assertIdentical($cookies[0]->getValue(), "");
}
function testCookieClearByDate() {
$jar = new SimpleCookieJar();
$jar->setCookie(new SimpleCookie("a", "abc", "/", "Wed, 25-Dec-02 04:24:21 GMT"));
$jar->setCookie(new SimpleCookie("a", "def", "/", "Wed, 25-Dec-02 04:24:19 GMT"));
$cookies = $jar->getValidCookies(false, "/");
$this->assertIdentical($cookies[0]->getValue(), "def");
$jar->restartSession("Wed, 25-Dec-02 04:24:20 GMT");
$this->assertEqual(count($jar->getValidCookies(false, "/")), 0);
}
}
class TestOfFetchingUrlParameters extends UnitTestCase {
function testGet() {
$headers = &new MockSimpleHttpHeaders($this);
$headers->setReturnValue('getMimeType', 'text/html');
$headers->setReturnValue('getResponseCode', 200);
$headers->setReturnValue('getNewCookies', array());
$response = &new MockSimpleHttpResponse($this);
$response->setReturnValue('getContent', 'stuff');
$response->setReturnReference('getHeaders', $headers);
$request = &new MockSimpleHttpRequest($this);
$request->setReturnReference('fetch', $response);
$agent = &new MockRequestUserAgent($this);
$agent->setReturnReference('_createHttpRequest', $request);
$agent->expectOnce('_createHttpRequest', array(
'GET',
new SimpleUrl('http://test:secret@this.com/page.html?a=A&b=B'),
new SimpleFormEncoding()));
$agent->SimpleUserAgent();
$agent->fetchResponse(
'GET',
new SimpleUrl('http://test:secret@this.com/page.html'),
new SimpleFormEncoding(array('a' => 'A', 'b' => 'B')));
$agent->tally();
}
function testHead() {
$headers = &new MockSimpleHttpHeaders($this);
$headers->setReturnValue('getMimeType', 'text/html');
$headers->setReturnValue('getResponseCode', 200);
$headers->setReturnValue('getNewCookies', array());
$response = &new MockSimpleHttpResponse($this);
$response->setReturnValue('getContent', 'stuff');
$response->setReturnReference('getHeaders', $headers);
$request = &new MockSimpleHttpRequest($this);
$request->setReturnReference('fetch', $response);
$url = new SimpleUrl('http://this.com/page.html');
$url->addRequestParameters(array('a' => 'A', 'b' => 'B'));
$agent = &new MockRequestUserAgent($this);
$agent->setReturnReference('_createHttpRequest', $request);
$agent->expectOnce('_createHttpRequest', array(
'HEAD',
new SimpleUrl('http://test:secret@this.com/page.html?a=A&b=B'),
new SimpleFormEncoding()));
$agent->SimpleUserAgent();
$agent->fetchResponse(
'HEAD',
new SimpleUrl('http://test:secret@this.com/page.html'),
new SimpleFormEncoding(array('a' => 'A', 'b' => 'B')));
$agent->tally();
}
function testPost() {
$headers = &new MockSimpleHttpHeaders($this);
$headers->setReturnValue('getMimeType', 'text/html');
$headers->setReturnValue('getResponseCode', 200);
$headers->setReturnValue('getNewCookies', array());
$response = &new MockSimpleHttpResponse($this);
$response->setReturnValue('getContent', 'stuff');
$response->setReturnReference('getHeaders', $headers);
$request = &new MockSimpleHttpRequest($this);
$request->setReturnReference('fetch', $response);
$agent = &new MockRequestUserAgent($this);
$agent->setReturnReference('_createHttpRequest', $request);
$agent->expectOnce('_createHttpRequest', array(
'POST',
new SimpleUrl('http://test:secret@this.com/page.html'),
new SimpleFormEncoding(array('a' => 'A', 'b' => 'B'))));
$agent->SimpleUserAgent();
$agent->fetchResponse(
'POST',
new SimpleUrl('http://test:secret@this.com/page.html'),
new SimpleFormEncoding(array('a' => 'A', 'b' => 'B')));
$agent->tally();
}
}
class TestOfAdditionalHeaders extends UnitTestCase {
function testAdditionalHeaderAddedToRequest() {
$headers = &new MockSimpleHttpHeaders($this);
$headers->setReturnValue('getNewCookies', array());
$response = &new MockSimpleHttpResponse($this);
$response->setReturnReference('getHeaders', $headers);
$request = &new MockSimpleHttpRequest($this);
$request->setReturnReference('fetch', $response);
$request->expectOnce(
'addHeaderLine',
array('User-Agent: SimpleTest'));
$agent = &new MockRequestUserAgent($this);
$agent->setReturnReference('_createHttpRequest', $request);
$agent->SimpleUserAgent();
$agent->addHeader('User-Agent: SimpleTest');
$response = &$agent->fetchResponse('GET', new SimpleUrl('http://this.host/'));
$request->tally();
}
}
class TestOfBrowserCookies extends UnitTestCase {
function &_createStandardResponse() {
$headers = &new MockSimpleHttpHeaders($this);
$headers->setReturnValue("getNewCookies", array());
$response = &new MockSimpleHttpResponse($this);
$response->setReturnValue("isError", false);
$response->setReturnValue("getContent", "stuff");
$response->setReturnReference("getHeaders", $headers);
return $response;
}
function &_createCookieSite($cookies) {
$headers = &new MockSimpleHttpHeaders($this);
$headers->setReturnValue("getNewCookies", $cookies);
$response = &new MockSimpleHttpResponse($this);
$response->setReturnValue("isError", false);
$response->setReturnReference("getHeaders", $headers);
$response->setReturnValue("getContent", "stuff");
$request = &new MockSimpleHttpRequest($this);
$request->setReturnReference("fetch", $response);
return $request;
}
function &_createPartialFetcher(&$request) {
$agent = &new MockRequestUserAgent($this);
$agent->setReturnReference('_createHttpRequest', $request);
$agent->SimpleUserAgent();
return $agent;
}
function testSendingExistingCookie() {
$request = &new MockSimpleHttpRequest($this);
$request->setReturnReference('fetch', $this->_createStandardResponse());
$request->expectOnce('setCookie', array(new SimpleCookie('a', 'A')));
$agent = &$this->_createPartialFetcher($request);
$agent->setCookie('a', 'A');
$response = $agent->fetchResponse(
'GET',
new SimpleUrl('http://this.com/this/path/page.html'),
array());
$this->assertEqual($response->getContent(), "stuff");
$request->tally();
}
function testOverwriteCookieThatAlreadyExists() {
$request = &$this->_createCookieSite(array(new SimpleCookie("a", "AAAA", "this/path/")));
$agent = &$this->_createPartialFetcher($request);
$agent->setCookie("a", "A");
$agent->fetchResponse(
"GET",
new SimpleUrl('http://this.com/this/path/page.html'),
array());
$this->assertEqual($agent->getCookieValue("this.com", "this/path/", "a"), "AAAA");
}
function testClearCookieBySettingExpiry() {
$request = &$this->_createCookieSite(array(
new SimpleCookie("a", "b", "this/path/", "Wed, 25-Dec-02 04:24:19 GMT")));
$agent = &$this->_createPartialFetcher($request);
$agent->setCookie("a", "A", "this/path/", "Wed, 25-Dec-02 04:24:21 GMT");
$agent->fetchResponse(
'GET',
new SimpleUrl('http://this.com/this/path/page.html'),
array());
$this->assertIdentical(
$agent->getCookieValue("this.com", "this/path/", "a"),
"b");
$agent->restart("Wed, 25-Dec-02 04:24:20 GMT");
$this->assertIdentical(
$agent->getCookieValue("this.com", "this/path/", "a"),
false);
}
function testAgeingAndClearing() {
$request = &$this->_createCookieSite(array(
new SimpleCookie("a", "A", "this/path/", "Wed, 25-Dec-02 04:24:21 GMT")));
$agent = &$this->_createPartialFetcher($request);
$agent->fetchResponse(
'GET',
new SimpleUrl('http://this.com/this/path/page.html'),
array());
$agent->restart("Wed, 25-Dec-02 04:24:20 GMT");
$this->assertIdentical(
$agent->getCookieValue("this.com", "this/path/", "a"),
"A");
$agent->ageCookies(2);
$agent->restart("Wed, 25-Dec-02 04:24:20 GMT");
$this->assertIdentical(
$agent->getCookieValue("this.com", "this/path/", "a"),
false);
}
function testReadingIncomingAndSetCookies() {
$request = &$this->_createCookieSite(array(
new SimpleCookie("a", "AAA", "this/path/")));
$agent = &$this->_createPartialFetcher($request);
$this->assertNull($agent->getBaseCookieValue("a", false));
$agent->fetchResponse(
'GET',
new SimpleUrl('http://this.com/this/path/page.html'),
array());
$agent->setCookie("b", "BBB", "this.com", "this/path/");
$this->assertEqual(
$agent->getBaseCookieValue("a", new SimpleUrl('http://this.com/this/path/page.html')),
"AAA");
$this->assertEqual(
$agent->getBaseCookieValue("b", new SimpleUrl('http://this.com/this/path/page.html')),
"BBB");
}
}
class TestOfHttpRedirects extends UnitTestCase {
function &createRedirect($content, $redirect) {
$headers = &new MockSimpleHttpHeaders($this);
$headers->setReturnValue('getNewCookies', array());
$headers->setReturnValue('isRedirect', (boolean)$redirect);
$headers->setReturnValue('getLocation', $redirect);
$headers->setReturnValue('getNewCookies', array());
$response = &new MockSimpleHttpResponse($this);
$response->setReturnValue('getContent', $content);
$response->setReturnReference('getHeaders', $headers);
$request = &new MockSimpleHttpRequest($this);
$request->setReturnReference('fetch', $response);
return $request;
}
function testDisabledRedirects() {
$agent = &new MockRequestUserAgent($this);
$agent->setReturnReference(
'_createHttpRequest',
$this->createRedirect('stuff', 'there.html'));
$agent->expectOnce('_createHttpRequest');
$agent->SimpleUserAgent();
$agent->setMaximumRedirects(0);
$response = &$agent->fetchResponse('GET', new SimpleUrl('here.html'));
$this->assertEqual($response->getContent(), 'stuff');
$agent->tally();
}
function testSingleRedirect() {
$agent = &new MockRequestUserAgent($this);
$agent->setReturnReferenceAt(
0,
'_createHttpRequest',
$this->createRedirect('first', 'two.html'));
$agent->setReturnReferenceAt(
1,
'_createHttpRequest',
$this->createRedirect('second', 'three.html'));
$agent->expectCallCount('_createHttpRequest', 2);
$agent->SimpleUserAgent();
$agent->setMaximumRedirects(1);
$response = &$agent->fetchResponse('GET', new SimpleUrl('one.html'));
$this->assertEqual($response->getContent(), 'second');
$agent->tally();
}
function testDoubleRedirect() {
$agent = &new MockRequestUserAgent($this);
$agent->setReturnReferenceAt(
0,
'_createHttpRequest',
$this->createRedirect('first', 'two.html'));
$agent->setReturnReferenceAt(
1,
'_createHttpRequest',
$this->createRedirect('second', 'three.html'));
$agent->setReturnReferenceAt(
2,
'_createHttpRequest',
$this->createRedirect('third', 'four.html'));
$agent->expectCallCount('_createHttpRequest', 3);
$agent->SimpleUserAgent();
$agent->setMaximumRedirects(2);
$response = &$agent->fetchResponse('GET', new SimpleUrl('one.html'));
$this->assertEqual($response->getContent(), 'third');
$agent->tally();
}
function testSuccessAfterRedirect() {
$agent = &new MockRequestUserAgent($this);
$agent->setReturnReferenceAt(
0,
'_createHttpRequest',
$this->createRedirect('first', 'two.html'));
$agent->setReturnReferenceAt(
1,
'_createHttpRequest',
$this->createRedirect('second', false));
$agent->setReturnReferenceAt(
2,
'_createHttpRequest',
$this->createRedirect('third', 'four.html'));
$agent->expectCallCount('_createHttpRequest', 2);
$agent->SimpleUserAgent();
$agent->setMaximumRedirects(2);
$response = &$agent->fetchResponse('GET', new SimpleUrl('one.html'));
$this->assertEqual($response->getContent(), 'second');
$agent->tally();
}
function testRedirectChangesPostToGet() {
$agent = &new MockRequestUserAgent($this);
$agent->setReturnReferenceAt(
0,
'_createHttpRequest',
$this->createRedirect('first', 'two.html'));
$agent->expectArgumentsAt(0, '_createHttpRequest', array('POST', '*', '*'));
$agent->setReturnReferenceAt(
1,
'_createHttpRequest',
$this->createRedirect('second', 'three.html'));
$agent->expectArgumentsAt(1, '_createHttpRequest', array('GET', '*', '*'));
$agent->expectCallCount('_createHttpRequest', 2);
$agent->SimpleUserAgent();
$agent->setMaximumRedirects(1);
$response = &$agent->fetchResponse('POST', new SimpleUrl('one.html'));
$agent->tally();
}
}
class TestOfBadHosts extends UnitTestCase {
function &_createSimulatedBadHost() {
$response = &new MockSimpleHttpResponse($this);
$response->setReturnValue('isError', true);
$response->setReturnValue('getError', 'Bad socket');
$response->setReturnValue('getContent', false);
$request = &new MockSimpleHttpRequest($this);
$request->setReturnReference('fetch', $response);
return $request;
}
function testUntestedHost() {
$request = &$this->_createSimulatedBadHost();
$agent = &new MockRequestUserAgent($this);
$agent->setReturnReference('_createHttpRequest', $request);
$agent->SimpleUserAgent();
$response = &$agent->fetchResponse(
'GET',
new SimpleUrl('http://this.host/this/path/page.html'));
$this->assertTrue($response->isError());
}
}
class TestOfAuthorisation extends UnitTestCase {
function testAuthenticateHeaderAdded() {
$headers = &new MockSimpleHttpHeaders($this);
$headers->setReturnValue('getNewCookies', array());
$response = &new MockSimpleHttpResponse($this);
$response->setReturnReference('getHeaders', $headers);
$request = &new MockSimpleHttpRequest($this);
$request->setReturnReference('fetch', $response);
$request->expectOnce(
'addHeaderLine',
array('Authorization: Basic ' . base64_encode('test:secret')));
$agent = &new MockRequestUserAgent($this);
$agent->setReturnReference('_createHttpRequest', $request);
$agent->SimpleUserAgent();
$response = &$agent->fetchResponse(
'GET',
new SimpleUrl('http://test:secret@this.host'));
$request->tally();
}
}
?>