You are here

public function ImplementTest::test in Drupal 7 to 8/9 Module Upgrader 8

File

tests/src/Unit/Plugin/DMU/Fixer/ImplementTest.php, line 15

Class

ImplementTest
@group DMU.Fixer

Namespace

Drupal\Tests\drupalmoduleupgrader\Unit\Plugin\DMU\Fixer

Code

public function test() {
  $class = ClassNode::create('Foobaz');
  $indexer = $this
    ->createMock('\\Drupal\\drupalmoduleupgrader\\IndexerInterface');
  $indexer
    ->method('get')
    ->with('Foobaz')
    ->willReturn($class);
  $this->container
    ->get('plugin.manager.drupalmoduleupgrader.indexer')
    ->method('createInstance')
    ->with('class')
    ->willReturn($indexer);
  $config = [
    'definition' => '\\Drupal\\Core\\Block\\BlockPluginInterface::blockForm',
    'target' => 'Foobaz',
  ];
  $plugin = new Implement($config, uniqid(), []);
  $plugin
    ->setTarget($this->target);
  try {

    // We expect a CodeManagerIOException because we're implementing the
    // method on a class that is not officially part of the target's code.
    // That's OK, though.
    $plugin
      ->execute();
  } catch (IOException $e) {
  }
  $this
    ->assertTrue($class
    ->hasMethod('blockForm'));
  $method = $class
    ->getMethod('blockForm');
  $this
    ->assertInstanceOf('\\Pharborist\\Objects\\ClassMethodNode', $method);
  $parameters = $method
    ->getParameters();
  $this
    ->assertCount(2, $parameters);
  $this
    ->assertEquals($parameters[0]
    ->getName(), 'form');
  $this
    ->assertNull($parameters[0]
    ->getTypeHint());
  $this
    ->assertEquals($parameters[1]
    ->getName(), 'form_state');
  $type = $parameters[1]
    ->getTypeHint();
  $this
    ->assertInstanceOf('\\Pharborist\\Namespaces\\NameNode', $type);
  $this
    ->assertEquals('Drupal\\Core\\Form\\FormStateInterface', $type
    ->getText());
}