/** * Run Action * * @param \PHP\Manipulator\TokenContainer $container */ public function run(TokenContainer $container) { $this->_container = $container; $iterator = $container->getIterator(); $lastElse = null; $noOtherTokens = true; while ($iterator->valid()) { $token = $iterator->current(); if ($this->isType($token, T_ELSE)) { $lastElse = $token; $noOtherTokens = true; } if (null !== $lastElse && !$this->_isAllowedTokenInsideEmptyElse($token)) { $noOtherTokens = false; } if ($this->_isEndElse($token) && true === $noOtherTokens && null !== $lastElse) { $start = $lastElse; $end = $token; $previous = $container->getPreviousToken($start); if ($this->isType($end, T_ENDIF)) { $end = $container->getPreviousToken($end); } $container->removeTokensFromTo($start, $end); $iterator->update($previous); $lastElse = null; } $iterator->next(); } $container->retokenize(); }
/** * @covers \PHP\Manipulator\TokenContainer::removeTokensFromTo */ public function testRemoveTokensFromTo() { $t1 = Token::factory('Token1'); $t2 = Token::factory('Token2'); $t3 = Token::factory('Token3'); $t4 = Token::factory('Token4'); $t5 = Token::factory('Token5'); $container = new TokenContainer(array($t1, $t2, $t3, $t4, $t5)); $container->removeTokensFromTo($t2, $t4); $array = $container->toArray(); $this->assertCount(2, $array); $this->assertContains($t1, $array); $this->assertContains($t5, $array); }