public function testAppend()
{
$iterator = new tokenizer\iterator();
$this->assert->variable($iterator->key())->isNull()->variable($iterator->current())->isNull()->object($iterator->append($token1 = new tokenizer\token(uniqid())))->isIdenticalTo($iterator)->integer($iterator->key())->isZero()->object($iterator->current())->isIdenticalTo($token1);
$iterator = new tokenizer\iterator();
$innerIterator = new tokenizer\iterator();
$innerIterator->append($token1 = new tokenizer\token(uniqid()))->append($token2 = new tokenizer\token(uniqid()));
$this->assert->variable($iterator->key())->isNull()->variable($iterator->current())->isNull()->object($iterator->append($innerIterator))->isIdenticalTo($iterator)->integer($iterator->key())->isZero()->object($iterator->current())->isIdenticalTo($token1);
$iterator->end()->next();
$otherInnerIterator = new tokenizer\iterator();
$otherInnerIterator->append($token3 = new tokenizer\token(uniqid()))->append($token4 = new tokenizer\token(uniqid()))->end();
$this->assert->variable($iterator->key())->isNull()->variable($iterator->current())->isNull()->integer($otherInnerIterator->key())->isEqualTo(1)->object($otherInnerIterator->current())->isIdenticalTo($token4)->object($iterator->append($otherInnerIterator))->isIdenticalTo($iterator)->integer($iterator->key())->isEqualTo(2)->object($iterator->current())->isIdenticalTo($token3)->integer($otherInnerIterator->key())->isZero()->object($otherInnerIterator->current())->isIdenticalTo($token3);
$this->assert->exception(function () use($iterator, $innerIterator) {
$iterator->append($innerIterator);
})->isInstanceOf('mageekguy\\atoum\\exceptions\\runtime')->hasMessage('Unable to append value because it has already a parent');
$iterator = new tokenizer\iterator();
$iterator->skipValue($skipedValue = uniqid());
$innerIterator = new tokenizer\iterator();
$this->assert->object($iterator->append($innerIterator))->isIdenticalTo($iterator)->sizeOf($iterator)->isZero()->array($innerIterator->getSkipedValues())->isEmpty();
$iterator = new tokenizer\iterator();
$iterator->skipValue($skipedValue = uniqid());
$innerIterator = new tokenizer\iterator();
$innerIterator->skipValue($skipedValue);
$this->assert->object($iterator->append($innerIterator))->isIdenticalTo($iterator)->sizeOf($iterator)->isZero()->array($innerIterator->getSkipedValues())->isEqualTo(array($skipedValue));
$iterator = new tokenizer\iterator();
$iterator->skipValue($skipedValue1 = uniqid());
$iterator = new tokenizer\iterator();
$iterator->append($token1 = new tokenizer\token(uniqid()))->append($token2 = new tokenizer\token(uniqid()))->append($token3 = new tokenizer\token(uniqid()));
$this->assert->object($iterator->current())->isIdenticalTo($token1);
}