Mercurial > hg > isophonics-drupal-site
comparison vendor/nikic/php-parser/test/PhpParser/CodeParsingTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 5fb285c0d0e3 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace PhpParser; | |
4 | |
5 require_once __DIR__ . '/CodeTestAbstract.php'; | |
6 | |
7 class CodeParsingTest extends CodeTestAbstract | |
8 { | |
9 /** | |
10 * @dataProvider provideTestParse | |
11 */ | |
12 public function testParse($name, $code, $expected, $modeLine) { | |
13 if (null !== $modeLine) { | |
14 $modes = array_fill_keys(explode(',', $modeLine), true); | |
15 } else { | |
16 $modes = []; | |
17 } | |
18 | |
19 | |
20 $lexer = new Lexer\Emulative(array('usedAttributes' => array( | |
21 'startLine', 'endLine', 'startFilePos', 'endFilePos', 'comments' | |
22 ))); | |
23 $parser5 = new Parser\Php5($lexer); | |
24 $parser7 = new Parser\Php7($lexer); | |
25 | |
26 $dumpPositions = isset($modes['positions']); | |
27 $output5 = $this->getParseOutput($parser5, $code, $dumpPositions); | |
28 $output7 = $this->getParseOutput($parser7, $code, $dumpPositions); | |
29 | |
30 if (isset($modes['php5'])) { | |
31 $this->assertSame($expected, $output5, $name); | |
32 $this->assertNotSame($expected, $output7, $name); | |
33 } else if (isset($modes['php7'])) { | |
34 $this->assertNotSame($expected, $output5, $name); | |
35 $this->assertSame($expected, $output7, $name); | |
36 } else { | |
37 $this->assertSame($expected, $output5, $name); | |
38 $this->assertSame($expected, $output7, $name); | |
39 } | |
40 } | |
41 | |
42 private function getParseOutput(Parser $parser, $code, $dumpPositions) { | |
43 $errors = new ErrorHandler\Collecting; | |
44 $stmts = $parser->parse($code, $errors); | |
45 | |
46 $output = ''; | |
47 foreach ($errors->getErrors() as $error) { | |
48 $output .= $this->formatErrorMessage($error, $code) . "\n"; | |
49 } | |
50 | |
51 if (null !== $stmts) { | |
52 $dumper = new NodeDumper(['dumpComments' => true, 'dumpPositions' => $dumpPositions]); | |
53 $output .= $dumper->dump($stmts, $code); | |
54 } | |
55 | |
56 return canonicalize($output); | |
57 } | |
58 | |
59 public function provideTestParse() { | |
60 return $this->getTests(__DIR__ . '/../code/parser', 'test'); | |
61 } | |
62 | |
63 private function formatErrorMessage(Error $e, $code) { | |
64 if ($e->hasColumnInfo()) { | |
65 return $e->getMessageWithColumnInfo($code); | |
66 } else { | |
67 return $e->getMessage(); | |
68 } | |
69 } | |
70 } |