Completed
Push — master ( d0ca26...98fb90 )
by mw
37:57
created

testPrepareWithLanguageWithoutFallback()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 35
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 22
nc 1
nop 0
dl 0
loc 35
rs 8.8571
c 0
b 0
f 0
1
<?php
2
3
namespace SMW\Tests\ExtraneousLanguage;
4
5
use SMW\ExtraneousLanguage\LanguageFileContentsReader;
6
use SMW\ExtraneousLanguage\LanguageContents;
7
use SMW\ExtraneousLanguage\LanguageFallbackFinder;
8
9
/**
10
 * @covers \SMW\ExtraneousLanguage\LanguageContents
11
 * @group semantic-mediawiki
12
 *
13
 * @license GNU GPL v2+
14
 * @since 2.5
15
 *
16
 * @author mwjames
17
 */
18
class LanguageContentsTest extends \PHPUnit_Framework_TestCase {
19
20
	public function testCanConstruct() {
21
22
		$languageFileContentsReader = $this->getMockBuilder( LanguageFileContentsReader::class )
23
			->disableOriginalConstructor()
24
			->getMock();
25
26
		$languageFallbackFinder = $this->getMockBuilder( LanguageFallbackFinder::class )
27
			->disableOriginalConstructor()
28
			->getMock();
29
30
		$this->assertInstanceOf(
31
			LanguageContents::class,
32
			new LanguageContents( $languageFileContentsReader, $languageFallbackFinder )
33
		);
34
	}
35
36
	public function testGetCanonicalFallbackLanguageCode() {
37
38
		$languageFileContentsReader = $this->getMockBuilder( LanguageFileContentsReader::class )
39
			->disableOriginalConstructor()
40
			->getMock();
41
42
		$languageFallbackFinder = $this->getMockBuilder( LanguageFallbackFinder::class )
43
			->disableOriginalConstructor()
44
			->getMock();
45
46
		$languageFallbackFinder->expects( $this->atLeastOnce() )
47
			->method( 'getCanonicalFallbackLanguageCode' );
48
49
		$instance = new LanguageContents(
50
			$languageFileContentsReader,
51
			$languageFallbackFinder
52
		);
53
54
		$instance->getCanonicalFallbackLanguageCode();
0 ignored issues
show
Unused Code introduced by
The call to the method SMW\ExtraneousLanguage\L...lFallbackLanguageCode() seems un-needed as the method has no side-effects.

PHP Analyzer performs a side-effects analysis of your code. A side-effect is basically anything that might be visible after the scope of the method is left.

Let’s take a look at an example:

class User
{
    private $email;

    public function getEmail()
    {
        return $this->email;
    }

    public function setEmail($email)
    {
        $this->email = $email;
    }
}

If we look at the getEmail() method, we can see that it has no side-effect. Whether you call this method or not, no future calls to other methods are affected by this. As such code as the following is useless:

$user = new User();
$user->getEmail(); // This line could safely be removed as it has no effect.

On the hand, if we look at the setEmail(), this method _has_ side-effects. In the following case, we could not remove the method call:

$user = new User();
$user->setEmail('email@domain'); // This line has a side-effect (it changes an
                                 // instance variable).
Loading history...
55
	}
56
57
	public function testPrepareWithLanguageWithoutFallback() {
58
59
		$languageCode = 'Foo';
60
61
		$languageFileContentsReader = $this->getMockBuilder( LanguageFileContentsReader::class )
62
			->disableOriginalConstructor()
63
			->getMock();
64
65
		$languageFileContentsReader->expects( $this->atLeastOnce() )
66
			->method( 'canReadByLanguageCode' )
67
			->will( $this->returnValue( true ) );
68
69
		$languageFileContentsReader->expects( $this->atLeastOnce() )
70
			->method( 'readByLanguageCode' )
71
			->with( $this->equalTo( $languageCode ) );
72
73
		$languageFallbackFinder = $this->getMockBuilder( LanguageFallbackFinder::class )
74
			->disableOriginalConstructor()
75
			->getMock();
76
77
		$instance = new LanguageContents(
78
			$languageFileContentsReader,
79
			$languageFallbackFinder
80
		);
81
82
		$this->assertFalse(
83
			$instance->has( $languageCode )
84
		);
85
86
		$instance->prepareWithLanguage( $languageCode );
87
88
		$this->assertTrue(
89
			$instance->has( $languageCode )
90
		);
91
	}
92
93
	public function testGetFromLanguageWithIndexWithFallback() {
94
95
		$languageCode = 'Foo';
96
		$fallback = 'Foobar';
97
98
		$languageFileContentsReader = $this->getMockBuilder( LanguageFileContentsReader::class )
99
			->disableOriginalConstructor()
100
			->getMock();
101
102
		$languageFileContentsReader->expects( $this->at( 0 ) )
103
			->method( 'readByLanguageCode' )
104
			->with( $this->equalTo( $languageCode ) )
105
			->will( $this->returnValue( array() ) );
106
107
		$languageFileContentsReader->expects( $this->at( 1 ) )
108
			->method( 'readByLanguageCode' )
109
			->with( $this->equalTo( $fallback ) )
110
			->will( $this->returnValue( array( 'Bar' => 123 ) ) );
111
112
		$languageFallbackFinder = $this->getMockBuilder( LanguageFallbackFinder::class )
113
			->disableOriginalConstructor()
114
			->getMock();
115
116
		$languageFallbackFinder->expects( $this->atLeastOnce() )
117
			->method( 'getCanonicalFallbackLanguageCode' )
118
			->will( $this->returnValue( 'en' ) );
119
120
		$languageFallbackFinder->expects( $this->at( 1 ) )
121
			->method( 'getFallbackLanguageBy' )
122
			->will( $this->returnValue( $fallback ) );
123
124
		$instance = new LanguageContents(
125
			$languageFileContentsReader,
126
			$languageFallbackFinder
127
		);
128
129
130
		$this->assertEquals(
131
			123,
132
			$instance->getFromLanguageWithIndex( $languageCode, 'Bar' )
133
		);
134
	}
135
136
	public function testGetFromLanguageWithIndexWithFallbackButMissingIndexThrowsException() {
137
138
		$languageCode = 'Foo';
139
		$fallback = 'Foobar';
140
141
		$languageFileContentsReader = $this->getMockBuilder( LanguageFileContentsReader::class )
142
			->disableOriginalConstructor()
143
			->getMock();
144
145
		$languageFileContentsReader->expects( $this->at( 0 ) )
146
			->method( 'readByLanguageCode' )
147
			->with( $this->equalTo( $languageCode ) )
148
			->will( $this->returnValue( array() ) );
149
150
		$languageFileContentsReader->expects( $this->at( 1 ) )
151
			->method( 'readByLanguageCode' )
152
			->with( $this->equalTo( $fallback ) )
153
			->will( $this->returnValue( array() ) );
154
155
		$languageFallbackFinder = $this->getMockBuilder( LanguageFallbackFinder::class )
156
			->disableOriginalConstructor()
157
			->getMock();
158
159
		$languageFallbackFinder->expects( $this->atLeastOnce() )
160
			->method( 'getCanonicalFallbackLanguageCode' )
161
			->will( $this->returnValue( 'en' ) );
162
163
		$languageFallbackFinder->expects( $this->at( 1 ) )
164
			->method( 'getFallbackLanguageBy' )
165
			->will( $this->returnValue( $fallback ) );
166
167
		$languageFallbackFinder->expects( $this->at( 3 ) )
168
			->method( 'getFallbackLanguageBy' )
169
			->will( $this->returnValue( 'en' ) );
170
171
		$instance = new LanguageContents(
172
			$languageFileContentsReader,
173
			$languageFallbackFinder
174
		);
175
176
		$this->setExpectedException( 'RuntimeException' );
177
		$instance->getFromLanguageWithIndex( $languageCode, 'Bar' );
178
	}
179
180
}
181