Completed
Push — master ( cf2d59...36802d )
by André
16:28
created

MultiLanguageTestTrait   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 101
Duplicated Lines 25.74 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

Changes 0
Metric Value
dl 26
loc 101
rs 10
c 0
b 0
f 0
wmc 9
lcom 0
cbo 2

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testGetMultiLanguagePrioritizedName() 13 13 2
B testGetMultiLanguageDefaultName() 0 24 2
A testGetMultiLanguagePrioritizedDescription() 13 13 2
B testGetMultiLanguageDefaultDescription() 0 25 3

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
/**
4
 * This file is part of the eZ Publish Kernel package.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 */
9
namespace eZ\Publish\Core\Repository\Tests\Values;
10
11
use eZ\Publish\SPI\Repository\Values\MultiLanguageDescription;
12
use eZ\Publish\SPI\Repository\Values\MultiLanguageName;
13
use ReflectionClass;
14
15
/**
16
 * Test internal functionality defined by MultiLanguage* Traits.
17
 *
18
 * Note: this test trait assumes object defines names and descriptions in eng-US and pol-PL.
19
 */
20
trait MultiLanguageTestTrait
21
{
22
    /**
23
     * @depends testNewClassWithMultiLanguageProperties
24
     *
25
     * @param \eZ\Publish\SPI\Repository\Values\MultiLanguageName $object tested ValueObject
26
     */
27 View Code Duplication
    public function testGetMultiLanguagePrioritizedName($object)
28
    {
29
        if (!$object instanceof MultiLanguageName) {
30
            self::markTestSkipped(
31
                get_class($object) . ' does not implement ' . MultiLanguageName::class
32
            );
33
        }
34
35
        $names = $object->getNames();
36
        self::assertSame($names['pol-PL'], $object->getName());
37
        self::assertSame($names['eng-US'], $object->getName('eng-US'));
38
        self::assertSame($names['pol-PL'], $object->getName('pol-PL'));
39
    }
40
41
    /**
42
     * @depends testNewClassWithMultiLanguageProperties
43
     *
44
     * @param \eZ\Publish\SPI\Repository\Values\MultiLanguageName $object tested ValueObject
45
     */
46
    public function testGetMultiLanguageDefaultName($object)
47
    {
48
        if (!$object instanceof MultiLanguageName) {
49
            self::markTestSkipped(
50
                get_class($object) . ' does not implement ' . MultiLanguageName::class
51
            );
52
        }
53
54
        $reflection = new ReflectionClass($object);
55
        $prioritizedLanguagesProperty = $reflection->getProperty('prioritizedLanguages');
56
        $defaultLanguageProperty = $reflection->getProperty('mainLanguageCode');
57
58
        // set not defined language to force default one
59
        $prioritizedLanguagesProperty->setAccessible(true);
60
        $prioritizedLanguagesProperty->setValue($object, ['ger-DE']);
61
62
        $names = $object->getNames();
63
        self::assertSame($names['eng-US'], $object->getName());
64
65
        // set other defined language as default
66
        $defaultLanguageProperty->setAccessible(true);
67
        $defaultLanguageProperty->setValue($object, 'pol-PL');
68
        self::assertSame($names['pol-PL'], $object->getName());
69
    }
70
71
    /**
72
     * @depends testNewClassWithMultiLanguageProperties
73
     *
74
     * @param \eZ\Publish\SPI\Repository\Values\MultiLanguageDescription $object tested ValueObject
75
     */
76 View Code Duplication
    public function testGetMultiLanguagePrioritizedDescription($object)
77
    {
78
        if (!$object instanceof MultiLanguageDescription) {
79
            self::markTestSkipped(
80
                get_class($object) . ' does not implement ' . MultiLanguageDescription::class
81
            );
82
        }
83
84
        $names = $object->getDescriptions();
85
        self::assertSame($names['pol-PL'], $object->getDescription());
86
        self::assertSame($names['eng-US'], $object->getDescription('eng-US'));
87
        self::assertSame($names['pol-PL'], $object->getDescription('pol-PL'));
88
    }
89
90
    /**
91
     * @depends testNewClassWithMultiLanguageProperties
92
     *
93
     * @param \eZ\Publish\SPI\Repository\Values\MultiLanguageDescription $object tested ValueObject
94
     */
95
    public function testGetMultiLanguageDefaultDescription($object)
96
    {
97
        if (!$object instanceof MultiLanguageDescription) {
98
            self::markTestSkipped(
99
                get_class($object) . ' does not implement ' . MultiLanguageDescription::class
100
            );
101
        }
102
103
        $reflection = new ReflectionClass($object);
104
        $prioritizedLanguagesProperty = $reflection->getProperty('prioritizedLanguages');
105
106
        $defaultLanguageProperty = $reflection->getProperty('mainLanguageCode');
107
        $defaultLanguageProperty->setAccessible(true);
108
109
        // set not defined language to force default one
110
        $prioritizedLanguagesProperty->setAccessible(true);
111
        $prioritizedLanguagesProperty->setValue($object, ['ger-DE']);
112
113
        $descriptions = $object->getDescriptions();
114
        foreach ($descriptions as $languageCode => $description) {
115
            // set $languageCode as default
116
            $defaultLanguageProperty->setValue($object, $languageCode);
117
            self::assertSame($description, $object->getDescription());
118
        }
119
    }
120
}
121