function testEncodedParameters() { $url = new SimpleUrl(""); $url->addRequestParameter("a", '?!"\'#~@[]{}:;<>,./|£$%^&*()_+-='); $this->assertIdentical($request = $url->getEncodedRequest(), "?a=%3F%21%22%27%23%7E%40%5B%5D%7B%7D%3A%3B%3C%3E%2C.%2F%7C%A3%24%25%5E%26%2A%28%29_%2B-%3D"); $url = new SimpleUrl("?a=%3F%21%22%27%23%7E%40%5B%5D%7B%7D%3A%3B%3C%3E%2C.%2F%7C%A3%24%25%5E%26%2A%28%29_%2B-%3D"); $request = $url->getRequest(); $this->assertEqual($request["a"], '?!"\'#~@[]{}:;<>,./|£$%^&*()_+-='); }
function assertUrl($raw, $parts, $params = false, $coords = false) { if (!is_array($params)) { $params = array(); } $url = new SimpleUrl($raw); $this->assertIdentical($url->getScheme(), $parts[0], "[{$raw}] scheme -> %s"); $this->assertIdentical($url->getUsername(), $parts[1], "[{$raw}] username -> %s"); $this->assertIdentical($url->getPassword(), $parts[2], "[{$raw}] password -> %s"); $this->assertIdentical($url->getHost(), $parts[3], "[{$raw}] host -> %s"); $this->assertIdentical($url->getPort(), $parts[4], "[{$raw}] port -> %s"); $this->assertIdentical($url->getPath(), $parts[5], "[{$raw}] path -> %s"); $this->assertIdentical($url->getTld(), $parts[6], "[{$raw}] tld -> %s"); $this->assertIdentical($url->getEncodedRequest(), $parts[7], "[{$raw}] encoded -> %s"); $this->assertIdentical($url->getFragment(), $parts[8], "[{$raw}] fragment -> %s"); if ($coords) { $this->assertIdentical($url->getX(), $coords[0], "[{$raw}] x -> %s"); $this->assertIdentical($url->getY(), $coords[1], "[{$raw}] y -> %s"); } }
function assertUrl($raw, $parts, $params = false) { if (!is_array($params)) { $params = array(); } $url = new SimpleUrl($raw); $this->assertIdentical($url->getScheme(), $parts[0], "[{$raw}] scheme->%s"); $this->assertIdentical($url->getUsername(), $parts[1], "[{$raw}] username->%s"); $this->assertIdentical($url->getPassword(), $parts[2], "[{$raw}] password->%s"); $this->assertIdentical($url->getHost(), $parts[3], "[{$raw}] host->%s"); $this->assertIdentical($url->getPort(), $parts[4], "[{$raw}] port->%s"); $this->assertIdentical($url->getPath(), $parts[5], "[{$raw}] path->%s"); $this->assertIdentical($url->getTld(), $parts[6], "[{$raw}] tld->%s"); $this->assertIdentical($url->getEncodedRequest(), $parts[7], "[{$raw}] encoded->%s"); $query = new SimpleQueryString(); foreach ($params as $key => $value) { $query->add($key, $value); } $this->assertIdentical($url->getRequest(), $query, "[{$raw}] request->%s"); $this->assertIdentical($url->getFragment(), $parts[8], "[{$raw}] fragment->%s"); }
function testUrlWithRequestKeyEncoded() { $url = new SimpleUrl('/?foo%5B1%5D=bar'); $this->assertEqual($url->getEncodedRequest(), '?foo%5B1%5D=bar'); $url->addRequestParameter('a[1]', 'b[]'); $this->assertEqual($url->getEncodedRequest(), '?foo%5B1%5D=bar&a%5B1%5D=b%5B%5D'); $url = new SimpleUrl('/'); $url->addRequestParameter('a[1]', 'b[]'); $this->assertEqual($url->getEncodedRequest(), '?a%5B1%5D=b%5B%5D'); // param name, looking like pair $url = new SimpleUrl('/'); $url->addRequestParameter('foo[]=bar', ''); $this->assertEqual($url->getEncodedRequest(), '?foo%5B%5D%3Dbar='); $url = new SimpleUrl('/?foo%5B%5D%3Dbar='); $this->assertEqual($url->getEncodedRequest(), '?foo%5B%5D%3Dbar='); }
/** * @param SimpleUrl * @param SimpleEncoding * @return k_ActingAsSimpleHttpResponse */ protected function fetch(SimpleUrl $url, SimpleEncoding $parameters) { // extract primitives from SimpleTest abstractions $url_path = $url->getPath(); $url_query = array(); parse_str(str_replace('?', '', $url->getEncodedRequest()), $url_query); $method = $parameters->getMethod(); $data = array(); foreach ($parameters->getAll() as $pair) { $data[$pair->getKey()] = $pair->getValue(); } if (!in_array($url->getHost(), array("", $this->servername))) { return new k_ActingAsSimpleHttpResponse($url, $data, array("HTTP/1.1 502"), "External URL requested: " . $url->asString(), $method); } // set up a mocked environment $server = array('SERVER_NAME' => $this->servername, 'REQUEST_METHOD' => $method, 'REQUEST_URI' => $url_path); $headers = new k_VirtualHeaders(); $this->authenticator->addHeaders($headers, $url); foreach ($this->additional_headers as $line) { $headers->addHeaderLine($line); } $socket_buffer = new k_VirtualSocketBuffer(); $parameters->writeHeadersTo($socket_buffer); foreach ($socket_buffer->getLines() as $line) { $headers->addHeaderLine($line); } $superglobals = new k_adapter_MockGlobalsAccess($url_query, $data, $server, $headers->headers()); $response = k()->setContext(new k_HttpRequest("", null, $this->identity_loader, $this->language_loader, $this->translator_loader, $superglobals, $this->cookie_access, $this->session_access))->setComponentCreator($this->components)->setCharsetStrategy($this->charset_strategy)->run($this->root_class_name); $output = new k_SimpleOutputAccess(); $response->out($output); return $output->toSimpleHttpResponse($url, $data, $method); }