3 namespace Drupal\Tests\Core;
5 use Drupal\Core\DependencyInjection\ClassResolverInterface;
6 use Drupal\Core\DependencyInjection\ContainerNotInitializedException;
7 use Drupal\Core\Entity\EntityStorageInterface;
8 use Drupal\Core\Entity\EntityTypeManagerInterface;
9 use Drupal\Core\Entity\Query\QueryAggregateInterface;
10 use Drupal\Core\Entity\Query\QueryInterface;
11 use Drupal\Tests\UnitTestCase;
13 use Symfony\Component\HttpFoundation\RequestStack;
16 * Tests the Drupal class.
18 * @coversDefaultClass \Drupal
21 class DrupalTest extends UnitTestCase {
26 * @var \Symfony\Component\DependencyInjection\ContainerBuilder|\PHPUnit_Framework_MockObject_MockObject
33 protected function setUp() {
35 $this->container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')
41 * Tests the get/setContainer() method.
43 * @covers ::getContainer
45 public function testSetContainer() {
46 \Drupal::setContainer($this->container);
47 $this->assertSame($this->container, \Drupal::getContainer());
51 * @covers ::getContainer
53 public function testGetContainerException() {
54 $this->setExpectedException(ContainerNotInitializedException::class, '\Drupal::$container is not initialized yet. \Drupal::setContainer() must be called with a real container.');
55 \Drupal::getContainer();
59 * Tests the service() method.
63 public function testService() {
64 $this->setMockContainerService('test_service');
65 $this->assertNotNull(\Drupal::service('test_service'));
69 * Tests the currentUser() method.
71 * @covers ::currentUser
73 public function testCurrentUser() {
74 $this->setMockContainerService('current_user');
75 $this->assertNotNull(\Drupal::currentUser());
79 * Tests the entityManager() method.
81 * @covers ::entityManager
83 public function testEntityManager() {
84 $this->setMockContainerService('entity.manager');
85 $this->assertNotNull(\Drupal::entityManager());
89 * Tests the entityTypeManager() method.
91 * @covers ::entityTypeManager
93 public function testEntityTypeManager() {
94 $this->setMockContainerService('entity_type.manager');
95 $this->assertNotNull(\Drupal::entityTypeManager());
99 * Tests the database() method.
103 public function testDatabase() {
104 $this->setMockContainerService('database');
105 $this->assertNotNull(\Drupal::database());
109 * Tests the cache() method.
113 public function testCache() {
114 $this->setMockContainerService('cache.test');
115 $this->assertNotNull(\Drupal::cache('test'));
119 * Tests the classResolver method.
121 * @covers ::classResolver
123 public function testClassResolver() {
124 $class_resolver = $this->prophesize(ClassResolverInterface::class);
125 $this->setMockContainerService('class_resolver', $class_resolver->reveal());
126 $this->assertInstanceOf(ClassResolverInterface::class, \Drupal::classResolver());
130 * Tests the classResolver method when called with a class.
132 * @covers ::classResolver
134 public function testClassResolverWithClass() {
135 $class_resolver = $this->prophesize(ClassResolverInterface::class);
136 $class_resolver->getInstanceFromDefinition(static::class)->willReturn($this);
137 $this->setMockContainerService('class_resolver', $class_resolver->reveal());
138 $this->assertSame($this, \Drupal::classResolver(static::class));
142 * Tests the keyValueExpirable() method.
144 * @covers ::keyValueExpirable
146 public function testKeyValueExpirable() {
147 $keyvalue = $this->getMockBuilder('Drupal\Core\KeyValueStore\KeyValueExpirableFactory')
148 ->disableOriginalConstructor()
150 $keyvalue->expects($this->once())
152 ->with('test_collection')
153 ->will($this->returnValue(TRUE));
154 $this->setMockContainerService('keyvalue.expirable', $keyvalue);
156 $this->assertNotNull(\Drupal::keyValueExpirable('test_collection'));
160 * Tests the lock() method.
164 public function testLock() {
165 $this->setMockContainerService('lock');
166 $this->assertNotNull(\Drupal::lock());
170 * Tests the config() method.
174 public function testConfig() {
175 $config = $this->getMock('Drupal\Core\Config\ConfigFactoryInterface');
176 $config->expects($this->once())
178 ->with('test_config')
179 ->will($this->returnValue(TRUE));
180 $this->setMockContainerService('config.factory', $config);
182 // Test \Drupal::config(), not $this->config().
183 $this->assertNotNull(\Drupal::config('test_config'));
187 * Tests the queue() method.
191 public function testQueue() {
192 $queue = $this->getMockBuilder('Drupal\Core\Queue\QueueFactory')
193 ->disableOriginalConstructor()
195 $queue->expects($this->once())
197 ->with('test_queue', TRUE)
198 ->will($this->returnValue(TRUE));
199 $this->setMockContainerService('queue', $queue);
201 $this->assertNotNull(\Drupal::queue('test_queue', TRUE));
205 * Tests the testRequestStack() method.
207 * @covers ::requestStack
209 public function testRequestStack() {
210 $request_stack = new RequestStack();
211 $this->setMockContainerService('request_stack', $request_stack);
213 $this->assertSame($request_stack, \Drupal::requestStack());
217 * Tests the keyValue() method.
221 public function testKeyValue() {
222 $keyvalue = $this->getMockBuilder('Drupal\Core\KeyValueStore\KeyValueFactory')
223 ->disableOriginalConstructor()
225 $keyvalue->expects($this->once())
227 ->with('test_collection')
228 ->will($this->returnValue(TRUE));
229 $this->setMockContainerService('keyvalue', $keyvalue);
231 $this->assertNotNull(\Drupal::keyValue('test_collection'));
235 * Tests the state() method.
239 public function testState() {
240 $this->setMockContainerService('state');
241 $this->assertNotNull(\Drupal::state());
245 * Tests the httpClient() method.
247 * @covers ::httpClient
249 public function testHttpClient() {
250 $this->setMockContainerService('http_client');
251 $this->assertNotNull(\Drupal::httpClient());
255 * Tests the entityQuery() method.
257 * @covers ::entityQuery
259 public function testEntityQuery() {
260 $query = $this->getMock(QueryInterface::class);
261 $storage = $this->getMock(EntityStorageInterface::class);
263 ->expects($this->once())
266 ->willReturn($query);
268 $entity_type_manager = $this->getMock(EntityTypeManagerInterface::class);
270 ->expects($this->once())
271 ->method('getStorage')
272 ->with('test_entity')
273 ->willReturn($storage);
275 $this->setMockContainerService('entity_type.manager', $entity_type_manager);
277 $this->assertInstanceOf(QueryInterface::class, \Drupal::entityQuery('test_entity', 'OR'));
281 * Tests the entityQueryAggregate() method.
283 * @covers ::entityQueryAggregate
285 public function testEntityQueryAggregate() {
286 $query = $this->getMock(QueryAggregateInterface::class);
287 $storage = $this->getMock(EntityStorageInterface::class);
289 ->expects($this->once())
290 ->method('getAggregateQuery')
292 ->willReturn($query);
294 $entity_type_manager = $this->getMock(EntityTypeManagerInterface::class);
296 ->expects($this->once())
297 ->method('getStorage')
298 ->with('test_entity')
299 ->willReturn($storage);
301 $this->setMockContainerService('entity_type.manager', $entity_type_manager);
303 $this->assertInstanceOf(QueryAggregateInterface::class, \Drupal::entityQueryAggregate('test_entity', 'OR'));
307 * Tests the flood() method.
311 public function testFlood() {
312 $this->setMockContainerService('flood');
313 $this->assertNotNull(\Drupal::flood());
317 * Tests the moduleHandler() method.
319 * @covers ::moduleHandler
321 public function testModuleHandler() {
322 $this->setMockContainerService('module_handler');
323 $this->assertNotNull(\Drupal::moduleHandler());
327 * Tests the typedDataManager() method.
329 * @covers ::typedDataManager
331 public function testTypedDataManager() {
332 $this->setMockContainerService('typed_data_manager');
333 $this->assertNotNull(\Drupal::typedDataManager());
337 * Tests the token() method.
341 public function testToken() {
342 $this->setMockContainerService('token');
343 $this->assertNotNull(\Drupal::token());
347 * Tests the urlGenerator() method.
349 * @covers ::urlGenerator
351 public function testUrlGenerator() {
352 $this->setMockContainerService('url_generator');
353 $this->assertNotNull(\Drupal::urlGenerator());
357 * Tests the url() method.
360 * @see \Drupal\Core\Routing\UrlGeneratorInterface::generateFromRoute()
362 public function testUrl() {
363 $route_parameters = ['test_parameter' => 'test'];
364 $options = ['test_option' => 'test'];
365 $generator = $this->getMock('Drupal\Core\Routing\UrlGeneratorInterface');
366 $generator->expects($this->once())
367 ->method('generateFromRoute')
368 ->with('test_route', $route_parameters, $options)
369 ->will($this->returnValue('path_string'));
370 $this->setMockContainerService('url_generator', $generator);
372 $this->assertInternalType('string', \Drupal::url('test_route', $route_parameters, $options));
376 * Tests the linkGenerator() method.
378 * @covers ::linkGenerator
380 public function testLinkGenerator() {
381 $this->setMockContainerService('link_generator');
382 $this->assertNotNull(\Drupal::linkGenerator());
386 * Tests the l() method.
389 * @see \Drupal\Core\Utility\LinkGeneratorInterface::generate()
391 public function testL() {
392 $route_parameters = ['test_parameter' => 'test'];
393 $options = ['test_option' => 'test'];
394 $generator = $this->getMock('Drupal\Core\Utility\LinkGeneratorInterface');
395 $url = new Url('test_route', $route_parameters, $options);
396 $generator->expects($this->once())
398 ->with('Test title', $url)
399 ->will($this->returnValue('link_html_string'));
400 $this->setMockContainerService('link_generator', $generator);
402 $this->assertInternalType('string', \Drupal::l('Test title', $url));
406 * Tests the translation() method.
408 * @covers ::translation
410 public function testTranslation() {
411 $this->setMockContainerService('string_translation');
412 $this->assertNotNull(\Drupal::translation());
416 * Tests the languageManager() method.
418 * @covers ::languageManager
420 public function testLanguageManager() {
421 $this->setMockContainerService('language_manager');
422 $this->assertNotNull(\Drupal::languageManager());
426 * Tests the csrfToken() method.
428 * @covers ::csrfToken
430 public function testCsrfToken() {
431 $this->setMockContainerService('csrf_token');
432 $this->assertNotNull(\Drupal::csrfToken());
436 * Tests the transliteration() method.
438 * @covers ::transliteration
440 public function testTransliteration() {
441 $this->setMockContainerService('transliteration');
442 $this->assertNotNull(\Drupal::transliteration());
446 * Tests the formBuilder() method.
448 * @covers ::formBuilder
450 public function testFormBuilder() {
451 $this->setMockContainerService('form_builder');
452 $this->assertNotNull(\Drupal::formBuilder());
456 * Tests the menuTree() method.
460 public function testMenuTree() {
461 $this->setMockContainerService('menu.link_tree');
462 $this->assertNotNull(\Drupal::menuTree());
466 * Tests the pathValidator() method.
468 * @covers ::pathValidator
470 public function testPathValidator() {
471 $this->setMockContainerService('path.validator');
472 $this->assertNotNull(\Drupal::pathValidator());
476 * Tests the accessManager() method.
478 * @covers ::accessManager
480 public function testAccessManager() {
481 $this->setMockContainerService('access_manager');
482 $this->assertNotNull(\Drupal::accessManager());
486 * Sets up a mock expectation for the container get() method.
488 * @param string $service_name
489 * The service name to expect for the get() method.
490 * @param mixed $return
491 * The value to return from the mocked container get() method.
493 protected function setMockContainerService($service_name, $return = NULL) {
494 $expects = $this->container->expects($this->once())
496 ->with($service_name);
498 if (isset($return)) {
499 $expects->will($this->returnValue($return));
502 $expects->will($this->returnValue(TRUE));
505 \Drupal::setContainer($this->container);