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