From 5cb14929756c02ef466fb76bcae2c8a039eb2d9d Mon Sep 17 00:00:00 2001 From: Zach Borboa Date: Sat, 28 Dec 2013 20:48:32 -0800 Subject: [PATCH] Implement success, error, and complete callbacks --- Curl.class.php | 20 ++++++++++++++++---- tests/helper.inc.php | 1 + tests/run.php | 41 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 57 insertions(+), 5 deletions(-) diff --git a/Curl.class.php b/Curl.class.php index 2af9f22..c239cae 100644 --- a/Curl.class.php +++ b/Curl.class.php @@ -76,7 +76,7 @@ class Curl { else { $this->setopt(CURLOPT_URL, $this->_buildURL($url_mixed, $data)); $this->setopt(CURLOPT_HTTPGET, TRUE); - return $this->_exec($this); + return $this->_exec(); } } @@ -176,6 +176,18 @@ class Curl { return implode('&', $query); } + public function success($callback) { + $this->_success = $callback; + } + + public function error($callback) { + $this->_error = $callback; + } + + public function complete($callback) { + $this->_complete = $callback; + } + private function _buildURL($url, $data=array()) { return $url . (empty($data) ? '' : '?' . http_build_query($data)); } @@ -232,13 +244,13 @@ class Curl { $ch->error_message = $ch->curl_error ? $ch->curl_error_message : $ch->http_error_message; if (!$ch->error) { - $ch->_call($ch->_success); + $ch->_call($ch->_success, $ch); } else { - $ch->_call($ch->_error); + $ch->_call($ch->_error, $ch); } - $ch->_call($ch->_complete); + $ch->_call($ch->_complete, $ch); return $ch->error_code; } diff --git a/tests/helper.inc.php b/tests/helper.inc.php index 333031a..1492094 100644 --- a/tests/helper.inc.php +++ b/tests/helper.inc.php @@ -1,6 +1,7 @@ curl = new Curl(); diff --git a/tests/run.php b/tests/run.php index a4c5022..9e822f5 100644 --- a/tests/run.php +++ b/tests/run.php @@ -167,7 +167,7 @@ class CurlTest extends PHPUnit_Framework_TestCase { public function testError() { $test = new Test(); $test->curl->setOpt(CURLOPT_CONNECTTIMEOUT_MS, 2000); - $test->curl->get('http://1.2.3.4/'); + $test->curl->get(Test::ERROR_URL); $this->assertTrue($test->curl->error === TRUE); $this->assertTrue($test->curl->curl_error === TRUE); $this->assertTrue($test->curl->curl_error_code === CURLE_OPERATION_TIMEOUTED); @@ -297,4 +297,43 @@ class CurlTest extends PHPUnit_Framework_TestCase { $this->assertTrue(substr($curl->curls['1']->response, - $len) === '/b/?foo=bar'); $this->assertTrue(substr($curl->curls['2']->response, - $len) === '/c/?foo=bar'); } + + public function testSuccessCallback() { + $success_called = FALSE; + $error_called = FALSE; + $complete_called = FALSE; + + $curl = new Curl(); + $curl->setHeader('X-DEBUG-TEST', 'get'); + $curl->setOpt(CURLOPT_SSL_VERIFYPEER, FALSE); + $curl->setOpt(CURLOPT_SSL_VERIFYHOST, FALSE); + + $curl->success(function($instance) use (&$success_called, &$error_called, &$complete_called) { + PHPUnit_Framework_Assert::assertInstanceOf('Curl', $instance); + PHPUnit_Framework_Assert::assertFalse($success_called); + PHPUnit_Framework_Assert::assertFalse($error_called); + PHPUnit_Framework_Assert::assertFalse($complete_called); + $success_called = TRUE; + }); + $curl->error(function($instance) use (&$success_called, &$error_called, &$complete_called, &$curl) { + PHPUnit_Framework_Assert::assertInstanceOf('Curl', $instance); + PHPUnit_Framework_Assert::assertFalse($success_called); + PHPUnit_Framework_Assert::assertFalse($error_called); + PHPUnit_Framework_Assert::assertFalse($complete_called); + $error_called = TRUE; + }); + $curl->complete(function($instance) use (&$success_called, &$error_called, &$complete_called) { + PHPUnit_Framework_Assert::assertInstanceOf('Curl', $instance); + PHPUnit_Framework_Assert::assertTrue($success_called); + PHPUnit_Framework_Assert::assertFalse($error_called); + PHPUnit_Framework_Assert::assertFalse($complete_called); + $complete_called = TRUE; + }); + + $curl->get(Test::TEST_URL); + + $this->assertTrue($success_called); + $this->assertFalse($error_called); + $this->assertTrue($complete_called); + } }