/** * Finds tokens * * @param \PHP\Manipulator\Token $token * @param \PHP\Manipulator\TokenContainer $container * @param mixed $params * @return \PHP\Manipulator\TokenFinder\Result */ public function find(Token $token, TokenContainer $container, $params = null) { if (!$this->isType($token, T_SWITCH)) { throw new \Exception('Starttoken is not T_SWITCH'); } $result = new Result(); $iterator = $container->getIterator(); $iterator->seekToToken($token); $level = 0; $inside = false; while ($iterator->valid()) { $token = $iterator->current(); if ($this->isOpeningCurlyBrace($token)) { if (0 === $level) { $inside = true; } $level++; } if ($this->isClosingCurlyBrace($token)) { $level--; } $result->addToken($token); if ($inside && 0 === $level) { break; } $iterator->next(); } return $result; }
/** * Finds tokens * * @param \PHP\Manipulator\Token $token * @param \PHP\Manipulator\TokenContainer $container * @param mixed $params * @return \PHP\Manipulator\TokenFinder\Result */ public function find(Token $token, TokenContainer $container, $params = null) { if (!$this->isType($token, T_FUNCTION)) { throw new \Exception('Starttoken is not T_FUNCTION'); } $iterator = $container->getIterator(); $iterator->seekToToken($token); if ($this->_includeMethodProperties($params) && !$this->_includePhpDoc($params)) { $this->_seekToMethodProperties($iterator); } if ($this->_includePhpDoc($params)) { $this->_seekToPhpdoc($iterator, $params); } $this->_inside = false; $this->_level = 0; $this->_end = false; $result = new Result(); while ($iterator->valid() && false === $this->_end) { $result->addToken($iterator->current()); $this->_checkLevel($iterator); $this->_checkBreak($iterator); $iterator->next(); } return $result; }
/** * @param \PHP\Manipulator\Tokenfinder\Result $other * @param string $description Additional information about the test * @param bool $returnResult Whether to return a result or throw an exception * @return boolean */ public function evaluate($other, $description = '', $returnResult = FALSE) { if (!$other instanceof Result) { throw \PHPUnit_Util_InvalidArgumentHelper::factory(1, 'PHP\\Manipulator\\Tokenfinder\\Result'); } $expectedResultTokens = $this->_expectedResult->getTokens(); $actualResultTokens = $other->getTokens(); if (count($expectedResultTokens) != count($actualResultTokens)) { $this->_cause = 'length'; if ($returnResult) { return FALSE; } $this->fail($other, $description); } foreach ($expectedResultTokens as $key => $token) { if ($token !== $actualResultTokens[$key]) { $this->_cause = 'missmatch of token: ' . $key; if ($returnResult) { return FALSE; } $this->fail($other, $description); } } return true; }
/** * Get Result From Container * * @param \PHP\Manipulator\TokenContainer $container * @param integer $start * @param integer $end * @return \PHP\Manipulator\TokenFinder\Result */ public function getResultFromContainer($container, $start, $end) { $result = new Result(); for ($index = $start; $index <= $end; $index++) { $result->addToken($container[$index]); } return $result; }
/** * @return array */ public function findProvider() { $data = array(); $path = '/TokenFinder/__classname__/'; #0 $data[] = array($container = $this->getContainerFromFixture($path . 'input0.php'), $container[1], array(), Result::factory(array($container[1], $container[2], $container[3], $container[4]))); return $data; }
/** * Finds tokens * * @param \PHP\Manipulator\Token $token * @param \PHP\Manipulator\TokenContainer $container * @param mixed $params * @return \PHP\Manipulator\TokenFinder\Result */ public function find(Token $token, TokenContainer $container, $params = null) { $allowedTokens = array(T_INCLUDE, T_INCLUDE_ONCE, T_REQUIRE, T_REQUIRE_ONCE); if (!$this->isType($token, $allowedTokens)) { $message = 'Start-token is not one of T_INCLUDE, T_INCLUDE_ONCE, T_REQUIRE, T_REQUIRE_ONCE'; throw new \Exception($message); } $result = new Result(); $iterator = $container->getIterator(); $iterator->seekToToken($token); while ($iterator->valid()) { $token = $iterator->current(); $result->addToken($token); if ($this->isSemicolon($token)) { break; } $iterator->next(); } return $result; }
/** * @return array */ public function findProvider() { $data = array(); #0 $data[] = array($container = new TokenContainer('<?php include "foo.php"; ?>'), $container[1], array(), Result::factory(array($container[1], $container[2], $container[3], $container[4]))); #1 $data[] = array($container = new TokenContainer('<?php include_once "foo.php"; ?>'), $container[1], array(), Result::factory(array($container[1], $container[2], $container[3], $container[4]))); #2 $data[] = array($container = new TokenContainer('<?php require "foo.php"; ?>'), $container[1], array(), Result::factory(array($container[1], $container[2], $container[3], $container[4]))); #3 $data[] = array($container = new TokenContainer('<?php require_once "foo.php"; ?>'), $container[1], array(), Result::factory(array($container[1], $container[2], $container[3], $container[4]))); return $data; }
/** * @covers \Tests\Constraint\ResultsMatch::failureDescription */ public function testFailAndFailureDescription() { $expected = new Result(); $other = Result::factory(array(new Token('Foo'))); $resultsMatch = new ResultsMatch($expected); $message = 'Failed asserting that Results do not match: ' . PHP_EOL . 'Cause: length' . PHP_EOL . Util::compareResults($expected, $other) . '.'; try { $resultsMatch->evaluate($other, ''); $this->fail('no exception thrown'); } catch (\PHPUnit_Framework_ExpectationFailedException $e) { $this->assertEquals($message, $e->getMessage()); } }
/** * @covers \PHP\Manipulator\TokenFinder\Result::factory */ public function testFactoryWithNonEmptyArray() { $t1 = new Token('foo'); $t2 = new Token('baa'); $t3 = new Token('blub'); $result = Result::factory(array($t1, $t2, $t3)); $this->assertInstanceOf('PHP\\Manipulator\\TokenFinder\\Result', $result); $this->assertFalse($result->isEmpty()); $this->assertCount(3, $result); $this->assertSame($t1, $result->getFirstToken()); $this->assertSame($t3, $result->getLastToken()); $this->assertSame(array($t1, $t2, $t3), $result->getTokens()); }
/** * Compare two Results * * @param \PHP\Manipulator\Tokenfinder\Result $expectedResult * @param \PHP\Manipulator\Tokenfinder\Result $actualResult */ public static function compareResults(Result $expectedResult, Result $actualResult) { $expectedIterator = new \ArrayIterator($expectedResult->getTokens()); $actualIterator = new \ArrayIterator($actualResult->getTokens()); $values = array(); $longest = 0; while ($actualIterator->valid() || $expectedIterator->valid()) { $expected = ''; $actual = ''; if ($expectedIterator->valid()) { $expected = (string) self::dumpToken($expectedIterator->current(), false); } if ($actualIterator->valid()) { $actual = (string) self::dumpToken($actualIterator->current(), false); } $values[] = array('actual' => $actual, 'expected' => $expected, 'missmatch' => (bool) ($actualIterator->current() !== $expectedIterator->current())); if (strlen($actual) > $longest) { $longest = strlen($actual); } if (strlen($expected) > $longest) { $longest = strlen($expected); } $expectedIterator->next(); $actualIterator->next(); } $comparision = ' '; $comparision .= str_pad('expected (' . count($expectedResult) . ')', $longest + 2, ' ', STR_PAD_BOTH); $comparision .= ' | '; $comparision .= str_pad('actual(' . count($actualResult) . ')', $longest + 2, ' ', STR_PAD_BOTH); $comparision .= PHP_EOL; $comparision .= PHP_EOL; $i = 0; foreach ($values as $val) { if (true === $val['missmatch']) { $comparision .= '####### NEXT IS DIFFERENT ##' . PHP_EOL; } $comparision .= str_pad($i . ') ', 4, ' '); $comparision .= str_pad($val['expected'], $longest + 2, ' '); $comparision .= ' | '; $comparision .= str_pad($val['actual'], $longest + 2, ' '); $comparision .= PHP_EOL; $i++; } return $comparision; }
/** * @param array $tokens * @return \PHP\Manipulator\TokenFinder\Result */ public static function factory(array $tokens = array()) { $result = new Result(); foreach ($tokens as $token) { $result->addToken($token); } return $result; }
/** * @return array */ public function resultsCompareProvider() { $data = array(); $t1 = new Token('blub'); $t2 = new Token('bla'); # 0 $data[] = array(Result::factory(array($t1)), Result::factory(array($t1)), ' expected (1) | actual(1) ' . PHP_EOL . PHP_EOL . '0) [SIMPLE] | 4 | NULL | blub | [SIMPLE] | 4 | NULL | blub ' . PHP_EOL); # 1 $data[] = array(Result::factory(array()), Result::factory(array($t1)), ' expected (0) | actual(1) ' . PHP_EOL . PHP_EOL . '####### NEXT IS DIFFERENT ##' . PHP_EOL . '0) | [SIMPLE] | 4 | NULL | blub ' . PHP_EOL); # 2 $data[] = array(Result::factory(array($t1)), Result::factory(array()), ' expected (1) | actual(0) ' . PHP_EOL . PHP_EOL . '####### NEXT IS DIFFERENT ##' . PHP_EOL . '0) [SIMPLE] | 4 | NULL | blub | ' . PHP_EOL); # 3 $data[] = array(Result::factory(array($t1)), Result::factory(array($t1, $t2)), ' expected (1) | actual(2) ' . PHP_EOL . PHP_EOL . '0) [SIMPLE] | 4 | NULL | blub | [SIMPLE] | 4 | NULL | blub ' . PHP_EOL . '####### NEXT IS DIFFERENT ##' . PHP_EOL . '1) | [SIMPLE] | 3 | NULL | bla ' . PHP_EOL); return $data; }