diff --git a/main/mashape/http/Chunked.php b/lib/Chunked.php similarity index 100% rename from main/mashape/http/Chunked.php rename to lib/Chunked.php diff --git a/lib/HttpClient.php b/lib/HttpClient.php new file mode 100644 index 0000000..862d84b --- /dev/null +++ b/lib/HttpClient.php @@ -0,0 +1,105 @@ + $val) { + $lowercaseHeaders[strtolower($key)] = $val; + } + + $lowercaseHeaders["user-agent"] = USER_AGENT; + + $ch = curl_init(); + if ($httpMethod != HttpMethod::GET) { + curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, $httpMethod); + //TODO: Remove + /* + if (is_array($body)) { + $parameters = ""; + foreach($body as $key => $value) { + if (is_array($value)) { + throw new Exception("Nested arrays are not supported"); + } + + $parameters .= $key . "="; + if (substr($value, 0, 1) == "@") { + // It's a path + $parameters .= $value; + } else { + $parameters .= rawurlencode($value); + } + + $parameters .= "&"; + } + + if (strlen($parameters) > 1) { + $parameters = substr($parameters, 0, strlen($parameters) - 1); + } + + $body = $parameters; + var_dump($body); + } + */ + curl_setopt ($ch, CURLOPT_POSTFIELDS, $body); + } + + curl_setopt ($ch, CURLOPT_URL , HttpClient::encodeUrl($url)); + curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt ($ch, CURLOPT_MAXREDIRS, 10); + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); + curl_setopt ($ch, CURLOPT_HTTPHEADER, $lowercaseHeaders); + curl_setopt ($ch, CURLOPT_HEADER, true); + curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false); + + $response = curl_exec($ch); + if (curl_error($ch)) { + throw new Exception(curl_error($ch)); + } + + // Split the full response in its headers and body + $curl_info = curl_getinfo($ch); + $header_size = $curl_info["header_size"]; + $header = substr($response, 0, $header_size); + $body = substr($response, $header_size); + $httpCode = $curl_info["http_code"]; + + return new HttpResponse($httpCode, $body, $header); + } + + + + private static function encodeUrl($url) { + $parsedUrl = parse_url($url); + parse_str( $parsedUrl['query'], $query ); // generating an array by reference (yes, kinda weird) + + $result = $parsedUrl["scheme"] . "://" . $parsedUrl["host"] . (($parsedUrl["port"] != NULL ? ":" . $parsedUrl["port"] : "")) . $parsedUrl["path"] . "?"; + + if ($query != null) { + foreach($query as $key => $val) { + $result .= $key . "=" . rawurlencode($val) . "&"; + } + $result = substr($result, 0, strlen($result) - 1); + } + return $result; + } + +} + +?> \ No newline at end of file diff --git a/main/mashape/http/HttpMethod.php b/lib/HttpMethod.php similarity index 100% rename from main/mashape/http/HttpMethod.php rename to lib/HttpMethod.php diff --git a/lib/HttpResponse.php b/lib/HttpResponse.php new file mode 100644 index 0000000..94ecec2 --- /dev/null +++ b/lib/HttpResponse.php @@ -0,0 +1,48 @@ +code = $code; + $this->headers = $this->get_headers_from_curl_response($headers); + $this->raw_body = $raw_body; + $this->body = $raw_body; + $json = json_decode($raw_body); + if (json_last_error() == JSON_ERROR_NONE) { + $this->body = $json; + } + } + + public function __get($property) { + if (property_exists($this, $property)) { + return $this->$property; + } + } + + public function __set($property, $value) { + if (property_exists($this, $property)) { + $this->$property = $value; + } + return $this; + } + + private function get_headers_from_curl_response($headers) + { + foreach (explode("\r\n", $headers) as $i => $line) { + if ($i !== 0) { + list ($key, $value) = explode(': ', $line); + if (!empty($key) && substr($key, 0, 4) != "HTTP") $result[$key] = $value; + } + } + return $result; + } + +} + +?> + diff --git a/main/.gitignore b/main/.gitignore deleted file mode 100644 index f0f644e..0000000 --- a/main/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -LICENSE -README.md diff --git a/main/mashape/MashapeClient.php b/main/mashape/MashapeClient.php deleted file mode 100755 index 742e87b..0000000 --- a/main/mashape/MashapeClient.php +++ /dev/null @@ -1,30 +0,0 @@ -. - * - * - * The author of this software is Mashape, Inc. - * For any question or feedback please contact us at: support@mashape.com - * - */ - -require_once(dirname(__FILE__) . "/http/HttpClient.php"); -require_once(dirname(__FILE__) . "/http/MashapeResponse.php"); - -?> \ No newline at end of file diff --git a/main/mashape/authentication/Authentication.php b/main/mashape/authentication/Authentication.php deleted file mode 100644 index 125f1aa..0000000 --- a/main/mashape/authentication/Authentication.php +++ /dev/null @@ -1,7 +0,0 @@ - \ No newline at end of file diff --git a/main/mashape/authentication/AuthenticationUtil.php b/main/mashape/authentication/AuthenticationUtil.php deleted file mode 100755 index b2c0918..0000000 --- a/main/mashape/authentication/AuthenticationUtil.php +++ /dev/null @@ -1,40 +0,0 @@ -. - * - * - * The author of this software is Mashape, Inc. - * For any question or feedback please contact us at: support@mashape.com - * - */ - -class AuthenticationUtil { - - public static function generateAuthenticationHeader($publicKey, $privateKey) { - $header = ""; - if (!($publicKey == null || $privateKey == null)) { - $hash = hash_hmac("sha1", $publicKey, $privateKey); - $header = "X-Mashape-Authorization: " . base64_encode($publicKey . ":" . $hash); - } - return $header; - } - -} - -?> \ No newline at end of file diff --git a/main/mashape/authentication/BasicAuthentication.php b/main/mashape/authentication/BasicAuthentication.php deleted file mode 100644 index bf87d07..0000000 --- a/main/mashape/authentication/BasicAuthentication.php +++ /dev/null @@ -1,21 +0,0 @@ -headers = array("Authorization: Basic " . base64_encode($headerValue)); - } - - public function handleHeaders() { - return $this->headers; - } - - public function handleParams() { - return null; - } -} -?> \ No newline at end of file diff --git a/main/mashape/authentication/CustomHeaderAuthentication.php b/main/mashape/authentication/CustomHeaderAuthentication.php deleted file mode 100644 index 05cc0ab..0000000 --- a/main/mashape/authentication/CustomHeaderAuthentication.php +++ /dev/null @@ -1,20 +0,0 @@ -headers = array($headerName . ": " . $headerValue); - } - - public function handleHeaders() { - return $this->headers; - } - - public function handleParams() { - return null; - } -} -?> \ No newline at end of file diff --git a/main/mashape/authentication/HeaderAuthentication.php b/main/mashape/authentication/HeaderAuthentication.php deleted file mode 100644 index 020c144..0000000 --- a/main/mashape/authentication/HeaderAuthentication.php +++ /dev/null @@ -1,9 +0,0 @@ - \ No newline at end of file diff --git a/main/mashape/authentication/MashapeAuthentication.php b/main/mashape/authentication/MashapeAuthentication.php deleted file mode 100644 index d864ba0..0000000 --- a/main/mashape/authentication/MashapeAuthentication.php +++ /dev/null @@ -1,17 +0,0 @@ -headers = array(AuthenticationUtil::generateAuthenticationHeader($publicKey, $privateKey)); - } - - public function handleHeaders() { - return $this->headers; - } -} -?> \ No newline at end of file diff --git a/main/mashape/authentication/OAuth10aAuthentication.php b/main/mashape/authentication/OAuth10aAuthentication.php deleted file mode 100644 index 374306e..0000000 --- a/main/mashape/authentication/OAuth10aAuthentication.php +++ /dev/null @@ -1,24 +0,0 @@ -accessToken) || !isset($this->accessSecret)) { - throw new MashapeClientException( - EXCEPTION_OAUTH1_AUTHORIZE, - EXCEPTION_OAUTH1_AUTHORIZE_CODE); - } - $headers = array(); - $headers[] = "x-mashape-oauth-consumerkey: " . $this->consumerKey; - $headers[] = "x-mashape-oauth-consumersecret: " . $this->consumerSecret; - $headers[] = "x-mashape-oauth-accesstoken: " . $this->accessToken; - $headers[] = "x-mashape-oauth-accesssecret: " . $this->accessSecret; - return $headers; - } -} -?> \ No newline at end of file diff --git a/main/mashape/authentication/OAuth2Authentication.php b/main/mashape/authentication/OAuth2Authentication.php deleted file mode 100644 index a0a4d85..0000000 --- a/main/mashape/authentication/OAuth2Authentication.php +++ /dev/null @@ -1,20 +0,0 @@ -accessToken == null) { - throw new MashapeClientException( - EXCEPTION_OAUTH2_AUTHORIZE, - EXCEPTION_OAUTH2_AUTHORIZE_CODE); - } - $params = array("accesstoken" => $this->accessToken); - return $params; - } -} -?> \ No newline at end of file diff --git a/main/mashape/authentication/OAuthAuthentication.php b/main/mashape/authentication/OAuthAuthentication.php deleted file mode 100644 index e079142..0000000 --- a/main/mashape/authentication/OAuthAuthentication.php +++ /dev/null @@ -1,40 +0,0 @@ -consumerKey = $consumerKey; - $this->consumerSecret = $consumerSecret; - $this->callbackUrl = $callbackUrl; - } - - public function addAccessToken($accessToken, $accessSecret = null) { - $this->accessToken = $accessToken; - $this->accessSecret = $accessSecret; - } - - public function getOAuthBaseParams() { - $params = array( - "consumerKey" => $this->consumerKey, - "consumerSecret" => $this->consumerSecret, - "callbackUrl" => $this->callbackUrl, - ); - return $params; - } - - public function handleParams() { - return null; - } - - public function handleHeaders() { - return null; - } -} -?> \ No newline at end of file diff --git a/main/mashape/authentication/QueryAuthentication.php b/main/mashape/authentication/QueryAuthentication.php deleted file mode 100644 index 6e3538d..0000000 --- a/main/mashape/authentication/QueryAuthentication.php +++ /dev/null @@ -1,20 +0,0 @@ -params = array($queryKey => $queryValue); - } - - public function handleHeaders() { - return null; - } - - public function handleParams() { - return $this->params; - } -} -?> \ No newline at end of file diff --git a/main/mashape/exceptions/ExceptionConstants.php b/main/mashape/exceptions/ExceptionConstants.php deleted file mode 100755 index c8d4d0d..0000000 --- a/main/mashape/exceptions/ExceptionConstants.php +++ /dev/null @@ -1,70 +0,0 @@ -. - * - * - * The author of this software is Mashape, Inc. - * For any question or feedback please contact us at: support@mashape.com - * - */ - -define("EXCEPTION_NOTSUPPORTED_HTTPMETHOD_CODE", 1003); -define("EXCEPTION_NOTSUPPORTED_HTTPMETHOD", - "HTTP method not supported. Only DELETE, GET, POST, PUT are supported"); - -define("EXCEPTION_CONTENT_TYPE_JSON_ARRAY_CODE", 1004); -define("EXCEPTION_CONTENT_TYPE_JSON_ARRAY", - "Content Type JSON does not accept array parameters. Parameters should be" - ." a JSON string"); - -define("EXCEPTION_CONTENT_TYPE_NON_ARRAY_CODE", 1005); -define("EXCEPTION_CONTENT_TYPE_NON_ARRAY", - "Parameters must be an array unless content type is set to JSON"); - -define("EXCEPTION_CONTENT_TYPE_JSON_QUERYAUTH_CODE", 1006); -define("EXCEPTION_CONTENT_TYPE_JSON_QUERYAUTH", - "Query Authentication cannot be used in conjunction with content type JSON"); - -define("EXCEPTION_OAUTH1_AUTHORIZE_CODE", 1007); -define("EXCEPTION_OAUTH1_AUTHORIZE", - "Before consuming an OAuth endpoint, you must invoke the authorize(" - ."'access_token', 'access_secret') function with non-null values"); - -define("EXCEPTION_OAUTH2_AUTHORIZE_CODE", 1007); -define("EXCEPTION_OAUTH2_AUTHORIZE", - "Before consuming an OAuth endpoint, you must invoke the authorize(" - ."'access_token') function with a non-null value"); - -define("EXCEPTION_NOTSUPPORTED_CONTENTTYPE_CODE", 415); -define("EXCEPTION_NOTSUPPORTED_CONTENTTYPE", - "Content Type not supported. Currently only application/x-www-form-urlencoded, " - ."application/json, and multipart/form-data are supported"); - -define("EXCEPTION_GET_INVALID_CONTENTTYPE_CODE", 415); -define("EXCEPTION_GET_INVALID_CONTENTTYPE", "A GET request must have a content" - ." type of application/x-www-form-urlencoded or application/json"); - -define("EXCEPTION_CURL_CODE", 520); -define("EXCEPTION_CURL", - "Encountered an exception making the request"); - -define("EXCEPTION_SYSTEM_ERROR_CODE", 2000); -define("EXCEPTION_JSONDECODE_REQUEST", "Can't deserialize the response JSON: %s"); - -?> \ No newline at end of file diff --git a/main/mashape/exceptions/MashapeClientException.php b/main/mashape/exceptions/MashapeClientException.php deleted file mode 100755 index 24c2aad..0000000 --- a/main/mashape/exceptions/MashapeClientException.php +++ /dev/null @@ -1,37 +0,0 @@ -. - * - * - * The author of this software is Mashape, Inc. - * For any question or feedback please contact us at: support@mashape.com - * - */ - -require_once (dirname(__FILE__) . "/ExceptionConstants.php"); - -class MashapeClientException extends Exception { - - function __construct($message, $code) { - parent::__construct($message, $code); - } - -} - -?> \ No newline at end of file diff --git a/main/mashape/http/ContentType.php b/main/mashape/http/ContentType.php deleted file mode 100755 index 6b29338..0000000 --- a/main/mashape/http/ContentType.php +++ /dev/null @@ -1,34 +0,0 @@ -. - * - * - * The author of this software is Mashape, Inc. - * For any question or feedback please contact us at: support@mashape.com - * - */ - -class ContentType -{ - const FORM = "FORM"; - const MULTIPART = "MULTIPART"; - const JSON = "JSON"; -} - -?> \ No newline at end of file diff --git a/main/mashape/http/HttpClient.php b/main/mashape/http/HttpClient.php deleted file mode 100755 index 1c6a5bd..0000000 --- a/main/mashape/http/HttpClient.php +++ /dev/null @@ -1,128 +0,0 @@ -. - * - * - * The author of this software is Mashape, Inc. - * For any question or feedback please contact us at: support@mashape.com - * - */ - -require_once(dirname(__FILE__) . "/../exceptions/MashapeClientException.php"); -require_once(dirname(__FILE__) . "/HttpMethod.php"); -require_once(dirname(__FILE__) . "/ContentType.php"); -require_once(dirname(__FILE__) . "/UrlUtils.php"); -require_once(dirname(__FILE__) . "/HttpUtils.php"); -require_once(dirname(__FILE__) . "/MashapeResponse.php"); -require_once(dirname(__FILE__) . "/../authentication/HeaderAuthentication.php"); -require_once(dirname(__FILE__) . "/../authentication/BasicAuthentication.php"); -require_once(dirname(__FILE__) . "/../authentication/CustomHeaderAuthentication.php"); -require_once(dirname(__FILE__) . "/../authentication/MashapeAuthentication.php"); -require_once(dirname(__FILE__) . "/../authentication/QueryAuthentication.php"); -require_once(dirname(__FILE__) . "/../authentication/OAuth10aAuthentication.php"); -require_once(dirname(__FILE__) . "/../authentication/OAuth2Authentication.php"); - -class HttpClient { - - public static function doRequest($httpMethod, $url, $parameters, - $authHandlers, $contentType = ContentType::FORM, $encodeJson = true) { - HttpUtils::cleanParameters($parameters); - - if ($authHandlers == null) { - $authHandlers = array(); - } - - self::validateRequest($httpMethod, $url, $parameters, $authHandlers, $contentType); - $response = self::execRequest($httpMethod, $url, $parameters, $authHandlers, $contentType, $encodeJson); - - return $response; - } - - private static function validateRequest($httpMethod, $url, $parameters, $authHandlers, $contentType) { - if ( !($httpMethod == HttpMethod::DELETE - || $httpMethod == HttpMethod::GET - || $httpMethod == HttpMethod::POST - || $httpMethod == HttpMethod::PUT - || $httpMethod == HttpMethod::PATCH)) { - // we only support these HTTP methods. - throw new MashapeClientException(EXCEPTION_NOTSUPPORTED_HTTPMETHOD, - EXCEPTION_NOTSUPPORTED_HTTPMETHOD_CODE); - } - if (!is_array($parameters) && $contentType != ContentType::JSON) { - // Raw parameters are only allows for ContentType::JSON - throw new MashapeClientException( - EXCEPTION_CONTENT_TYPE_NON_ARRAY, - EXCEPTION_CONTENT_TYPE_NON_ARRAY_CODE); - } - if ($httpMethod == HttpMethod::GET && $contentType != ContentType::FORM) { - // if we have a GET request that is anything other than urlencoded - // form data, we shouldn't allow it. - throw new MashapeClientException( - EXCEPTION_GET_INVALID_CONTENTTYPE, - EXCEPTION_GET_INVALID_CONTENTTYPE_CODE); - } - if ($contentType == ContentType::JSON) { - foreach ($authHandlers as $handler) { - if ($handler instanceof QueryAuthentication) { - // bad. No room for query auth parameters if the whole body is json - throw new MashapeClientException( - EXCEPTION_CONTENT_TYPE_JSON_QUERYAUTH, - EXCEPTION_CONTENT_TYPE_JSON_QUERYAUTH_CODE); - } - } - } - } - - private static function execRequest($httpMethod, $url, $parameters, $authHandlers, $contentType, $encodeJson) { - // first, collect the headers and parameters we'll need from the authentication handlers - list($headers, $authParameters) = HttpUtils::handleAuthentication($authHandlers); - if (is_array($parameters)) { - $parameters = array_merge($parameters, $authParameters); - } - - // prepare the request - $ch = curl_init (); - - if ($httpMethod == HttpMethod::GET) { - $url = UrlUtils::buildUrlWithQueryString($url, $parameters); - } else { - $data = HttpUtils::buildDataForContentType($contentType, $parameters, $headers); - curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, $httpMethod); - curl_setopt ($ch, CURLOPT_POSTFIELDS, $data); - } - curl_setopt ($ch, CURLOPT_URL , $url); - curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers); - curl_setopt ($ch, CURLINFO_HEADER_OUT, true); - curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false); - $response = curl_exec($ch); - if (curl_error($ch)) { - throw new MashapeClientException( - EXCEPTION_CURL . ":" . curl_error($ch), - EXCEPTION_CURL_CODE); - } - $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); - $responseHeaders = curl_getinfo($ch, CURLINFO_HEADER_OUT); - curl_close($ch); - - return new MashapeResponse($response, $httpCode, $responseHeaders, $encodeJson); - } -} - -?> \ No newline at end of file diff --git a/main/mashape/http/HttpUtils.php b/main/mashape/http/HttpUtils.php deleted file mode 100644 index c7ecbcc..0000000 --- a/main/mashape/http/HttpUtils.php +++ /dev/null @@ -1,96 +0,0 @@ -. - * - * - * The author of this software is Mashape, Inc. - * For any question or feedback please contact us at: support@mashape.com - * - */ - -class HttpUtils { - - const JSON_PARAM_BODY = "88416847677069008618"; - - public static function cleanParameters(&$parameters) { - if ($parameters == null) { - $parameters = array(); - } else if (is_array($parameters)) { - // Remove null parameters - $keys = array_keys($parameters); - for ($i = 0;$ihandleParams()); - } else if ($handler instanceof HeaderAuthentication) { - $headers = array_merge($headers, $handler->handleHeaders()); - } else if ($handler instanceof Oauth10aAuthentication) { - $headers = array_merge($headers, $handler->handleHeaders()); - } else if ($handler instanceof Oauth2Authentication) { - $parameters = array_merge($parameters, $handler->handleParams()); - } - } - return array($headers, $parameters); - } - - public static function generateClientHeaders() { - $headers = "User-Agent: mashape-php/1.0: "; - return $headers; - } -} - -?> \ No newline at end of file diff --git a/main/mashape/http/MashapeResponse.php b/main/mashape/http/MashapeResponse.php deleted file mode 100644 index 45c6ba2..0000000 --- a/main/mashape/http/MashapeResponse.php +++ /dev/null @@ -1,61 +0,0 @@ -. - * - * - * The author of this software is Mashape, Inc. - * For any question or feedback please contact us at: support@mashape.com - * - */ - -require_once(dirname(__FILE__) . "/../json/Json.php"); -require_once(dirname(__FILE__) . "/Chunked.php"); -require_once(dirname(__FILE__) . "/../exceptions/MashapeClientException.php"); - -class MashapeResponse { - public $statusCode; - public $body; - public $rawBody; - public $headers; - - function __construct($response, $statusCode, $headers, $encodeJson = false) { - $this->rawBody = $response; - $this->headers = $headers; - $this->statusCode = $statusCode; - $this->_parseBody($encodeJson); - } - - function _parseBody($encodeJson) { - if ($encodeJson) { - $this->body = json_decode($this->rawBody); - if (empty($this->body) && ($this->statusCode == 200)) { - // It may be a chunked response - //$this->body = json_decode(http_chunked_decode($this->rawBody)); - if (empty($this->body)) { - throw new MashapeClientException( - sprintf(EXCEPTION_JSONDECODE_REQUEST, $this->rawBody), - EXCEPTION_SYSTEM_ERROR_CODE); - } - } - } else { - $this->body = $this->rawBody; - } - } -} -?> \ No newline at end of file diff --git a/main/mashape/http/UrlUtils.php b/main/mashape/http/UrlUtils.php deleted file mode 100755 index 34b0151..0000000 --- a/main/mashape/http/UrlUtils.php +++ /dev/null @@ -1,39 +0,0 @@ -. - * - * - * The author of this software is Mashape, Inc. - * For any question or feedback please contact us at: support@mashape.com - * - */ - -class UrlUtils { - - public static function buildUrlWithQueryString($url, $parameters) { - foreach ($parameters as $paramKey => $paramValue) { - $delimiter = (strpos($url, "?") === false) ? "?" : "&"; - $url .= $delimiter . $paramKey . "=" . urlencode($paramValue); - } - return $url; - } - -} - -?> \ No newline at end of file diff --git a/main/mashape/json/Json.php b/main/mashape/json/Json.php deleted file mode 100755 index 119dcaf..0000000 --- a/main/mashape/json/Json.php +++ /dev/null @@ -1,52 +0,0 @@ -. - * - * - * The author of this software is Mashape, Inc. - * For any question or feedback please contact us at: support@mashape.com - * - */ - -if (!function_exists('json_decode')) { - function json_decode($content, $assoc=false) { - require_once(dirname(__FILE__) . "/Services_JSON.php"); - if ($assoc) { - $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE); - } - else { - $json = new Services_JSON; - } - return $json->decode($content); - } -} -if (!function_exists('json_encode')) { - function json_encode($content) { - require_once(dirname(__FILE__) . "/Services_JSON.php"); - if ($assoc) { - $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE); - } - else { - $json = new Services_JSON; - } - return $json->encode($content); - } -} - -?> \ No newline at end of file diff --git a/main/mashape/json/Services_JSON.php b/main/mashape/json/Services_JSON.php deleted file mode 100755 index 7795908..0000000 --- a/main/mashape/json/Services_JSON.php +++ /dev/null @@ -1,806 +0,0 @@ - - * @author Matt Knapp - * @author Brett Stimmerman - * @copyright 2005 Michal Migurski - * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $ - * @license http://www.opensource.org/licenses/bsd-license.php - * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 - */ - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_SLICE', 1); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_STR', 2); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_ARR', 3); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_OBJ', 4); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_CMT', 5); - -/** - * Behavior switch for Services_JSON::decode() - */ -define('SERVICES_JSON_LOOSE_TYPE', 16); - -/** - * Behavior switch for Services_JSON::decode() - */ -define('SERVICES_JSON_SUPPRESS_ERRORS', 32); - -/** - * Converts to and from JSON format. - * - * Brief example of use: - * - * - * // create a new instance of Services_JSON - * $json = new Services_JSON(); - * - * // convert a complexe value to JSON notation, and send it to the browser - * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4))); - * $output = $json->encode($value); - * - * print($output); - * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]] - * - * // accept incoming POST data, assumed to be in JSON notation - * $input = file_get_contents('php://input', 1000000); - * $value = $json->decode($input); - * - */ -class Services_JSON -{ - /** - * constructs a new JSON instance - * - * @param int $use object behavior flags; combine with boolean-OR - * - * possible values: - * - SERVICES_JSON_LOOSE_TYPE: loose typing. - * "{...}" syntax creates associative arrays - * instead of objects in decode(). - * - SERVICES_JSON_SUPPRESS_ERRORS: error suppression. - * Values which can't be encoded (e.g. resources) - * appear as NULL instead of throwing errors. - * By default, a deeply-nested resource will - * bubble up with an error, so all return values - * from encode() should be checked with isError() - */ - function Services_JSON($use = 0) - { - $this->use = $use; - } - - /** - * convert a string from one UTF-16 char to one UTF-8 char - * - * Normally should be handled by mb_convert_encoding, but - * provides a slower PHP-only method for installations - * that lack the multibye string extension. - * - * @param string $utf16 UTF-16 character - * @return string UTF-8 character - * @access private - */ - function utf162utf8($utf16) - { - // oh please oh please oh please oh please oh please - if(function_exists('mb_convert_encoding')) { - return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); - } - - $bytes = (ord($utf16{0}) << 8) | ord($utf16{1}); - - switch(true) { - case ((0x7F & $bytes) == $bytes): - // this case should never be reached, because we are in ASCII range - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0x7F & $bytes); - - case (0x07FF & $bytes) == $bytes: - // return a 2-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0xC0 | (($bytes >> 6) & 0x1F)) - . chr(0x80 | ($bytes & 0x3F)); - - case (0xFFFF & $bytes) == $bytes: - // return a 3-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0xE0 | (($bytes >> 12) & 0x0F)) - . chr(0x80 | (($bytes >> 6) & 0x3F)) - . chr(0x80 | ($bytes & 0x3F)); - } - - // ignoring UTF-32 for now, sorry - return ''; - } - - /** - * convert a string from one UTF-8 char to one UTF-16 char - * - * Normally should be handled by mb_convert_encoding, but - * provides a slower PHP-only method for installations - * that lack the multibye string extension. - * - * @param string $utf8 UTF-8 character - * @return string UTF-16 character - * @access private - */ - function utf82utf16($utf8) - { - // oh please oh please oh please oh please oh please - if(function_exists('mb_convert_encoding')) { - return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); - } - - switch(strlen($utf8)) { - case 1: - // this case should never be reached, because we are in ASCII range - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return $utf8; - - case 2: - // return a UTF-16 character from a 2-byte UTF-8 char - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0x07 & (ord($utf8{0}) >> 2)) - . chr((0xC0 & (ord($utf8{0}) << 6)) - | (0x3F & ord($utf8{1}))); - - case 3: - // return a UTF-16 character from a 3-byte UTF-8 char - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr((0xF0 & (ord($utf8{0}) << 4)) - | (0x0F & (ord($utf8{1}) >> 2))) - . chr((0xC0 & (ord($utf8{1}) << 6)) - | (0x7F & ord($utf8{2}))); - } - - // ignoring UTF-32 for now, sorry - return ''; - } - - /** - * encodes an arbitrary variable into JSON format - * - * @param mixed $var any number, boolean, string, array, or object to be encoded. - * see argument 1 to Services_JSON() above for array-parsing behavior. - * if var is a strng, note that encode() always expects it - * to be in ASCII or UTF-8 format! - * - * @return mixed JSON string representation of input var or an error if a problem occurs - * @access public - */ - function encode($var) - { - switch (gettype($var)) { - case 'boolean': - return $var ? 'true' : 'false'; - - case 'NULL': - return 'null'; - - case 'integer': - return (int) $var; - - case 'double': - case 'float': - return (float) $var; - - case 'string': - // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT - $ascii = ''; - $strlen_var = strlen($var); - - /* - * Iterate over every character in the string, - * escaping with a slash or encoding to UTF-8 where necessary - */ - for ($c = 0; $c < $strlen_var; ++$c) { - - $ord_var_c = ord($var{$c}); - - switch (true) { - case $ord_var_c == 0x08: - $ascii .= '\b'; - break; - case $ord_var_c == 0x09: - $ascii .= '\t'; - break; - case $ord_var_c == 0x0A: - $ascii .= '\n'; - break; - case $ord_var_c == 0x0C: - $ascii .= '\f'; - break; - case $ord_var_c == 0x0D: - $ascii .= '\r'; - break; - - case $ord_var_c == 0x22: - case $ord_var_c == 0x2F: - case $ord_var_c == 0x5C: - // double quote, slash, slosh - $ascii .= '\\'.$var{$c}; - break; - - case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): - // characters U-00000000 - U-0000007F (same as ASCII) - $ascii .= $var{$c}; - break; - - case (($ord_var_c & 0xE0) == 0xC0): - // characters U-00000080 - U-000007FF, mask 110XXXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, ord($var{$c + 1})); - $c += 1; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xF0) == 0xE0): - // characters U-00000800 - U-0000FFFF, mask 1110XXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2})); - $c += 2; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xF8) == 0xF0): - // characters U-00010000 - U-001FFFFF, mask 11110XXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3})); - $c += 3; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xFC) == 0xF8): - // characters U-00200000 - U-03FFFFFF, mask 111110XX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3}), - ord($var{$c + 4})); - $c += 4; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xFE) == 0xFC): - // characters U-04000000 - U-7FFFFFFF, mask 1111110X - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3}), - ord($var{$c + 4}), - ord($var{$c + 5})); - $c += 5; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - } - } - - return '"'.$ascii.'"'; - - case 'array': - /* - * As per JSON spec if any array key is not an integer - * we must treat the the whole array as an object. We - * also try to catch a sparsely populated associative - * array with numeric keys here because some JS engines - * will create an array with empty indexes up to - * max_index which can cause memory issues and because - * the keys, which may be relevant, will be remapped - * otherwise. - * - * As per the ECMA and JSON specification an object may - * have any string as a property. Unfortunately due to - * a hole in the ECMA specification if the key is a - * ECMA reserved word or starts with a digit the - * parameter is only accessible using ECMAScript's - * bracket notation. - */ - - // treat as a JSON object - if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { - $properties = array_map(array($this, 'name_value'), - array_keys($var), - array_values($var)); - - foreach($properties as $property) { - if(Services_JSON::isError($property)) { - return $property; - } - } - - return '{' . join(',', $properties) . '}'; - } - - // treat it like a regular array - $elements = array_map(array($this, 'encode'), $var); - - foreach($elements as $element) { - if(Services_JSON::isError($element)) { - return $element; - } - } - - return '[' . join(',', $elements) . ']'; - - case 'object': - $vars = get_object_vars($var); - - $properties = array_map(array($this, 'name_value'), - array_keys($vars), - array_values($vars)); - - foreach($properties as $property) { - if(Services_JSON::isError($property)) { - return $property; - } - } - - return '{' . join(',', $properties) . '}'; - - default: - return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS) - ? 'null' - : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string"); - } - } - - /** - * array-walking function for use in generating JSON-formatted name-value pairs - * - * @param string $name name of key to use - * @param mixed $value reference to an array element to be encoded - * - * @return string JSON-formatted name-value pair, like '"name":value' - * @access private - */ - function name_value($name, $value) - { - $encoded_value = $this->encode($value); - - if(Services_JSON::isError($encoded_value)) { - return $encoded_value; - } - - return $this->encode(strval($name)) . ':' . $encoded_value; - } - - /** - * reduce a string by removing leading and trailing comments and whitespace - * - * @param $str string string value to strip of comments and whitespace - * - * @return string string value stripped of comments and whitespace - * @access private - */ - function reduce_string($str) - { - $str = preg_replace(array( - - // eliminate single line comments in '// ...' form - '#^\s*//(.+)$#m', - - // eliminate multi-line comments in '/* ... */' form, at start of string - '#^\s*/\*(.+)\*/#Us', - - // eliminate multi-line comments in '/* ... */' form, at end of string - '#/\*(.+)\*/\s*$#Us' - - ), '', $str); - - // eliminate extraneous space - return trim($str); - } - - /** - * decodes a JSON string into appropriate variable - * - * @param string $str JSON-formatted string - * - * @return mixed number, boolean, string, array, or object - * corresponding to given JSON input string. - * See argument 1 to Services_JSON() above for object-output behavior. - * Note that decode() always returns strings - * in ASCII or UTF-8 format! - * @access public - */ - function decode($str) - { - $str = $this->reduce_string($str); - - switch (strtolower($str)) { - case 'true': - return true; - - case 'false': - return false; - - case 'null': - return null; - - default: - $m = array(); - - if (is_numeric($str)) { - // Lookie-loo, it's a number - - // This would work on its own, but I'm trying to be - // good about returning integers where appropriate: - // return (float)$str; - - // Return float or int, as appropriate - return ((float)$str == (integer)$str) - ? (integer)$str - : (float)$str; - - } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) { - // STRINGS RETURNED IN UTF-8 FORMAT - $delim = substr($str, 0, 1); - $chrs = substr($str, 1, -1); - $utf8 = ''; - $strlen_chrs = strlen($chrs); - - for ($c = 0; $c < $strlen_chrs; ++$c) { - - $substr_chrs_c_2 = substr($chrs, $c, 2); - $ord_chrs_c = ord($chrs{$c}); - - switch (true) { - case $substr_chrs_c_2 == '\b': - $utf8 .= chr(0x08); - ++$c; - break; - case $substr_chrs_c_2 == '\t': - $utf8 .= chr(0x09); - ++$c; - break; - case $substr_chrs_c_2 == '\n': - $utf8 .= chr(0x0A); - ++$c; - break; - case $substr_chrs_c_2 == '\f': - $utf8 .= chr(0x0C); - ++$c; - break; - case $substr_chrs_c_2 == '\r': - $utf8 .= chr(0x0D); - ++$c; - break; - - case $substr_chrs_c_2 == '\\"': - case $substr_chrs_c_2 == '\\\'': - case $substr_chrs_c_2 == '\\\\': - case $substr_chrs_c_2 == '\\/': - if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || - ($delim == "'" && $substr_chrs_c_2 != '\\"')) { - $utf8 .= $chrs{++$c}; - } - break; - - case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)): - // single, escaped unicode character - $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2))) - . chr(hexdec(substr($chrs, ($c + 4), 2))); - $utf8 .= $this->utf162utf8($utf16); - $c += 5; - break; - - case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F): - $utf8 .= $chrs{$c}; - break; - - case ($ord_chrs_c & 0xE0) == 0xC0: - // characters U-00000080 - U-000007FF, mask 110XXXXX - //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 2); - ++$c; - break; - - case ($ord_chrs_c & 0xF0) == 0xE0: - // characters U-00000800 - U-0000FFFF, mask 1110XXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 3); - $c += 2; - break; - - case ($ord_chrs_c & 0xF8) == 0xF0: - // characters U-00010000 - U-001FFFFF, mask 11110XXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 4); - $c += 3; - break; - - case ($ord_chrs_c & 0xFC) == 0xF8: - // characters U-00200000 - U-03FFFFFF, mask 111110XX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 5); - $c += 4; - break; - - case ($ord_chrs_c & 0xFE) == 0xFC: - // characters U-04000000 - U-7FFFFFFF, mask 1111110X - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 6); - $c += 5; - break; - - } - - } - - return $utf8; - - } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { - // array, or object notation - - if ($str{0} == '[') { - $stk = array(SERVICES_JSON_IN_ARR); - $arr = array(); - } else { - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $stk = array(SERVICES_JSON_IN_OBJ); - $obj = array(); - } else { - $stk = array(SERVICES_JSON_IN_OBJ); - $obj = new stdClass(); - } - } - - array_push($stk, array('what' => SERVICES_JSON_SLICE, - 'where' => 0, - 'delim' => false)); - - $chrs = substr($str, 1, -1); - $chrs = $this->reduce_string($chrs); - - if ($chrs == '') { - if (reset($stk) == SERVICES_JSON_IN_ARR) { - return $arr; - - } else { - return $obj; - - } - } - - //print("\nparsing {$chrs}\n"); - - $strlen_chrs = strlen($chrs); - - for ($c = 0; $c <= $strlen_chrs; ++$c) { - - $top = end($stk); - $substr_chrs_c_2 = substr($chrs, $c, 2); - - if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) { - // found a comma that is not inside a string, array, etc., - // OR we've reached the end of the character list - $slice = substr($chrs, $top['where'], ($c - $top['where'])); - array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false)); - //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - if (reset($stk) == SERVICES_JSON_IN_ARR) { - // we are in an array, so just push an element onto the stack - array_push($arr, $this->decode($slice)); - - } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { - // we are in an object, so figure - // out the property name and set an - // element in an associative array, - // for now - $parts = array(); - - if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { - // "name":value pair - $key = $this->decode($parts[1]); - $val = $this->decode($parts[2]); - - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $obj[$key] = $val; - } else { - $obj->$key = $val; - } - } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { - // name:value pair, where name is unquoted - $key = $parts[1]; - $val = $this->decode($parts[2]); - - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $obj[$key] = $val; - } else { - $obj->$key = $val; - } - } - - } - - } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) { - // found a quote, and we are not inside a string - array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c})); - //print("Found start of string at {$c}\n"); - - } elseif (($chrs{$c} == $top['delim']) && - ($top['what'] == SERVICES_JSON_IN_STR) && - ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) { - // found a quote, we're in a string, and it's not escaped - // we know that it's not escaped becase there is _not_ an - // odd number of backslashes at the end of the string so far - array_pop($stk); - //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n"); - - } elseif (($chrs{$c} == '[') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a left-bracket, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false)); - //print("Found start of array at {$c}\n"); - - } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) { - // found a right-bracket, and we're in an array - array_pop($stk); - //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } elseif (($chrs{$c} == '{') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a left-brace, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false)); - //print("Found start of object at {$c}\n"); - - } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) { - // found a right-brace, and we're in an object - array_pop($stk); - //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } elseif (($substr_chrs_c_2 == '/*') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a comment start, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false)); - $c++; - //print("Found start of comment at {$c}\n"); - - } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) { - // found a comment end, and we're in one now - array_pop($stk); - $c++; - - for ($i = $top['where']; $i <= $c; ++$i) - $chrs = substr_replace($chrs, ' ', $i, 1); - - //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } - - } - - if (reset($stk) == SERVICES_JSON_IN_ARR) { - return $arr; - - } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { - return $obj; - - } - - } - } - } - - /** - * @todo Ultimately, this should just call PEAR::isError() - */ - function isError($data, $code = null) - { - if (class_exists('pear')) { - return PEAR::isError($data, $code); - } elseif (is_object($data) && (get_class($data) == 'services_json_error' || - is_subclass_of($data, 'services_json_error'))) { - return true; - } - - return false; - } -} - -if (class_exists('PEAR_Error')) { - - class Services_JSON_Error extends PEAR_Error - { - function Services_JSON_Error($message = 'unknown error', $code = null, - $mode = null, $options = null, $userinfo = null) - { - parent::PEAR_Error($message, $code, $mode, $options, $userinfo); - } - } - -} else { - - /** - * @todo Ultimately, this class shall be descended from PEAR_Error - */ - class Services_JSON_Error - { - function Services_JSON_Error($message = 'unknown error', $code = null, - $mode = null, $options = null, $userinfo = null) - { - - } - } - -} - -?> \ No newline at end of file diff --git a/test/bootstrap.php b/test/bootstrap.php deleted file mode 100644 index 1df2e56..0000000 --- a/test/bootstrap.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/test/mashape/http/HttpClientTest.php b/test/mashape/http/HttpClientTest.php deleted file mode 100644 index f387d2e..0000000 --- a/test/mashape/http/HttpClientTest.php +++ /dev/null @@ -1,54 +0,0 @@ -. - * - * - * The author of this software is Mashape, Inc. - * For any question or feedback please contact us at: support@mashape.com - * - */ - -require_once(MASHAPE_CLIENT_LIBRAY_PATH . "/http/HttpClient.php"); - -class HttpClientTest extends PHPUnit_Framework_TestCase { - - function testDoRequest() { - - try { - HttpClient::doRequest("ciao", "http://www.ciao.com", null, null); - $this->assertFalse(true); - } catch (MashapeClientException $e) { - $this->assertEquals(1003, $e->getCode()); - } - - try { - HttpClient::doRequest(HttpMethod::GET, "http://www.google.com", null, null); - $this->assertFalse(true); - } catch (MashapeClientException $e) { - $this->assertEquals(2000, $e->getCode()); - } - - // TODO this error code doesn't exist - //$response = HttpClient::doRequest(HttpMethod::POST, "https://api.mashape.com/requestToken", null, null); - //$this->assertEquals(2001, $response->body->errors[0]->code); - } - -} - -?> diff --git a/test/mashape/http/TokenUtilTest.php b/test/mashape/http/TokenUtilTest.php deleted file mode 100644 index 73f818f..0000000 --- a/test/mashape/http/TokenUtilTest.php +++ /dev/null @@ -1,56 +0,0 @@ -. - * - * - * The author of this software is Mashape, Inc. - * For any question or feedback please contact us at: support@mashape.com - * - */ - -require_once(MASHAPE_CLIENT_LIBRAY_PATH . "/http/TokenUtil.php"); - -class TokenUtilTest extends PHPUnit_Framework_TestCase { - - function testRequestToken() { - try { - TokenUtil::requestToken(null); - $this->assertFalse(true); - } catch (MashapeClientException $e) { - $this->assertEquals(2001, $e->getCode()); - } - - try { - TokenUtil::requestToken(""); - $this->assertFalse(true); - } catch (MashapeClientException $e) { - $this->assertEquals(2001, $e->getCode()); - } - - try { - TokenUtil::requestToken("bla"); - $this->assertFalse(true); - } catch (MashapeClientException $e) { - $this->assertEquals(2001, $e->getCode()); - } - } - -} - -?> \ No newline at end of file diff --git a/test/mashape/http/UrlUtilsTest.php b/test/mashape/http/UrlUtilsTest.php deleted file mode 100644 index 725b647..0000000 --- a/test/mashape/http/UrlUtilsTest.php +++ /dev/null @@ -1,171 +0,0 @@ -. - * - * - * The author of this software is Mashape, Inc. - * For any question or feedback please contact us at: support@mashape.com - * - */ - -require_once(MASHAPE_CLIENT_LIBRAY_PATH . "/http/UrlUtils.php"); - -class UrlUtilsTest extends PHPUnit_Framework_TestCase { - - function testPrepareRequest() { - $url = "http://www.ciao.com"; - $parameters = null; - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com"; - $parameters = array(); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}"; - $parameters = null; - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}"; - $parameters = null; - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}"; - $parameters = array("id"=>12); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/12", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}"; - $parameters = array("id"=>12, "name"=>"tom"); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/12?name=tom", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}&opt=1"; - $parameters = array("id"=>12, "name"=>"tom"); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/12?name=tom&opt=1", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}&opt=1"; - $parameters = array("id"=>12, "name"=>"tom jerry"); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/12?name=tom%20jerry&opt=1", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}&opt=1&nick={nick}"; - $parameters = array("id"=>12, "name"=>"tom jerry"); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/12?name=tom%20jerry&opt=1", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}&opt={opt}&nick={nick}"; - $parameters = array("id"=>12, "name"=>"tom jerry", "nick"=>"sinz"); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/12?name=tom%20jerry&nick=sinz", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}&opt={opt}&nick={nick}"; - $parameters = array("id"=>12, "name"=>"tom jerry", "opt"=>"yes", "nick"=>"sinz"); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/12?name=tom%20jerry&opt=yes&nick=sinz", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}&opt={opt}&nick={nick}"; - $parameters = array("id"=>12, "opt"=>"yes", "nick"=>"sinz"); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/12?opt=yes&nick=sinz", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}&opt={opt}&nick={nick}"; - $parameters = array("id"=>12, "opt"=>"yes"); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/12?opt=yes", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}&opt={opt}&nick={nick}"; - $parameters = array("id"=>12, "nick"=>"sinz"); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/12?nick=sinz", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}&opt={opt}&nick={nick}"; - $parameters = array("id"=>12); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/12", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}&opt={opt}&nick={nick}"; - $parameters = array("id"=>12, "pippo"=>null); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/12", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}&opt={opt}&nick=some%20nick"; - $parameters = array("id"=>"ciao marco", "name"=>"ciao pippo", "opt"=>"2"); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/ciao%20marco?name=ciao%20pippo&opt=2&nick=some%20nick", $url); - $this->assertEquals(array(), $parameters); - - $url = "http://www.ciao.com/{id}?name={name}&opt={opt}&nick=some%20nick"; - $parameters = array("id"=>"ciao marco", "name"=>"ciao pippo", "opt"=>"{this is opt}"); - UrlUtils::prepareRequest($url, $parameters); - $this->assertEquals("http://www.ciao.com/ciao%20marco?name=ciao%20pippo&opt=%7Bthis%20is%20opt%7D&nick=some%20nick", $url); - $this->assertEquals(array(), $parameters); - } - - // TODO what? I think these tests are really old... - //function testAddClientParameters() { - //$url = "http://www.ciao.com"; - //$parameters = array(); - //UrlUtils::addClientParameters($url, $parameters, null); - //$this->assertEquals("http://www.ciao.com?_token={_token}&_language={_language}&_version={_version}", $url); - //$this->assertEquals(array("_token"=>null, "_language"=>"PHP", "_version"=>"V03"), $parameters); - - //$url = "http://www.ciao.com?name={name}"; - //$parameters = array("name"=>"Marco"); - //UrlUtils::addClientParameters($url, $parameters, null); - //$this->assertEquals("http://www.ciao.com?name={name}&_token={_token}&_language={_language}&_version={_version}", $url); - //$this->assertEquals(array("name"=>"Marco", "_token"=>null, "_language"=>"PHP", "_version"=>"V03"), $parameters); - - //$url = "http://www.ciao.com?name={name}"; - //$parameters = array("name"=>"Marco"); - //UrlUtils::addClientParameters($url, $parameters, "a-random-token"); - //$this->assertEquals("http://www.ciao.com?name={name}&_token={_token}&_language={_language}&_version={_version}", $url); - //$this->assertEquals(array("name"=>"Marco", "_token"=>"a-random-token", "_language"=>"PHP", "_version"=>"V03"), $parameters); - - //$url = "http://www.ciao.com?name={name}"; - //$parameters = array("name"=>"Marco"); - //UrlUtils::addClientParameters($url, $parameters, "a-random-token"); - //UrlUtils::prepareRequest($url, $parameters); - //$this->assertEquals("http://www.ciao.com?name=Marco&_token=a-random-token&_language=PHP&_version=V03", $url); - //$this->assertEquals(array("name"=>"Marco", "_token"=>"a-random-token", "_language"=>"PHP", "_version"=>"V03"), $parameters); - //} - -} - -?> diff --git a/test/phpunit.CI.xml b/test/phpunit.CI.xml deleted file mode 100644 index 520d78d..0000000 --- a/test/phpunit.CI.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - ./mashape - - - diff --git a/test/phpunit.xml b/test/phpunit.xml deleted file mode 100644 index 2d2f471..0000000 --- a/test/phpunit.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - ./mashape - - -