Completed
Push — master ( e476cc...97f192 )
by mw
9s
created

testRevisionMode()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 30
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 30
rs 8.8571
cc 1
eloc 20
nc 1
nop 0
1
<?php
2
3
namespace SIL\Tests;
4
5
use SIL\InterlanguageLinkParserFunction;
6
7
/**
8
 * @covers \SIL\InterlanguageLinkParserFunction
9
 * @group semantic-interlanguage-links
10
 *
11
 * @license GNU GPL v2+
12
 * @since 1.0
13
 *
14
 * @author mwjames
15
 */
16
class InterlanguageLinkParserFunctionTest extends \PHPUnit_Framework_TestCase {
17
18
	public function testCanConstruct() {
19
20
		$title = $this->getMockBuilder( '\Title' )
21
			->disableOriginalConstructor()
22
			->getMock();
23
24
		$languageLinkAnnotator = $this->getMockBuilder( '\SIL\LanguageLinkAnnotator' )
25
			->disableOriginalConstructor()
26
			->getMock();
27
28
		$siteLanguageLinksParserOutputAppender = $this->getMockBuilder( '\SIL\SiteLanguageLinksParserOutputAppender' )
29
			->disableOriginalConstructor()
30
			->getMock();
31
32
		$this->assertInstanceOf(
33
			'\SIL\InterlanguageLinkParserFunction',
34
			new InterlanguageLinkParserFunction(
35
				$title,
36
				$languageLinkAnnotator,
37
				$siteLanguageLinksParserOutputAppender
38
			)
39
		);
40
	}
41
42
	public function testTryParseThatCausesErrorMessage() {
43
44
		$title = $this->getMockBuilder( '\Title' )
45
			->disableOriginalConstructor()
46
			->getMock();
47
48
		$languageLinkAnnotator = $this->getMockBuilder( '\SIL\LanguageLinkAnnotator' )
49
			->disableOriginalConstructor()
50
			->getMock();
51
52
		$siteLanguageLinksParserOutputAppender = $this->getMockBuilder( '\SIL\SiteLanguageLinksParserOutputAppender' )
53
			->disableOriginalConstructor()
54
			->getMock();
55
56
		$instance = new InterlanguageLinkParserFunction(
57
			$title,
58
			$languageLinkAnnotator,
59
			$siteLanguageLinksParserOutputAppender
60
		);
61
62
		$instance->setInterlanguageLinksHideState( true );
63
64
		$this->assertInternalType(
65
			'string',
66
			$instance->parse( 'en', 'Foo' )
67
		);
68
69
		$instance->setInterlanguageLinksHideState( false );
70
71
		$this->assertInternalType(
72
			'string',
73
			$instance->parse( '%42$', 'Foo' )
74
		);
75
76
		$this->assertContains(
77
			'-error',
78
			$instance->parse( '', 'Foo' )
79
		);
80
81
		$this->assertContains(
82
			'-error',
83
			$instance->parse( 'en', '{[[:Template:Foo]]' )
84
		);
85
	}
86
87
	public function testParseToCreateErrorMessageForKnownTarget() {
88
89
		$title = \Title::newFromText( __METHOD__ );
90
91
		$languageLinkAnnotator = $this->getMockBuilder( '\SIL\LanguageLinkAnnotator' )
92
			->disableOriginalConstructor()
93
			->getMock();
94
95
		$languageLinkAnnotator->expects( $this->never() )
96
			->method( 'addAnnotationForInterlanguageLink' );
97
98
		$siteLanguageLinksParserOutputAppender = $this->getMockBuilder( '\SIL\SiteLanguageLinksParserOutputAppender' )
99
			->disableOriginalConstructor()
100
			->getMock();
101
102
		$siteLanguageLinksParserOutputAppender->expects( $this->once() )
103
			->method( 'getRedirectTargetFor' )
104
			->with(	$this->equalTo( \Title::newFromText( 'Foo' ) ) )
105
			->will( $this->returnValue( $title ) );
106
107
		$siteLanguageLinksParserOutputAppender->expects( $this->once() )
108
			->method( 'tryAddLanguageTargetLinksToOutput' )
109
			->with(
110
				$this->anything(),
111
				$this->equalTo( $title ) )
112
			->will( $this->returnValue( 'Foo' ) );
113
114
		$instance = new InterlanguageLinkParserFunction(
115
			$title,
116
			$languageLinkAnnotator,
117
			$siteLanguageLinksParserOutputAppender
118
		);
119
120
		$instance->setInterlanguageLinksHideState( false );
121
122
		$this->assertContains(
123
			'-error',
124
			$instance->parse( 'en', 'Foo' )
125
		);
126
	}
127
128
	public function testMultipleParseCalls() {
129
130
		$title = \Title::newFromText( __METHOD__ );
131
132
		$languageLinkAnnotator = $this->getMockBuilder( '\SIL\LanguageLinkAnnotator' )
133
			->disableOriginalConstructor()
134
			->getMock();
135
136
		$siteLanguageLinksParserOutputAppender = $this->getMockBuilder( '\SIL\SiteLanguageLinksParserOutputAppender' )
137
			->disableOriginalConstructor()
138
			->getMock();
139
140
		$siteLanguageLinksParserOutputAppender->expects( $this->any() )
141
			->method( 'getRedirectTargetFor' )
142
			->will( $this->returnValue( $title ) );
143
144
		$instance = new InterlanguageLinkParserFunction(
145
			$title,
146
			$languageLinkAnnotator,
147
			$siteLanguageLinksParserOutputAppender
148
		);
149
150
		$this->assertContains(
151
			'div class="sil-interlanguagelink"',
152
			$instance->parse( 'en', 'Foo' )
153
		);
154
155
		$this->assertContains(
156
			'div class="sil-interlanguagelink"',
157
			$instance->parse( 'en', 'Foo' )
158
		);
159
	}
160
161
	public function testMultipleParseCallsWithDifferentLanguagesTriggersErrorMessage() {
162
163
		$title = \Title::newFromText( __METHOD__ );
164
165
		$languageLinkAnnotator = $this->getMockBuilder( '\SIL\LanguageLinkAnnotator' )
166
			->disableOriginalConstructor()
167
			->getMock();
168
169
		$languageLinkAnnotator->expects( $this->any() )
170
			->method( 'hasDifferentLanguageAnnotation' )
171
			->will( $this->onConsecutiveCalls( false, true ) );
172
173
		$siteLanguageLinksParserOutputAppender = $this->getMockBuilder( '\SIL\SiteLanguageLinksParserOutputAppender' )
174
			->disableOriginalConstructor()
175
			->getMock();
176
177
		$siteLanguageLinksParserOutputAppender->expects( $this->any() )
178
			->method( 'getRedirectTargetFor' )
179
			->will( $this->returnValue( $title ) );
180
181
		$instance = new InterlanguageLinkParserFunction(
182
			$title,
183
			$languageLinkAnnotator,
184
			$siteLanguageLinksParserOutputAppender
185
		);
186
187
		$instance->parse( 'en', 'Foo' );
188
189
		$this->assertContains(
190
			'-error',
191
			$instance->parse( 'fr', 'Foo' )
192
		);
193
	}
194
195
	public function testParse() {
196
197
		$title = $this->getMockBuilder( '\Title' )
198
			->disableOriginalConstructor()
199
			->getMock();
200
201
		$languageLinkAnnotator = $this->getMockBuilder( '\SIL\LanguageLinkAnnotator' )
202
			->disableOriginalConstructor()
203
			->getMock();
204
205
		$languageLinkAnnotator->expects( $this->once() )
206
			->method( 'addAnnotationForInterlanguageLink' );
207
208
		$siteLanguageLinksParserOutputAppender = $this->getMockBuilder( '\SIL\SiteLanguageLinksParserOutputAppender' )
209
			->disableOriginalConstructor()
210
			->getMock();
211
212
		$siteLanguageLinksParserOutputAppender->expects( $this->any() )
213
			->method( 'getRedirectTargetFor' )
214
			->will( $this->returnValue( $title ) );
215
216
		$instance = new InterlanguageLinkParserFunction(
217
			$title,
218
			$languageLinkAnnotator,
219
			$siteLanguageLinksParserOutputAppender
220
		);
221
222
		$instance->setInterlanguageLinksHideState( false );
223
224
		$this->assertContains(
225
			'div class="sil-interlanguagelink"',
226
			$instance->parse( 'en', 'Foo' )
227
		);
228
	}
229
230
	public function testRevisionMode() {
231
232
		$title = $this->getMockBuilder( '\Title' )
233
			->disableOriginalConstructor()
234
			->getMock();
235
236
		$languageLinkAnnotator = $this->getMockBuilder( '\SIL\LanguageLinkAnnotator' )
237
			->disableOriginalConstructor()
238
			->getMock();
239
240
		$siteLanguageLinksParserOutputAppender = $this->getMockBuilder( '\SIL\SiteLanguageLinksParserOutputAppender' )
241
			->disableOriginalConstructor()
242
			->getMock();
243
244
		$siteLanguageLinksParserOutputAppender->expects( $this->any() )
245
			->method( 'getRedirectTargetFor' )
246
			->will( $this->returnValue( $title ) );
247
248
		$instance = new InterlanguageLinkParserFunction(
249
			$title,
250
			$languageLinkAnnotator,
251
			$siteLanguageLinksParserOutputAppender
252
		);
253
254
		$instance->setRevisionModeState( true );
255
256
		$this->assertEmpty(
257
			$instance->parse( 'en', 'Foo' )
258
		);
259
	}
260
261
}
262