. */ /** * Provides a means for Expectations to verify they are called in the correct order. * This allows Invocations to be forced in a particular order. * @author Chris Corbyn * @package Yay */ class Yay_SimpleSequence implements Yay_Sequence { /** * The name of this sequence. * @var string * @access private */ private $_name; /** * The list of sequence IDs expected. * @var array * @access private */ private $_sequenceIds = array(); /** * An internal sequence counter. * @var int * @access private */ private $_counter = 0; /** * The current position in the sequence. * @var int * @access private */ private $_currentId = null; /** * Create a new Sequence with $name. * @param string $name */ public function __construct($name) { $this->_name = $name; } /** * Ask for a new Sequence Id and register the new sequence. * @return int $id */ public function requestSequenceId() { $id = $this->_counter++; $this->_sequenceIds[] = $id; return $id; } /** * Check if the sequence has progressed far enough for this sequence ID to be used. * @param int $id * @return boolean */ public function isInSequence($sequenceId) { if ($this->_currentId === $sequenceId) { $inSequence = true; } elseif (current($this->_sequenceIds) === $sequenceId) { $this->_currentId = array_shift($this->_sequenceIds); $inSequence = true; } else { $inSequence = false; } return $inSequence; } /** * Write a description of this self describing object to Description. * @param Yay_Description $description */ public function describeTo(Yay_Description $description) { $description->appendText(sprintf(' sequence %s;', $this->_name)); } }