public function testKeepRunningOnDamage()
 {
     $messages = array();
     for ($i = 0; $i < 5; $i++) {
         $message = array('gateway' => 'test', 'date' => time(), 'order_id' => mt_rand(), 'box' => 'thing' . $i, 'creepiness' => mt_rand());
         $messages[] = $message;
         $this->queue->push($message);
     }
     $consumer = new TestingQueueConsumer('test', 0, 3);
     $consumer->exception = new Exception('Kaboom!');
     $count = 0;
     try {
         $count = $consumer->dequeueMessages();
     } catch (Exception $ex) {
         $this->fail('Exception should not have bubbled up: ' . $ex->getMessage());
     }
     $this->assertEquals(3, $count, 'dequeueMessages returned wrong count');
     $this->assertEquals(3, count($consumer->processed), 'Called callback wrong number of times');
     for ($i = 0; $i < 3; $i++) {
         $this->assertEquals($messages[$i], $consumer->processed[$i], 'Message mutated');
         $damaged = $this->getDamagedQueueMessage($messages[$i]);
         $this->assertEquals($messages[$i], $damaged, 'Should move message to damaged queue when exception is thrown');
     }
     $this->assertEquals($messages[3], $this->queue->pop(), 'message 4 should be at the head of the queue');
 }