From 8395dca859af7be35729e8c49c95c4d5b6966aac Mon Sep 17 00:00:00 2001 From: Michael Dowling <mtdowling@gmail.com> Date: Mon, 11 Apr 2011 17:01:35 -0500 Subject: [PATCH] [Http] Ensuring that cloned requests will attach observers to the cloned request using the same priority as the original request for each event observer. --- src/Guzzle/Http/Message/Request.php | 6 +++++- tests/Guzzle/Tests/Http/Message/RequestTest.php | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Guzzle/Http/Message/Request.php b/src/Guzzle/Http/Message/Request.php index d9b8a13f..be19ab0b 100644 --- a/src/Guzzle/Http/Message/Request.php +++ b/src/Guzzle/Http/Message/Request.php @@ -165,7 +165,11 @@ class Request extends AbstractMessage implements RequestInterface */ public function __clone() { - $this->eventManager = new EventManager($this, $this->eventManager->getAttached()); + $eventManager = new EventManager($this); + foreach ($this->eventManager->getAttached() as $o) { + $eventManager->attach($o, $this->eventManager->getPriority($o)); + } + $this->eventManager = $eventManager; $this->curlOptions = clone $this->curlOptions; $this->headers = clone $this->headers; $this->params = clone $this->params; diff --git a/tests/Guzzle/Tests/Http/Message/RequestTest.php b/tests/Guzzle/Tests/Http/Message/RequestTest.php index b8e7a102..058f0f70 100644 --- a/tests/Guzzle/Tests/Http/Message/RequestTest.php +++ b/tests/Guzzle/Tests/Http/Message/RequestTest.php @@ -495,7 +495,7 @@ class RequestTest extends \Guzzle\Tests\GuzzleTestCase public function testClonedRequestsUseNewInternalState() { $p = new ExponentialBackoffPlugin(); - $this->request->getEventManager()->attach($p); + $this->request->getEventManager()->attach($p, 100); $r = clone $this->request; @@ -508,6 +508,7 @@ class RequestTest extends \Guzzle\Tests\GuzzleTestCase $this->assertNull($r->getParams()->get('queued_response')); $this->assertTrue($this->request->getEventManager()->hasObserver($p)); + $this->assertEquals(100, $r->getEventManager()->getPriority($p)); $this->assertTrue($r->getEventManager()->hasObserver($p)); }