BrowserLanguageDetectTest   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 17
c 0
b 0
f 0
dl 0
loc 43
rs 10
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testClassIsInvokable() 0 4 1
A testFetchLanguageResults() 0 10 1
A data() 0 10 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Lochmueller\LanguageDetection\Tests\Unit\Detect;
6
7
use Lochmueller\LanguageDetection\Detect\BrowserLanguageDetect;
8
use Lochmueller\LanguageDetection\Event\DetectUserLanguagesEvent;
9
use Lochmueller\LanguageDetection\Tests\Unit\AbstractUnitTest;
10
use TYPO3\CMS\Core\Http\ServerRequest;
11
use TYPO3\CMS\Core\Site\Entity\SiteInterface;
12
13
/**
14
 * @internal
15
 *
16
 * @coversNothing
17
 */
18
class BrowserLanguageDetectTest extends AbstractUnitTest
19
{
20
    public function testClassIsInvokable(): void
21
    {
22
        $class = new BrowserLanguageDetect();
23
        self::assertIsCallable($class);
24
    }
25
26
    /**
27
     * @dataProvider data
28
     *
29
     * @covers \Lochmueller\LanguageDetection\Detect\BrowserLanguageDetect
30
     * @covers \Lochmueller\LanguageDetection\Domain\Collection\LocaleCollection
31
     * @covers \Lochmueller\LanguageDetection\Domain\Model\Dto\LocaleValueObject
32
     * @covers \Lochmueller\LanguageDetection\Event\DetectUserLanguagesEvent
33
     *
34
     * @param string[] $result
35
     */
36
    public function testFetchLanguageResults(string $acceptLanguage, array $result): void
37
    {
38
        $siteMock = $this->createMock(SiteInterface::class);
39
        $serverRequest = new ServerRequest(null, null, 'php://input', ['accept-language' => $acceptLanguage]);
40
        $event = new DetectUserLanguagesEvent($siteMock, $serverRequest);
41
42
        $class = new BrowserLanguageDetect();
43
        $class($event);
44
45
        self::assertEquals($result, $event->getUserLanguages()->toArray());
46
    }
47
48
    /**
49
     * @return array<string, array<int, array<int, string>|string>>
50
     */
51
    public static function data(): array
52
    {
53
        return [
54
            'empty' => ['', []],
55
            'default' => ['de', ['de']],
56
            'default locale' => ['de-CH', ['de-CH']],
57
            'multiple locale incl. quality and spaces' => ['fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5', ['fr-CH', 'fr', 'en', 'de', '*']],
58
            'multiple locale incl. quality' => ['en-US,en;q=0.5', ['en-US', 'en']],
59
            'multiple locale incl. quality in wrong order' => ['en-US;q=0.5,en', ['en', 'en-US']],
60
            'multiple locale incl. quality and q = 0' => ['en-US;q=0.0,en', ['en']],
61
        ];
62
    }
63
}
64