From 616b2ac464112d3a4fd8d3cb14c5d74953a64701 Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Fri, 21 Nov 2014 11:41:52 +0000 Subject: [PATCH] Issue #2368019 by Mile23: Expand unit testing for Drupal\Core\Plugin\Context\ContextDefinition --- .../Plugin/Context/ContextDefinitionTest.php | 209 ++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 core/tests/Drupal/Tests/Core/Plugin/Context/ContextDefinitionTest.php diff --git a/core/tests/Drupal/Tests/Core/Plugin/Context/ContextDefinitionTest.php b/core/tests/Drupal/Tests/Core/Plugin/Context/ContextDefinitionTest.php new file mode 100644 index 000000000000..95577fe68fd7 --- /dev/null +++ b/core/tests/Drupal/Tests/Core/Plugin/Context/ContextDefinitionTest.php @@ -0,0 +1,209 @@ +<?php + +/** + * @file + * Contains \Drupal\Tests\Core\Plugin\Context\ContextDefinitionTest. + */ + +namespace Drupal\Tests\Core\Plugin\Context; + +use Drupal\Tests\UnitTestCase; + +/** + * Tests the ContextDefinition class. + * + * @group Plugin + * + * @coversDefaultClass Drupal\Core\Plugin\Context\ContextDefinition + */ +class ContextDefinitionTest extends UnitTestCase { + + /** + * Very simple data provider. + */ + public function providerGetDataDefinition() { + return array( + array(TRUE), + array(FALSE), + ); + } + + /** + * @dataProvider providerGetDataDefinition + * @covers ::getDataDefinition + * @uses \Drupal + */ + public function testGetDataDefinition($is_multiple) { + $data_type = 'valid'; + $mock_data_definition = $this->getMockBuilder('\Drupal\Core\TypedData\ListDataDefinitionInterface') + ->setMethods(array( + 'setLabel', + 'setDescription', + 'setRequired', + 'getConstraints', + 'setConstraints', + )) + ->getMockForAbstractClass(); + $mock_data_definition->expects($this->once()) + ->method('setLabel') + ->willReturnSelf(); + $mock_data_definition->expects($this->once()) + ->method('setDescription') + ->willReturnSelf(); + $mock_data_definition->expects($this->once()) + ->method('setRequired') + ->willReturnSelf(); + $mock_data_definition->expects($this->once()) + ->method('getConstraints') + ->willReturn(array()); + $mock_data_definition->expects($this->once()) + ->method('setConstraints') + ->willReturn(NULL); + + // Follow code paths for both multiple and non-multiple definitions. + $create_definition_method = 'createDataDefinition'; + if ($is_multiple) { + $create_definition_method = 'createListDataDefinition'; + } + $mock_data_manager = $this->getMockBuilder('\Drupal\Core\TypedData\TypedDataManager') + ->disableOriginalConstructor() + ->setMethods(array($create_definition_method)) + ->getMock(); + // Our mocked data manager will return our mocked data definition for a + // valid data type. + $mock_data_manager->expects($this->once()) + ->method($create_definition_method) + ->willReturnMap(array( + array('not_valid', NULL), + array('valid', $mock_data_definition), + )); + + // Mock a ContextDefinition object, setting up expectations for many of the + // methods. + $mock_context_definition = $this->getMockBuilder('Drupal\Core\Plugin\Context\ContextDefinition') + ->disableOriginalConstructor() + ->setMethods(array( + 'isMultiple', + 'getTypedDataManager', + 'getDataType', + 'getLabel', + 'getDescription', + 'isRequired', + 'getConstraints', + 'setConstraints', + )) + ->getMock(); + $mock_context_definition->expects($this->once()) + ->method('isMultiple') + ->willReturn($is_multiple); + $mock_context_definition->expects($this->once()) + ->method('getTypedDataManager') + ->willReturn($mock_data_manager); + $mock_context_definition->expects($this->once()) + ->method('getDataType') + ->willReturn($data_type); + $mock_context_definition->expects($this->once()) + ->method('getConstraints') + ->willReturn(array()); + + $this->assertSame( + $mock_data_definition, + $mock_context_definition->getDataDefinition() + ); + } + + /** + * @expectedException \Exception + * @dataProvider providerGetDataDefinition + * @covers ::getDataDefinition + * @uses \Drupal + * @uses Drupal\Component\Utility\String + * @uses Drupal\Component\Utility\SafeMarkup + */ + public function testGetDataDefinitionInvalidType($is_multiple) { + // Since we're trying to make getDataDefinition() throw an exception in + // isolation, we use a data type which is not valid. + $data_type = 'not_valid'; + $mock_data_definition = $this->getMockBuilder('\Drupal\Core\TypedData\ListDataDefinitionInterface') + ->getMockForAbstractClass(); + + // Follow code paths for both multiple and non-multiple definitions. + $create_definition_method = 'createDataDefinition'; + if ($is_multiple) { + $create_definition_method = 'createListDataDefinition'; + } + $mock_data_manager = $this->getMockBuilder('\Drupal\Core\TypedData\TypedDataManager') + ->disableOriginalConstructor() + ->setMethods(array($create_definition_method)) + ->getMock(); + // Our mocked data manager will return NULL for a non-valid data type. This + // will eventually cause getDataDefinition() to throw an exception. + $mock_data_manager->expects($this->once()) + ->method($create_definition_method) + ->willReturnMap(array( + array('not_valid', NULL), + array('valid', $mock_data_definition), + )); + + // Mock a ContextDefinition object with expectations for only the methods + // that will be called before the expected exception. + $mock_context_definition = $this->getMockBuilder('Drupal\Core\Plugin\Context\ContextDefinition') + ->disableOriginalConstructor() + ->setMethods(array( + 'isMultiple', + 'getTypedDataManager', + 'getDataType', + )) + ->getMock(); + $mock_context_definition->expects($this->once()) + ->method('isMultiple') + ->willReturn($is_multiple); + $mock_context_definition->expects($this->once()) + ->method('getTypedDataManager') + ->willReturn($mock_data_manager); + $mock_context_definition + ->method('getDataType') + ->willReturn($data_type); + + $this->assertSame( + $mock_data_definition, + $mock_context_definition->getDataDefinition() + ); + } + + /** + * Data provider for testGetConstraint + */ + public function providerGetConstraint() { + return array( + array(NULL, array(), 'nonexistent_constraint_name'), + array( + 'not_null', + array( + 'constraint_name' => 'not_null', + ), + 'constraint_name', + ), + ); + } + + /** + * @dataProvider providerGetConstraint + * @covers ::getConstraint + * @uses \Drupal + */ + public function testGetConstraint($expected, $constraint_array, $constraint) { + $mock_context_definition = $this->getMockBuilder('Drupal\Core\Plugin\Context\ContextDefinition') + ->disableOriginalConstructor() + ->setMethods(array( + 'getConstraints', + )) + ->getMock(); + $mock_context_definition->expects($this->once()) + ->method('getConstraints') + ->willReturn($constraint_array); + + $this->assertEquals($expected, $mock_context_definition->getConstraint($constraint)); + } + +} -- GitLab