configFactory = $this->getConfigFactoryStub( [ 'aggregator.settings' => [ 'processors' => ['aggregator_test'], ], 'aggregator_test.settings' => [], ] ); foreach (['fetcher', 'parser', 'processor'] as $type) { $this->managers[$type] = $this->getMockBuilder('Drupal\aggregator\Plugin\AggregatorPluginManager') ->disableOriginalConstructor() ->getMock(); $this->managers[$type]->expects($this->once()) ->method('getDefinitions') ->will($this->returnValue(['aggregator_test' => ['title' => '', 'description' => '']])); } $this->settingsForm = new SettingsForm( $this->configFactory, $this->managers['fetcher'], $this->managers['parser'], $this->managers['processor'], $this->getStringTranslationStub() ); } /** * Test for AggregatorPluginSettingsBase. * * Ensure that the settings form calls build, validate and submit methods on * plugins that extend AggregatorPluginSettingsBase. */ public function testSettingsForm() { // Emulate a form state of a submitted form. $form_state = (new FormState())->setValues([ 'dummy_length' => '', 'aggregator_allowed_html_tags' => '', ]); $test_processor = $this->getMock( 'Drupal\aggregator_test\Plugin\aggregator\processor\TestProcessor', ['buildConfigurationForm', 'validateConfigurationForm', 'submitConfigurationForm'], [[], 'aggregator_test', ['description' => ''], $this->configFactory] ); $test_processor->expects($this->at(0)) ->method('buildConfigurationForm') ->with($this->anything(), $form_state) ->will($this->returnArgument(0)); $test_processor->expects($this->at(1)) ->method('validateConfigurationForm') ->with($this->anything(), $form_state); $test_processor->expects($this->at(2)) ->method('submitConfigurationForm') ->with($this->anything(), $form_state); $this->managers['processor']->expects($this->once()) ->method('createInstance') ->with($this->equalTo('aggregator_test')) ->will($this->returnValue($test_processor)); $form = $this->settingsForm->buildForm([], $form_state); $this->settingsForm->validateForm($form, $form_state); $this->settingsForm->submitForm($form, $form_state); } } // @todo Delete after https://www.drupal.org/node/2278383 is in. namespace Drupal\Core\Form; if (!function_exists('drupal_set_message')) { function drupal_set_message() { } }