UnitTests.php in Drupal 7 to 8/9 Module Upgrader 8
File
src/Plugin/DMU/Converter/UnitTests.php
View source
<?php
namespace Drupal\drupalmoduleupgrader\Plugin\DMU\Converter;
use Drupal\drupalmoduleupgrader\ConverterBase;
use Drupal\drupalmoduleupgrader\TargetInterface;
use Pharborist\DocCommentNode;
use Pharborist\RootNode;
use Pharborist\WhitespaceNode;
class UnitTests extends ConverterBase {
public function isExecutable(TargetInterface $target) {
return $target
->getIndexer('class')
->getQuery()
->condition('parent', 'DrupalUnitTestCase')
->countQuery()
->execute();
}
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) {
$tests = $target
->open($test_file)
->find(Filter::isInstanceOf('\\Pharborist\\Objects\\SingleInheritanceNode'))
->toArray();
foreach ($tests as $test) {
if ((string) $test
->getExtends() === 'DrupalUnitTestCase') {
$unit_tests[] = $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}");
}
}
}
Classes
Name |
Description |
UnitTests |
Plugin annotation
@Converter(
id = "unit_tests",
description = @Translation("Modifies unit test classes.")
) |