/** * 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::getPreviousToken */ public function testGetPreviousToken() { $token1 = Token::factory('Token1'); $token2 = Token::factory('Token2'); $token3 = Token::factory('Token3'); $token4 = Token::factory('Token4'); $container = new TokenContainer(); $container[] = $token1; $container[] = $token2; $container[] = $token3; $this->assertSame($token1, $container->getPreviousToken($token2), 'Wrong token'); $this->assertSame($token2, $container->getPreviousToken($token3), 'Wrong token'); $this->assertNull($container->getPreviousToken($token1), 'Found Token before first token'); $this->assertNull($container->getPreviousToken($token4), 'Found Token which could not be found'); }