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