3 namespace Drupal\Tests\config_translation\Unit;
5 use Drupal\config_translation\ConfigMapperManager;
6 use Drupal\Core\Language\Language;
7 use Drupal\Core\Language\LanguageInterface;
8 use Drupal\Core\TypedData\TypedDataInterface;
9 use Drupal\Tests\UnitTestCase;
10 use Drupal\Core\TypedData\DataDefinition;
13 * Tests the functionality provided by configuration translation mapper manager.
15 * @group config_translation
17 class ConfigMapperManagerTest extends UnitTestCase {
20 * The configuration mapper manager to test.
22 * @var \Drupal\config_translation\ConfigMapperManager
24 protected $configMapperManager;
27 * The typed configuration manager used for testing.
29 * @var \Drupal\Core\Config\TypedConfigManagerInterface|\PHPUnit_Framework_MockObject_MockObject
31 protected $typedConfigManager;
33 protected function setUp() {
34 $language = new Language(['id' => 'en']);
35 $language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
36 $language_manager->expects($this->once())
37 ->method('getCurrentLanguage')
38 ->with(LanguageInterface::TYPE_INTERFACE)
39 ->will($this->returnValue($language));
41 $this->typedConfigManager = $this->getMockBuilder('Drupal\Core\Config\TypedConfigManagerInterface')
44 $module_handler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface');
45 $theme_handler = $this->getMock('Drupal\Core\Extension\ThemeHandlerInterface');
47 $this->configMapperManager = new ConfigMapperManager(
48 $this->getMock('Drupal\Core\Cache\CacheBackendInterface'),
51 $this->typedConfigManager,
57 * Tests ConfigMapperManager::hasTranslatable().
59 * @param \Drupal\Core\TypedData\TypedDataInterface $element
60 * The schema element to test.
61 * @param bool $expected
62 * The expected return value of ConfigMapperManager::hasTranslatable().
64 * @dataProvider providerTestHasTranslatable
66 public function testHasTranslatable(TypedDataInterface $element, $expected) {
67 $this->typedConfigManager
68 ->expects($this->once())
71 ->will($this->returnValue($element));
73 $result = $this->configMapperManager->hasTranslatable('test');
74 $this->assertSame($expected, $result);
78 * Provides data for ConfigMapperManager::testHasTranslatable()
81 * An array of arrays, where each inner array contains the schema element
82 * to test as the first key and the expected result of
83 * ConfigMapperManager::hasTranslatable() as the second key.
85 public function providerTestHasTranslatable() {
87 [$this->getElement([]), FALSE],
88 [$this->getElement(['aaa' => 'bbb']), FALSE],
89 [$this->getElement(['translatable' => FALSE]), FALSE],
90 [$this->getElement(['translatable' => TRUE]), TRUE],
91 [$this->getNestedElement([$this->getElement([])]), FALSE],
92 [$this->getNestedElement([$this->getElement(['translatable' => TRUE])]), TRUE],
94 $this->getNestedElement([
95 $this->getElement(['aaa' => 'bbb']),
96 $this->getElement(['ccc' => 'ddd']),
97 $this->getElement(['eee' => 'fff']),
102 $this->getNestedElement([
103 $this->getElement(['aaa' => 'bbb']),
104 $this->getElement(['ccc' => 'ddd']),
105 $this->getElement(['translatable' => TRUE]),
110 $this->getNestedElement([
111 $this->getElement(['aaa' => 'bbb']),
112 $this->getNestedElement([
113 $this->getElement(['ccc' => 'ddd']),
114 $this->getElement(['eee' => 'fff']),
116 $this->getNestedElement([
117 $this->getElement(['ggg' => 'hhh']),
118 $this->getElement(['iii' => 'jjj']),
124 $this->getNestedElement([
125 $this->getElement(['aaa' => 'bbb']),
126 $this->getNestedElement([
127 $this->getElement(['ccc' => 'ddd']),
128 $this->getElement(['eee' => 'fff']),
130 $this->getNestedElement([
131 $this->getElement(['ggg' => 'hhh']),
132 $this->getElement(['translatable' => TRUE]),
141 * Returns a mocked schema element.
143 * @param array $definition
144 * The definition of the schema element.
146 * @return \Drupal\Core\Config\Schema\Element
147 * The mocked schema element.
149 protected function getElement(array $definition) {
150 $data_definition = new DataDefinition($definition);
151 $element = $this->getMock('Drupal\Core\TypedData\TypedDataInterface');
152 $element->expects($this->any())
153 ->method('getDataDefinition')
154 ->will($this->returnValue($data_definition));
159 * Returns a mocked nested schema element.
161 * @param array $elements
162 * An array of simple schema elements.
164 * @return \Drupal\Core\Config\Schema\Mapping
165 * A nested schema element, containing the passed-in elements.
167 protected function getNestedElement(array $elements) {
168 // ConfigMapperManager::findTranslatable() checks for
169 // \Drupal\Core\TypedData\TraversableTypedDataInterface, but mocking that
170 // directly does not work, because we need to implement \IteratorAggregate
171 // in order for getIterator() to be called. Therefore we need to mock
172 // \Drupal\Core\Config\Schema\ArrayElement, but that is abstract, so we
173 // need to mock one of the subclasses of it.
174 $nested_element = $this->getMockBuilder('Drupal\Core\Config\Schema\Mapping')
175 ->disableOriginalConstructor()
177 $nested_element->expects($this->once())
178 ->method('getIterator')
179 ->will($this->returnValue(new \ArrayIterator($elements)));
180 return $nested_element;