Chris@13: assertSame($expected, $cc->clean($lines, $requireSemicolons)); Chris@13: } Chris@13: Chris@13: public function semicolonCodeProvider() Chris@13: { Chris@13: return [ Chris@13: [['true'], false, 'return true;'], Chris@13: [['true;'], false, 'return true;'], Chris@13: [['true;'], true, 'return true;'], Chris@13: [['true'], true, false], Chris@13: Chris@13: [['echo "foo";', 'true'], true, false], Chris@13: Chris@13: [['echo "foo";', 'true'], false, "echo \"foo\";\nreturn true;"], Chris@13: ]; Chris@13: } Chris@13: Chris@13: /** Chris@13: * @dataProvider unclosedStatementsProvider Chris@13: */ Chris@13: public function testUnclosedStatements(array $lines, $isUnclosed) Chris@13: { Chris@13: $cc = new CodeCleaner(); Chris@13: $res = $cc->clean($lines); Chris@13: Chris@13: if ($isUnclosed) { Chris@13: $this->assertFalse($res); Chris@13: } else { Chris@13: $this->assertNotFalse($res); Chris@13: } Chris@13: } Chris@13: Chris@13: public function unclosedStatementsProvider() Chris@13: { Chris@13: return [ Chris@13: [['echo "'], true], Chris@13: [['echo \''], true], Chris@13: [['if (1) {'], true], Chris@13: Chris@16: [['echo "foo",'], true], Chris@16: Chris@13: [['echo ""'], false], Chris@13: [["echo ''"], false], Chris@13: [['if (1) {}'], false], Chris@13: Chris@13: [['// closed comment'], false], Chris@13: [['function foo() { /**'], true], Chris@13: Chris@13: [['var_dump(1, 2,'], true], Chris@13: [['var_dump(1, 2,', '3)'], false], Chris@13: ]; Chris@13: } Chris@13: Chris@13: /** Chris@13: * @dataProvider moreUnclosedStatementsProvider Chris@13: */ Chris@13: public function testMoreUnclosedStatements(array $lines) Chris@13: { Chris@17: if (\defined('HHVM_VERSION')) { Chris@13: $this->markTestSkipped('HHVM not supported.'); Chris@13: } Chris@13: Chris@13: $cc = new CodeCleaner(); Chris@13: $res = $cc->clean($lines); Chris@13: Chris@13: $this->assertFalse($res); Chris@13: } Chris@13: Chris@13: public function moreUnclosedStatementsProvider() Chris@13: { Chris@13: return [ Chris@13: [["\$content = <<clean([$code]); Chris@13: } Chris@13: Chris@13: public function invalidStatementsProvider() Chris@13: { Chris@13: // n.b. We used to check that `var_dump(1,2,)` failed, but PHP Parser Chris@13: // 4.x backported trailing comma function calls from PHP 7.3 for free! Chris@13: // so we're not going to spend too much time worrying about it :) Chris@13: Chris@13: return [ Chris@13: ['function "what'], Chris@13: ["function 'what"], Chris@13: ['echo }'], Chris@13: ['echo {'], Chris@13: ['if (1) }'], Chris@13: ['echo """'], Chris@13: ["echo '''"], Chris@13: ['$foo "bar'], Chris@13: ['$foo \'bar'], Chris@13: ]; Chris@13: } Chris@13: }