xref: /dokuwiki/lib/plugins/extension/_test/LocalTest.php (revision 1ed5d398b41cff101dab6090bc83994760bee156)
1<?php
2
3namespace dokuwiki\plugin\extension\test;
4
5use dokuwiki\plugin\extension\Extension;
6use dokuwiki\plugin\extension\Local;
7use DokuWikiTest;
8
9/**
10 * Tests for the Local class
11 *
12 * @group plugin_extension
13 * @group plugins
14 */
15class LocalTest extends DokuWikiTest
16{
17
18    public function testGetTemplates()
19    {
20        $local = new Local();
21        $templates = $local->getTemplates();
22
23        $this->assertIsArray($templates);
24        foreach ($templates as $template) {
25            $this->assertInstanceOf(Extension::class, $template);
26            $this->assertTrue($template->isTemplate());
27        }
28
29        $this->assertArrayHasKey('template:dokuwiki', $templates);
30    }
31
32    public function testGetPlugins()
33    {
34        $local = new Local();
35        $plugins = $local->getPlugins();
36
37        $this->assertIsArray($plugins);
38        foreach ($plugins as $plugin) {
39            $this->assertInstanceOf(Extension::class, $plugin);
40            $this->assertFalse($plugin->isTemplate());
41        }
42
43        $this->assertArrayHasKey('extension', $plugins);
44    }
45
46    public function testGetExtensions()
47    {
48        $local = new Local();
49        $extensions = $local->getExtensions();
50
51        $this->assertIsArray($extensions);
52        foreach ($extensions as $extension) {
53            $this->assertInstanceOf(Extension::class, $extension);
54        }
55
56        $this->assertArrayHasKey('template:dokuwiki', $extensions);
57        $this->assertArrayHasKey('extension', $extensions);
58    }
59
60    /**
61     * A directory whose name is not a valid extension base (e.g. a leftover
62     * "myplugin (copy)") must be skipped instead of aborting the whole listing.
63     */
64    public function testReadExtensionsSkipsInvalidDirectory()
65    {
66        $dir = TMP_DIR . '/local-invalid-dir';
67        mkdir($dir . '/validplugin', 0777, true);
68        mkdir($dir . '/myplugin (copy)', 0777, true);
69
70        $local = new Local();
71        $extensions = self::callInaccessibleMethod($local, 'readExtensionsFromDirectory', [$dir]);
72
73        $this->assertArrayHasKey('validplugin', $extensions);
74        $this->assertArrayNotHasKey('myplugin (copy)', $extensions);
75    }
76}
77