testGetFunctions()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 58
Code Lines 44

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 44
dl 0
loc 58
rs 9.216
c 1
b 0
f 0
cc 1
nc 1
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/*
4
 * This file is part of the core-bundle package.
5
 *
6
 * (c) 2017 WEBEWEB
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace WBW\Bundle\CoreBundle\Tests\Twig\Extension\Assets;
13
14
use Symfony\Component\Filesystem\Exception\FileNotFoundException;
15
use Throwable;
16
use Twig\Extension\ExtensionInterface;
17
use Twig\Node\Node;
18
use Twig\TwigFilter;
19
use Twig\TwigFunction;
20
use WBW\Bundle\CoreBundle\Assets\SyntaxHighlighter\SyntaxHighlighterConfig;
21
use WBW\Bundle\CoreBundle\Assets\SyntaxHighlighter\SyntaxHighlighterDefaults;
22
use WBW\Bundle\CoreBundle\Assets\SyntaxHighlighter\SyntaxHighlighterStrings;
23
use WBW\Bundle\CoreBundle\Tests\AbstractTestCase;
24
use WBW\Bundle\CoreBundle\Twig\Extension\Assets\SyntaxHighlighterTwigExtension;
25
26
/**
27
 * SyntaxHighlighter Twig extension test.
28
 *
29
 * @author webeweb <https://github.com/webeweb>
30
 * @package WBW\Bundle\CoreBundle\Tests\Twig\Extension\Assets
31
 */
