[TASK] Shorten the extend class in all unit tests
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Tests / Unit / Locking / LockFactoryTest.php
1 <?php
2 namespace TYPO3\CMS\Core\Tests\Unit\Locking;
3
4 /*
5 * This file is part of the TYPO3 CMS project.
6 *
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
10 *
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
13 *
14 * The TYPO3 project - inspiring people to share!
15 */
16
17 use TYPO3\CMS\Core\Locking\Exception\LockCreateException;
18 use TYPO3\CMS\Core\Locking\FileLockStrategy;
19 use TYPO3\CMS\Core\Locking\LockFactory;
20 use TYPO3\CMS\Core\Locking\LockingStrategyInterface;
21 use TYPO3\CMS\Core\Locking\SemaphoreLockStrategy;
22 use TYPO3\CMS\Core\Tests\Unit\Locking\Fixtures\DummyLock;
23 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
24
25 /**
26 * Testcase for \TYPO3\CMS\Core\Locking\LockFactory
27 */
28 class LockFactoryTest extends UnitTestCase
29 {
30 /**
31 * @var LockFactory|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface
32 */
33 protected $mockFactory;
34
35 /**
36 * Set up the tests
37 */
38 protected function setUp()
39 {
40 $this->mockFactory = $this->getAccessibleMock(LockFactory::class, ['dummy']);
41 }
42
43 /**
44 * @test
45 */
46 public function addLockingStrategyAddsTheClassNameToTheInternalArray()
47 {
48 $this->mockFactory->addLockingStrategy(DummyLock::class);
49 $this->assertArrayHasKey(DummyLock::class, $this->mockFactory->_get('lockingStrategy'));
50 }
51
52 /**
53 * @test
54 */
55 public function addLockingStrategyThrowsExceptionIfInterfaceIsNotImplemented()
56 {
57 $this->expectException(\InvalidArgumentException::class);
58 $this->expectExceptionCode(1425990198);
59
60 $this->mockFactory->addLockingStrategy(\stdClass::class);
61 }
62
63 /**
64 * @test
65 */
66 public function getLockerReturnsExpectedClass()
67 {
68 $this->mockFactory->_set('lockingStrategy', [FileLockStrategy::class => true, DummyLock::class => true]);
69 $locker = $this->mockFactory->createLocker('id', LockingStrategyInterface::LOCK_CAPABILITY_EXCLUSIVE | LockingStrategyInterface::LOCK_CAPABILITY_SHARED);
70 $this->assertInstanceOf(FileLockStrategy::class, $locker);
71 }
72
73 /**
74 * @test
75 */
76 public function getLockerReturnsClassWithHighestPriority()
77 {
78 $this->mockFactory->_set('lockingStrategy', [SemaphoreLockStrategy::class => true, DummyLock::class => true]);
79 $locker = $this->mockFactory->createLocker('id');
80 $this->assertInstanceOf(DummyLock::class, $locker);
81 }
82
83 /**
84 * @test
85 */
86 public function getLockerThrowsExceptionIfNoMatchFound()
87 {
88 $this->expectException(LockCreateException::class);
89 $this->expectExceptionCode(1425990190);
90
91 $this->mockFactory->createLocker('id', 32);
92 }
93 }