示例#1
0
 /**
  * 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;
 }
示例#2
0
 /**
  * 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;
 }
示例#3
0
 /**
  * @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;
 }
示例#4
0
 /**
  * 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());
     }
 }
示例#9
0
 /**
  * @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());
 }
示例#10
0
 /**
  * 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;
 }
示例#11
0
 /**
  * @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;
 }
示例#12
0
 /**
  * @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;
 }