32
class SyntaxHighlighterTwigExtensionTest extends AbstractTestCase {
33
34
    /**
35
     * SyntaxHighlighter config.
36
     *
37
     * @var SyntaxHighlighterConfig
38
     */
39
    private $syntaxHighlighterConfig;
40
41
    /**
42
     * SyntaxHighlighter defaults.
43
     *
44
     * @var SyntaxHighlighterDefaults
45
     */
46
    private $syntaxHighlighterDefaults;
47
48
    /**
49
     * SyntaxHighlighter strings.
50
     *
51
     * @var SyntaxHighlighterStrings
52
     */
53
    private $syntaxHighlighterStrings;
54
55
    /**
56
     * {@inheritDoc}
57
     */
58
    protected function setUp(): void {
59
        parent::setUp();
60
61
        // Set a SyntaxHighlighter config mock.
62
        $this->syntaxHighlighterConfig = new SyntaxHighlighterConfig();
63
64
        // Set a SyntaxHighlighter defauls mock.
65
        $this->syntaxHighlighterDefaults = new SyntaxHighlighterDefaults();
66
67
        // Set a SyntaxHighlighter strings mock.
68
        $this->syntaxHighlighterStrings = new SyntaxHighlighterStrings();
69
    }
70
71
    /**
72
     * Test getFilters()
73
     *
74
     * @return void
75
     */
76
    public function testGetFilters(): void {
77
78
        $obj = new SyntaxHighlighterTwigExtension($this->twigEnvironment);
79
80
        $res = $obj->getFilters();
81
        $this->assertCount(2, $res);
82
83
        $i = -1;
84
85
        $this->assertInstanceOf(TwigFilter::class, $res[++$i]);
86
        $this->assertEquals("syntaxHighlighterScript", $res[$i]->getName());
87
        $this->assertEquals([$obj, "syntaxHighlighterScriptFilter"], $res[$i]->getCallable());
88
        $this->assertEquals(["html"], $res[$i]->getSafe(new Node()));
89
90
        $this->assertInstanceOf(TwigFilter::class, $res[++$i]);
91
        $this->assertEquals("shScript", $res[$i]->getName());
92
        $this->assertEquals([$obj, "syntaxHighlighterScriptFilter"], $res[$i]->getCallable());
93
        $this->assertEquals(["html"], $res[$i]->getSafe(new Node()));
94
    }
95
96
    /**
97
     * Test getFunctions()
98
     *
99
     * @return void
100
     */
101
    public function testGetFunctions(): void {
102
103
        $obj = new SyntaxHighlighterTwigExtension($this->twigEnvironment);
104
105
        $res = $obj->getFunctions();
106
        $this->assertCount(10, $res);
107
108
        $i = -1;
109
110
        $this->assertInstanceOf(TwigFunction::class, $res[++$i]);
111
        $this->assertEquals("syntaxHighlighterConfig", $res[$i]->getName());
112
        $this->assertEquals([$obj, "syntaxHighlighterConfigFunction"], $res[$i]->getCallable());
113
        $this->assertEquals(["html"], $res[$i]->getSafe(new Node()));
114
115
        $this->assertInstanceOf(TwigFunction::class, $res[++$i]);
116
        $this->assertEquals("shConfig", $res[$i]->getName());
117
        $this->assertEquals([$obj, "syntaxHighlighterConfigFunction"], $res[$i]->getCallable());
118
        $this->assertEquals(["html"], $res[$i]->getSafe(new Node()));
119
120
        $this->assertInstanceOf(TwigFunction::class, $res[++$i]);
121
        $this->assertEquals("syntaxHighlighterContent", $res[$i]->getName());
122
        $this->assertEquals([$obj, "syntaxHighlighterContentFunction"], $res[$i]->getCallable());
123
        $this->assertEquals(["html"], $res[$i]->getSafe(new Node()));
124
125
        $this->assertInstanceOf(TwigFunction::class, $res[++$i]);
126
        $this->assertEquals("shContent", $res[$i]->getName());
127
        $this->assertEquals([$obj, "syntaxHighlighterContentFunction"], $res[$i]->getCallable());
128
        $this->assertEquals(["html"], $res[$i]->getSafe(new Node()));
129
130
        $this->assertInstanceOf(TwigFunction::class, $res[++$i]);
131
        $this->assertEquals("syntaxHighlighterDefaults", $res[$i]->getName());
132
        $this->assertEquals([$obj, "syntaxHighlighterDefaultsFunction"], $res[$i]->getCallable());
133
        $this->assertEquals(["html"], $res[$i]->getSafe(new Node()));
134
135
        $this->assertInstanceOf(TwigFunction::class, $res[++$i]);
136
        $this->assertEquals("shDefaults", $res[$i]->getName());
137
        $this->assertEquals([$obj, "syntaxHighlighterDefaultsFunction"], $res[$i]->getCallable());
138
        $this->assertEquals(["html"], $res[$i]->getSafe(new Node()));
139
140
        $this->assertInstanceOf(TwigFunction::class, $res[++$i]);
141
        $this->assertEquals("syntaxHighlighterScript", $res[$i]->getName());
142
        $this->assertEquals([$obj, "syntaxHighlighterScriptFilter"], $res[$i]->getCallable());
143
        $this->assertEquals(["html"], $res[$i]->getSafe(new Node()));
144
145
        $this->assertInstanceOf(TwigFunction::class, $res[++$i]);
146
        $this->assertEquals("shScript", $res[$i]->getName());
147
        $this->assertEquals([$obj, "syntaxHighlighterScriptFilter"], $res[$i]->getCallable());
148
        $this->assertEquals(["html"], $res[$i]->getSafe(new Node()));
149
150
        $this->assertInstanceOf(TwigFunction::class, $res[++$i]);
151
        $this->assertEquals("syntaxHighlighterStrings", $res[$i]->getName());
152
        $this->assertEquals([$obj, "syntaxHighlighterStringsFunction"], $res[$i]->getCallable());
153
        $this->assertEquals(["html"], $res[$i]->getSafe(new Node()));
154
155
        $this->assertInstanceOf(TwigFunction::class, $res[++$i]);
156
        $this->assertEquals("shStrings", $res[$i]->getName());
157
        $this->assertEquals([$obj, "syntaxHighlighterStringsFunction"], $res[$i]->getCallable());
158
        $this->assertEquals(["html"], $res[$i]->getSafe(new Node()));
159
    }
160
161
    /**
162
     * Test syntaxHighlighterConfigFunction()
163
     *
164
     * @return void
165
     */
166
    public function testSyntaxHighlighterConfigFunction(): void {
167
168
        // Set the SyntaxHighlighter config mock.
169
        $this->syntaxHighlighterConfig->setBloggerMode(true);
170
        $this->syntaxHighlighterConfig->setStripBrs(true);
171
        $this->syntaxHighlighterConfig->setTagName("blockquote");
172
173
        $obj = new SyntaxHighlighterTwigExtension($this->twigEnvironment);
174
175
        $exp = file_get_contents(__DIR__ . "/testSyntaxHighlighterConfigFunction.html.txt");
176
177
        $this->assertEquals($exp, $obj->syntaxHighlighterConfigFunction($this->syntaxHighlighterConfig) . "\n");
178
    }
179
180
    /**
181
     * Test syntaxHighlighterConfigFunction()
182
     *
183
     * @return void
184
     */
185
    public function testSyntaxHighlighterConfigFunctionWithStrings(): void {
186
187
        // Set the SyntaxHighlighter config mock.
188
        $this->syntaxHighlighterConfig->setBloggerMode(true);
189
        $this->syntaxHighlighterConfig->setStripBrs(true);
190
        $this->syntaxHighlighterConfig->setTagName("blockquote");
191
192
        $this->syntaxHighlighterConfig->setStrings($this->syntaxHighlighterStrings);
193
194
        $obj = new SyntaxHighlighterTwigExtension($this->twigEnvironment);
195
196
        $exp = file_get_contents(__DIR__ . "/testSyntaxHighlighterConfigFunctionWithStrings.html.txt");
197
198
        $this->assertEquals($exp, $obj->syntaxHighlighterConfigFunction($this->syntaxHighlighterConfig) . "\n");
199
    }
200
201
    /**
202
     * Test syntaxHighlighterContentFunction()
203
     *
204
     * @return void
205
     * @throws Throwable Throws an exception if an error occurs.
206
     */
207
    public function testSyntaxHighlighterContentFunction(): void {
208
209
        $obj = new SyntaxHighlighterTwigExtension($this->twigEnvironment);
210
211
        $arg = [
212
            "content"  => "<span>span</span>",
213
            "language" => "html",
214
        ];
215
        $exp = file_get_contents(__DIR__ . "/testSyntaxHighlighterContentFunction.html.txt");
216
217
        $this->assertEquals($exp, $obj->syntaxHighlighterContentFunction($arg) . "\n");
218
    }
219
220
    /**
221
     * Test syntaxHighlighterContentFunction()
222
     *
223
     * @return void
224
     */
225
    public function testSyntaxHighlighterContentFunctionWithFileNotFoundException(): void {
226
227
        // Set a Filename mock.
228
        $filename = __DIR__ . "/SyntaxHighlighterTwigExtensionTest";
229
230
        $obj = new SyntaxHighlighterTwigExtension($this->twigEnvironment);
231
232
        $arg = [
233
            "filename" => $filename,
234
        ];
235
236
        try {
237
238
            $obj->syntaxHighlighterContentFunction($arg);
239
        } catch (Throwable $ex) {
240
241
            $this->assertInstanceOf(FileNotFoundException::class, $ex);
242
            $this->assertStringContainsString('/Tests/Twig/Extension/Assets/SyntaxHighlighterTwigExtensionTest" could not be found', $ex->getMessage());
243
        }
244
    }
245
246
    /**
247
     * Test syntaxHighlighterContentFunction()
248
     *
249
     * @return void
250
     * @throws Throwable Throws an exception if an error occurs.
251
     */
252
    public function testSyntaxHighlighterContentFunctionWithFilename(): void {
253
254
        // Set a Filename mock.
255
        $filename = realpath(__DIR__ . "/SyntaxHighlighterTwigExtensionTest.txt");
256
257
        $obj = new SyntaxHighlighterTwigExtension($this->twigEnvironment);
258
259
        $arg = [
260
            "filename" => $filename,
261
            "language" => "php",
262
        ];
263
        $exp = file_get_contents(__DIR__ . "/testSyntaxHighlighterContentFunctionWithFilename.html.txt");
264
265
        $this->assertEquals($exp, $obj->syntaxHighlighterContentFunction($arg) . "\n");
266
    }
267
268
    /**
269
     * Test syntaxHighlighterDefaultsFunction()
270
     *
271
     * @return void
272
     */
273
    public function testSyntaxHighlighterDefaultsFunction(): void {
274
275
        // Set the SyntaxHighlighter defaults mock.
276
        $this->syntaxHighlighterDefaults->setAutoLinks(false);
277
        $this->syntaxHighlighterDefaults->setClassName("classname");
278
        $this->syntaxHighlighterDefaults->setCollapse(true);
279
        $this->syntaxHighlighterDefaults->setFirstLine(0);
280
        $this->syntaxHighlighterDefaults->setGutter(false);
281
        $this->syntaxHighlighterDefaults->setHighlight([1, 2, 3]);
282
        $this->syntaxHighlighterDefaults->setHtmlScript(true);
283
        $this->syntaxHighlighterDefaults->setSmartTabs(false);
284
        $this->syntaxHighlighterDefaults->setTabSize(8);
285
        $this->syntaxHighlighterDefaults->setToolbar(false);
286
287
        $obj = new SyntaxHighlighterTwigExtension($this->twigEnvironment);
288
289
        $exp = file_get_contents(__DIR__ . "/testSyntaxHighlighterDefaultsFunction.html.txt");
290
291
        $this->assertEquals($exp, $obj->syntaxHighlighterDefaultsFunction($this->syntaxHighlighterDefaults) . "\n");
292
    }
293
294
    /**
295
     * Test syntaxHighlighterScriptFilter()
296
     *
297
     * @return void
298
     */
299
    public function testSyntaxHighlighterScriptFilter(): void {
300
301
        $obj = new SyntaxHighlighterTwigExtension($this->twigEnvironment);
302
303
        $exp = "<script type=\"text/javascript\">\ncontent\n</script>";
304
305
        $this->assertEquals($exp, $obj->syntaxHighlighterScriptFilter("content"));
306
    }
307
308
    /**
309
     * Test syntaxHighlighterStringsFunction()
310
     *
311
     * @return void
312
     */
313
    public function testSyntaxHighlighterStringsFunction(): void {
314
315
        // Set the SyntaxHighlighter strings mock.
316
        $this->syntaxHighlighterStrings->setAlert("SyntaxHighlighter bundle");
317
        $this->syntaxHighlighterStrings->setBrushNotHtmlScript("Brush wasn't made for HTML-Script option :");
318
        $this->syntaxHighlighterStrings->setCopyToClipboard("Copy to clipboard");
319
        $this->syntaxHighlighterStrings->setCopyToClipboardConfirmation("Operation success");
320
        $this->syntaxHighlighterStrings->setExpandSource("Expand source");
321
        $this->syntaxHighlighterStrings->setHelp("Help");
322
        $this->syntaxHighlighterStrings->setNoBrush("Can't find brush for :");
323
        $this->syntaxHighlighterStrings->setPrint("Print");
324
        $this->syntaxHighlighterStrings->setViewSource("View source");
325
326
        $obj = new SyntaxHighlighterTwigExtension($this->twigEnvironment);
327
328
        $exp = file_get_contents(__DIR__ . "/testSyntaxHighlighterStringsFunction.html.txt");
329
330
        $this->assertEquals($exp, $obj->syntaxHighlighterStringsFunction($this->syntaxHighlighterStrings) . "\n");
331
    }
332
333
    /**
334
     * Test __construct()
335
     *
336
     * @return void
337
     */
338
    public function test__construct(): void {
339
340
        $this->assertEquals("wbw.core.twig.extension.assets.syntax_highlighter", SyntaxHighlighterTwigExtension::SERVICE_NAME);
341
342
        $obj = new SyntaxHighlighterTwigExtension($this->twigEnvironment);
343
344
        $this->assertInstanceOf(ExtensionInterface::class, $obj);
345
346
        $this->assertSame($this->twigEnvironment, $obj->getTwigEnvironment());
347
    }
348
}
349