From 559ce196d5a6441e94e75a7d0075438d757ab1c6 Mon Sep 17 00:00:00 2001 From: webchick <drupal@webchick.net> Date: Tue, 6 Jan 2015 11:14:23 -0800 Subject: [PATCH] Issue #2378311 by Mile23, daffie: Expand unit testing for Drupal\Component\Plugin\Context\Context --- .../Component/Plugin/Context/ContextTest.php | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 core/tests/Drupal/Tests/Component/Plugin/Context/ContextTest.php diff --git a/core/tests/Drupal/Tests/Component/Plugin/Context/ContextTest.php b/core/tests/Drupal/Tests/Component/Plugin/Context/ContextTest.php new file mode 100644 index 000000000000..77c78a771e50 --- /dev/null +++ b/core/tests/Drupal/Tests/Component/Plugin/Context/ContextTest.php @@ -0,0 +1,89 @@ +<?php + +/** + * @file + * Contains \Drupal\Tests\Component\Plugin\Context\ContextTest. + */ + +namespace Drupal\Tests\Component\Plugin\Context; + +use Drupal\Tests\UnitTestCase; + +/** + * @coversDefaultClass \Drupal\Component\Plugin\Context\Context + * @group Plugin + */ +class ContextTest extends UnitTestCase { + + /** + * Data provider for testGetContextValue. + */ + public function providerGetContextValue() { + return [ + ['context_value', 'context_value', FALSE, 'data_type'], + [NULL, NULL, FALSE, 'data_type'], + ['will throw exception', NULL, TRUE, 'data_type'], + ]; + } + + /** + * @covers ::getContextValue + * @dataProvider providerGetContextValue + */ + public function testGetContextValue($expected, $context_value, $is_required, $data_type) { + // Mock a Context object. + $mock_context = $this->getMockBuilder('Drupal\Component\Plugin\Context\Context') + ->disableOriginalConstructor() + ->setMethods(array('getContextDefinition')) + ->getMock(); + + // If the context value exists, getContextValue() behaves like a normal + // getter. + if ($context_value) { + // Set visibility of contextValue. + $ref_context_value = new \ReflectionProperty($mock_context, 'contextValue'); + $ref_context_value->setAccessible(TRUE); + // Set contextValue to a testable state. + $ref_context_value->setValue($mock_context, $context_value); + // Exercise getContextValue(). + $this->assertEquals($context_value, $mock_context->getContextValue()); + } + // If no context value exists, we have to cover either returning NULL or + // throwing an exception if the definition requires it. + else { + // Create a mock definition. + $mock_definition = $this->getMockBuilder('Drupal\Component\Plugin\Context\ContextDefinitionInterface') + ->setMethods(array('isRequired', 'getDataType')) + ->getMockForAbstractClass(); + + // Set expectation for isRequired(). + $mock_definition->expects($this->once()) + ->method('isRequired') + ->willReturn($is_required); + + // Set expectation for getDataType(). + $mock_definition->expects($this->exactly( + $is_required ? 1 : 0 + )) + ->method('getDataType') + ->willReturn($data_type); + + // Set expectation for getContextDefinition(). + $mock_context->expects($this->once()) + ->method('getContextDefinition') + ->willReturn($mock_definition); + + // Set expectation for exception. + if ($is_required) { + $this->setExpectedException( + 'Drupal\Component\Plugin\Exception\ContextException', + sprintf("The %s context is required and not present.", $data_type) + ); + } + + // Exercise getContextValue(). + $this->assertEquals($context_value, $mock_context->getContextValue()); + } + } + +} -- GitLab