/** * {@inheritdoc} */ public function convert(TargetInterface $target) { $unit_tests = []; $test_files = $target->getIndexer('class')->getQuery(['file'])->condition('parent', 'DrupalUnitTestCase')->execute()->fetchCol(); foreach ($test_files as $test_file) { /** @var \Pharborist\Objects\Classnode[] $tests */ $tests = $target->open($test_file)->find(Filter::isInstanceOf('\\Pharborist\\Objects\\SingleInheritanceNode'))->toArray(); foreach ($tests as $test) { if ((string) $test->getExtends() === 'DrupalUnitTestCase') { $unit_tests[] = $test; } } } /** @var \Pharborist\Objects\ClassNode $unit_test */ foreach ($unit_tests as $unit_test) { $unit_test->setExtends('\\Drupal\\Tests\\UnitTestCase'); $comment_text = <<<END @FIXME Unit tests are now written for the PHPUnit framework. You will need to refactor this test in order for it to work properly. END; $comment = DocCommentNode::create($comment_text); $unit_test->setDocComment($comment); $ns = 'Drupal\\Tests\\' . $target->id() . '\\Unit'; $doc = RootNode::create($ns)->getNamespace($ns)->append($unit_test->remove()); WhitespaceNode::create("\n\n")->insertBefore($unit_test); $this->write($target, 'tests/src/Unit/' . $unit_test->getName() . '.php', "<?php\n\n{$doc}"); } }
/** * Gets the number of lines spanned by this statement. * * @return integer * Always returns at least one, because any statement will be at least * one line long. */ public function getLineCount() { $count = 1; $this->find(Filter::isInstanceOf('\\Pharborist\\WhitespaceNode'))->each(function (WhitespaceNode $node) use(&$count) { $count += $node->getNewlineCount(); }); return $count; }
public function testCreate() { $doc = RootNode::create(); $this->assertEquals("<?php\n", $doc->getText()); $doc = RootNode::create('Pharborist\\Test'); $this->assertEquals("<?php\nnamespace Pharborist\\Test;\n", $doc->getText()); $ns = $doc->children(Filter::isInstanceOf('\\Pharborist\\Namespaces\\NamespaceNode'))[0]; $this->assertEquals('\\Pharborist\\Test', $ns->getName()->getAbsolutePath()); }
public function testIsInstanceOf() { $source = <<<'END' <?php $foo = 'baz'; function a() {} class B {} END; $doc = Parser::parseSource($source); $stuff = $doc->find(Filter::isInstanceOf('\\Pharborist\\Variables\\VariableNode', '\\Pharborist\\Functions\\FunctionDeclarationNode', '\\Pharborist\\Objects\\ClassNode')); $this->assertCount(3, $stuff); $this->assertInstanceOf('\\Pharborist\\Variables\\VariableNode', $stuff[0]); $this->assertEquals('$foo', $stuff[0]); $this->assertInstanceOf('\\Pharborist\\Functions\\FunctionDeclarationNode', $stuff[1]); $this->assertEquals('function a() {}', $stuff[1]); $this->assertInstanceOf('\\Pharborist\\Objects\\ClassNode', $stuff[2]); $this->assertEquals('class B {}', $stuff[2]); }
/** * Add indent to comment. * * @param string $whitespace * Additional whitespace to add. * @return $this */ public function addIndent($whitespace) { $has_indent = $this->children(function (Node $node) { return !$node instanceof CommentNode; })->count() > 0; if ($has_indent) { $this->children(Filter::isInstanceOf('\\Pharborist\\WhitespaceNode'))->each(function (WhitespaceNode $ws_node) use($whitespace) { $ws_node->setText($ws_node->getText() . $whitespace); }); } else { $this->children()->before(Token::whitespace($whitespace)); } return $this; }