X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Ftests%2FDrupal%2FTests%2FUnitTestCase.php;h=bd183c7961746a48a0a2ee75f0602875683a7e14;hb=74df008bdbb3a11eeea356744f39b802369bda3c;hp=37012c5ed48759e8d1f73808faa83048bfa837ec;hpb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;p=yaffs-website diff --git a/web/core/tests/Drupal/Tests/UnitTestCase.php b/web/core/tests/Drupal/Tests/UnitTestCase.php index 37012c5ed..bd183c796 100644 --- a/web/core/tests/Drupal/Tests/UnitTestCase.php +++ b/web/core/tests/Drupal/Tests/UnitTestCase.php @@ -3,6 +3,7 @@ namespace Drupal\Tests; use Drupal\Component\FileCache\FileCacheFactory; +use Drupal\Component\Utility\NestedArray; use Drupal\Component\Utility\Random; use Drupal\Core\Cache\CacheTagsInvalidatorInterface; use Drupal\Core\DependencyInjection\ContainerBuilder; @@ -93,18 +94,19 @@ abstract class UnitTestCase extends TestCase { } /** - * Returns a stub config factory that behaves according to the passed in array. + * Returns a stub config factory that behaves according to the passed array. * * Use this to generate a config factory that will return the desired values * for the given config names. * * @param array $configs - * An associative array of configuration settings whose keys are configuration - * object names and whose values are key => value arrays for the configuration - * object in question. Defaults to an empty array. + * An associative array of configuration settings whose keys are + * configuration object names and whose values are key => value arrays for + * the configuration object in question. Defaults to an empty array. * * @return \PHPUnit_Framework_MockObject_MockBuilder - * A MockBuilder object for the ConfigFactory with the desired return values. + * A MockBuilder object for the ConfigFactory with the desired return + * values. */ public function getConfigFactoryStub(array $configs = []) { $config_get_map = []; @@ -112,19 +114,29 @@ abstract class UnitTestCase extends TestCase { // Construct the desired configuration object stubs, each with its own // desired return map. foreach ($configs as $config_name => $config_values) { - $map = []; - foreach ($config_values as $key => $value) { - $map[] = [$key, $value]; - } - // Also allow to pass in no argument. - $map[] = ['', $config_values]; + // Define a closure over the $config_values, which will be used as a + // returnCallback below. This function will mimic + // \Drupal\Core\Config\Config::get and allow using dotted keys. + $config_get = function ($key = '') use ($config_values) { + // Allow to pass in no argument. + if (empty($key)) { + return $config_values; + } + // See if we have the key as is. + if (isset($config_values[$key])) { + return $config_values[$key]; + } + $parts = explode('.', $key); + $value = NestedArray::getValue($config_values, $parts, $key_exists); + return $key_exists ? $value : NULL; + }; $immutable_config_object = $this->getMockBuilder('Drupal\Core\Config\ImmutableConfig') ->disableOriginalConstructor() ->getMock(); $immutable_config_object->expects($this->any()) ->method('get') - ->will($this->returnValueMap($map)); + ->will($this->returnCallback($config_get)); $config_get_map[] = [$config_name, $immutable_config_object]; $mutable_config_object = $this->getMockBuilder('Drupal\Core\Config\Config') @@ -132,7 +144,7 @@ abstract class UnitTestCase extends TestCase { ->getMock(); $mutable_config_object->expects($this->any()) ->method('get') - ->will($this->returnValueMap($map)); + ->will($this->returnCallback($config_get)); $config_editable_map[] = [$config_name, $mutable_config_object]; } // Construct a config factory with the array of configuration object stubs @@ -181,6 +193,12 @@ abstract class UnitTestCase extends TestCase { * * @return \Drupal\block\BlockInterface|\PHPUnit_Framework_MockObject_MockObject * The mocked block. + * + * @deprecated in Drupal 8.5.x, will be removed before Drupal 9.0.0. Unit test + * base classes should not have dependencies on extensions. Set up mocks in + * individual tests. + * + * @see https://www.drupal.org/node/2896072 */ protected function getBlockMockWithMachineName($machine_name) { $plugin = $this->getMockBuilder('Drupal\Core\Block\BlockBase') @@ -196,6 +214,7 @@ abstract class UnitTestCase extends TestCase { $block->expects($this->any()) ->method('getPlugin') ->will($this->returnValue($plugin)); + @trigger_error(__METHOD__ . ' is deprecated in Drupal 8.5.x, will be removed before Drupal 9.0.0. Unit test base classes should not have dependencies on extensions. Set up mocks in individual tests.', E_USER_DEPRECATED); return $block; }