annotate vendor/psy/psysh/test/Psy/Test/CodeCleanerTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of Psy Shell.
Chris@0 5 *
Chris@0 6 * (c) 2012-2017 Justin Hileman
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Psy\Test;
Chris@0 13
Chris@0 14 use Psy\CodeCleaner;
Chris@0 15
Chris@0 16 class CodeCleanerTest extends \PHPUnit\Framework\TestCase
Chris@0 17 {
Chris@0 18 /**
Chris@0 19 * @dataProvider semicolonCodeProvider
Chris@0 20 */
Chris@0 21 public function testAutomaticSemicolons(array $lines, $requireSemicolons, $expected)
Chris@0 22 {
Chris@0 23 $cc = new CodeCleaner();
Chris@0 24 $this->assertEquals($expected, $cc->clean($lines, $requireSemicolons));
Chris@0 25 }
Chris@0 26
Chris@0 27 public function semicolonCodeProvider()
Chris@0 28 {
Chris@0 29 $values = array(
Chris@0 30 array(array('true'), false, 'return true;'),
Chris@0 31 array(array('true;'), false, 'return true;'),
Chris@0 32 array(array('true;'), true, 'return true;'),
Chris@0 33 array(array('true'), true, false),
Chris@0 34
Chris@0 35 array(array('echo "foo";', 'true'), true, false),
Chris@0 36 );
Chris@0 37
Chris@0 38 if (version_compare(PHP_VERSION, '5.4', '<')) {
Chris@0 39 $values[] = array(array('echo "foo";', 'true'), false, "echo 'foo';\nreturn true;");
Chris@0 40 } else {
Chris@0 41 $values[] = array(array('echo "foo";', 'true'), false, "echo \"foo\";\nreturn true;");
Chris@0 42 }
Chris@0 43
Chris@0 44 return $values;
Chris@0 45 }
Chris@0 46
Chris@0 47 /**
Chris@0 48 * @dataProvider unclosedStatementsProvider
Chris@0 49 */
Chris@0 50 public function testUnclosedStatements(array $lines, $isUnclosed)
Chris@0 51 {
Chris@0 52 $cc = new CodeCleaner();
Chris@0 53 $res = $cc->clean($lines);
Chris@0 54
Chris@0 55 if ($isUnclosed) {
Chris@0 56 $this->assertFalse($res);
Chris@0 57 } else {
Chris@0 58 $this->assertNotFalse($res);
Chris@0 59 }
Chris@0 60 }
Chris@0 61
Chris@0 62 public function unclosedStatementsProvider()
Chris@0 63 {
Chris@0 64 return array(
Chris@0 65 array(array('echo "'), true),
Chris@0 66 array(array('echo \''), true),
Chris@0 67 array(array('if (1) {'), true),
Chris@0 68
Chris@0 69 array(array('echo ""'), false),
Chris@0 70 array(array("echo ''"), false),
Chris@0 71 array(array('if (1) {}'), false),
Chris@0 72
Chris@0 73 array(array('// closed comment'), false),
Chris@0 74 array(array('function foo() { /**'), true),
Chris@0 75
Chris@0 76 array(array('var_dump(1, 2,'), true),
Chris@0 77 array(array('var_dump(1, 2,', '3)'), false),
Chris@0 78 );
Chris@0 79 }
Chris@0 80
Chris@0 81 /**
Chris@0 82 * @dataProvider moreUnclosedStatementsProvider
Chris@0 83 */
Chris@0 84 public function testMoreUnclosedStatements(array $lines)
Chris@0 85 {
Chris@0 86 if (defined('HHVM_VERSION')) {
Chris@0 87 $this->markTestSkipped('HHVM not supported.');
Chris@0 88 }
Chris@0 89
Chris@0 90 $cc = new CodeCleaner();
Chris@0 91 $res = $cc->clean($lines);
Chris@0 92
Chris@0 93 $this->assertFalse($res);
Chris@0 94 }
Chris@0 95
Chris@0 96 public function moreUnclosedStatementsProvider()
Chris@0 97 {
Chris@0 98 return array(
Chris@0 99 array(array("\$content = <<<EOS\n")),
Chris@0 100 array(array("\$content = <<<'EOS'\n")),
Chris@0 101
Chris@0 102 array(array('/* unclosed comment')),
Chris@0 103 array(array('/** unclosed comment')),
Chris@0 104 );
Chris@0 105 }
Chris@0 106
Chris@0 107 /**
Chris@0 108 * @dataProvider invalidStatementsProvider
Chris@0 109 * @expectedException \Psy\Exception\ParseErrorException
Chris@0 110 */
Chris@0 111 public function testInvalidStatementsThrowParseErrors($code)
Chris@0 112 {
Chris@0 113 $cc = new CodeCleaner();
Chris@0 114 $cc->clean(array($code));
Chris@0 115 }
Chris@0 116
Chris@0 117 public function invalidStatementsProvider()
Chris@0 118 {
Chris@0 119 return array(
Chris@0 120 array('function "what'),
Chris@0 121 array("function 'what"),
Chris@0 122 array('echo }'),
Chris@0 123 array('echo {'),
Chris@0 124 array('if (1) }'),
Chris@0 125 array('echo """'),
Chris@0 126 array("echo '''"),
Chris@0 127 array('$foo "bar'),
Chris@0 128 array('$foo \'bar'),
Chris@0 129 array('var_dump(1,2,)'),
Chris@0 130 );
Chris@0 131 }
Chris@0 132 }