Chris@0: assertEquals($expected, $cc->clean($lines, $requireSemicolons)); Chris@0: } Chris@0: Chris@0: public function semicolonCodeProvider() Chris@0: { Chris@0: $values = array( Chris@0: array(array('true'), false, 'return true;'), Chris@0: array(array('true;'), false, 'return true;'), Chris@0: array(array('true;'), true, 'return true;'), Chris@0: array(array('true'), true, false), Chris@0: Chris@0: array(array('echo "foo";', 'true'), true, false), Chris@0: ); Chris@0: Chris@0: if (version_compare(PHP_VERSION, '5.4', '<')) { Chris@0: $values[] = array(array('echo "foo";', 'true'), false, "echo 'foo';\nreturn true;"); Chris@0: } else { Chris@0: $values[] = array(array('echo "foo";', 'true'), false, "echo \"foo\";\nreturn true;"); Chris@0: } Chris@0: Chris@0: return $values; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider unclosedStatementsProvider Chris@0: */ Chris@0: public function testUnclosedStatements(array $lines, $isUnclosed) Chris@0: { Chris@0: $cc = new CodeCleaner(); Chris@0: $res = $cc->clean($lines); Chris@0: Chris@0: if ($isUnclosed) { Chris@0: $this->assertFalse($res); Chris@0: } else { Chris@0: $this->assertNotFalse($res); Chris@0: } Chris@0: } Chris@0: Chris@0: public function unclosedStatementsProvider() Chris@0: { Chris@0: return array( Chris@0: array(array('echo "'), true), Chris@0: array(array('echo \''), true), Chris@0: array(array('if (1) {'), true), Chris@0: Chris@0: array(array('echo ""'), false), Chris@0: array(array("echo ''"), false), Chris@0: array(array('if (1) {}'), false), Chris@0: Chris@0: array(array('// closed comment'), false), Chris@0: array(array('function foo() { /**'), true), Chris@0: Chris@0: array(array('var_dump(1, 2,'), true), Chris@0: array(array('var_dump(1, 2,', '3)'), false), Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider moreUnclosedStatementsProvider Chris@0: */ Chris@0: public function testMoreUnclosedStatements(array $lines) Chris@0: { Chris@0: if (defined('HHVM_VERSION')) { Chris@0: $this->markTestSkipped('HHVM not supported.'); Chris@0: } Chris@0: Chris@0: $cc = new CodeCleaner(); Chris@0: $res = $cc->clean($lines); Chris@0: Chris@0: $this->assertFalse($res); Chris@0: } Chris@0: Chris@0: public function moreUnclosedStatementsProvider() Chris@0: { Chris@0: return array( Chris@0: array(array("\$content = <<clean(array($code)); Chris@0: } Chris@0: Chris@0: public function invalidStatementsProvider() Chris@0: { Chris@0: return array( Chris@0: array('function "what'), Chris@0: array("function 'what"), Chris@0: array('echo }'), Chris@0: array('echo {'), Chris@0: array('if (1) }'), Chris@0: array('echo """'), Chris@0: array("echo '''"), Chris@0: array('$foo "bar'), Chris@0: array('$foo \'bar'), Chris@0: array('var_dump(1,2,)'), Chris@0: ); Chris@0: } Chris@0: }