1d0eed7edSMichael Hamann<?php 2d0eed7edSMichael Hamann 3d0eed7edSMichael Hamannif (!defined('DOKU_INC')) die(); 4d0eed7edSMichael Hamann 5d0eed7edSMichael Hamann/** 6d0eed7edSMichael Hamann * Test namespace includes 7c76c7b12SAndreas Gohr * 8c76c7b12SAndreas Gohr * @group plugin_include 9c76c7b12SAndreas Gohr * @group plugins 10d0eed7edSMichael Hamann */ 11d0eed7edSMichael Hamannclass plugin_include_namespaces_includes_test extends DokuWikiTest { 12d0eed7edSMichael Hamann /** 13d0eed7edSMichael Hamann * @var helper_plugin_include $helper 14d0eed7edSMichael Hamann */ 15d0eed7edSMichael Hamann private $helper; 16d0eed7edSMichael Hamann 17d0eed7edSMichael Hamann /** 18d0eed7edSMichael Hamann * Setup - enable and load the include plugin and create the test pages 19d0eed7edSMichael Hamann */ 20*69781840SAnna Dabrowska public function setUp() : void 21*69781840SAnna Dabrowska { 22d0eed7edSMichael Hamann $this->pluginsEnabled[] = 'include'; 23*69781840SAnna Dabrowska parent::setUp(); // this enables the include plugin 24d0eed7edSMichael Hamann $this->helper = plugin_load('helper', 'include'); 25d0eed7edSMichael Hamann 26d0eed7edSMichael Hamann global $conf; 27d0eed7edSMichael Hamann $conf['hidepages'] = 'inclhidden:hidden'; 28d0eed7edSMichael Hamann 29d0eed7edSMichael Hamann // for testing hidden pages 30d0eed7edSMichael Hamann saveWikiText('inclhidden:hidden', 'Hidden page', 'Created hidden page'); 31d0eed7edSMichael Hamann saveWikiText('inclhidden:visible', 'Visible page', 'Created visible page'); 32d0eed7edSMichael Hamann 33d0eed7edSMichael Hamann // pages on different levels 34d0eed7edSMichael Hamann saveWikiText('incltest:level1', 'Page on level 1', 'Created page on level 1'); 35d0eed7edSMichael Hamann saveWikiText('incltest:ns:level2', 'Page on level 2', 'Created page on level 2'); 36d0eed7edSMichael Hamann saveWikiText('incltest:ns:ns:level3', 'Page on level 3', 'Created page on level 3'); 37d0eed7edSMichael Hamann 38d0eed7edSMichael Hamann // for page ordering 39d0eed7edSMichael Hamann saveWikiText('inclorder:page1', 'Page 1', 'Created page 1'); 40d0eed7edSMichael Hamann saveWikiText('inclorder:page2', 'Page 2', 'Created page 2'); 41c69c4423SMichael Hamann saveWikiText('inclorder:page3', '{{include_n>10}} Page 3/10', 'created page 3/1'); 42c69c4423SMichael Hamann saveWikiText('inclorder:page4', '{{include_n>2}} Page 4/2', 'created page 4/0'); 43d0eed7edSMichael Hamann } 44d0eed7edSMichael Hamann 45d0eed7edSMichael Hamann /** 46dbb479d3SLarsDW223 * Helper function to read dir content 47dbb479d3SLarsDW223 */ 48dbb479d3SLarsDW223 protected function getDirContent ($dir) { 49dbb479d3SLarsDW223 if (is_dir($dir)) { 50dbb479d3SLarsDW223 $pages = array(); 51dbb479d3SLarsDW223 if ($handle = opendir($dir)) { 52dbb479d3SLarsDW223 while (($file = readdir($handle)) !== false) { 53dbb479d3SLarsDW223 if ($file != '.' && $file != '..') { 54dbb479d3SLarsDW223 $pages [] = $file; 55dbb479d3SLarsDW223 } 56dbb479d3SLarsDW223 } 57dbb479d3SLarsDW223 closedir($handle); 58dbb479d3SLarsDW223 return $pages; 59dbb479d3SLarsDW223 } 60dbb479d3SLarsDW223 } 61dbb479d3SLarsDW223 return null; 62dbb479d3SLarsDW223 } 63dbb479d3SLarsDW223 64dbb479d3SLarsDW223 /** 65d0eed7edSMichael Hamann * Test hiding of hidden pages in namespace includes 66d0eed7edSMichael Hamann */ 67d0eed7edSMichael Hamann public function test_hidden() { 68d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array()); 69d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', 'inclhidden:', '', '', $flags); 70d0eed7edSMichael Hamann $this->assertEquals(array( 71d0eed7edSMichael Hamann array('id' => 'inclhidden:visible', 'exists' => true, 'parent_id' => ''), 72d0eed7edSMichael Hamann ), $pages); 73d0eed7edSMichael Hamann } 74d0eed7edSMichael Hamann 75d0eed7edSMichael Hamann /** 76d0eed7edSMichael Hamann * Test include depth limit 77d0eed7edSMichael Hamann */ 78d0eed7edSMichael Hamann public function test_depth() { 79d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array()); 80d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', 'incltest:', '', '', $flags); 81d0eed7edSMichael Hamann $this->assertEquals(array( 82d0eed7edSMichael Hamann array('id' => 'incltest:level1', 'exists' => true, 'parent_id' => ''), 83d0eed7edSMichael Hamann ), $pages); 84d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array('depth=2')); 85d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', 'incltest:', '', '', $flags); 86d0eed7edSMichael Hamann $this->assertEquals(array( 87d0eed7edSMichael Hamann array('id' => 'incltest:level1', 'exists' => true, 'parent_id' => ''), 88d0eed7edSMichael Hamann array('id' => 'incltest:ns:level2', 'exists' => true, 'parent_id' => ''), 89d0eed7edSMichael Hamann ), $pages); 90d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array('depth=2')); 91d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', 'incltest:ns', '', '', $flags); 92d0eed7edSMichael Hamann $this->assertEquals(array( 93d0eed7edSMichael Hamann array('id' => 'incltest:ns:level2', 'exists' => true, 'parent_id' => ''), 94d0eed7edSMichael Hamann array('id' => 'incltest:ns:ns:level3', 'exists' => true, 'parent_id' => ''), 95d0eed7edSMichael Hamann ), $pages); 96d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array('depth=0')); 97d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', 'incltest:', '', '', $flags); 98d0eed7edSMichael Hamann $this->assertEquals(array( 99d0eed7edSMichael Hamann array('id' => 'incltest:level1', 'exists' => true, 'parent_id' => ''), 100d0eed7edSMichael Hamann array('id' => 'incltest:ns:level2', 'exists' => true, 'parent_id' => ''), 101d0eed7edSMichael Hamann array('id' => 'incltest:ns:ns:level3', 'exists' => true, 'parent_id' => ''), 102d0eed7edSMichael Hamann ), $pages); 103d0eed7edSMichael Hamann 104d0eed7edSMichael Hamann // test include of the root namespace 105d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array()); 106d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', ':', '', '', $flags); 10782a2b8dfSPhil Hopper $this->assertEquals(array(array('id' => 'mailinglist', 'exists' => true, 'parent_id' => '')), $pages); 108d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array('depth=2')); 109d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', ':', '', '', $flags); 110dbb479d3SLarsDW223 $expected = array( 111d0eed7edSMichael Hamann array('id' => 'inclhidden:visible', 'exists' => true, 'parent_id' => ''), 112d0eed7edSMichael Hamann array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''), 113d0eed7edSMichael Hamann array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''), 114d0eed7edSMichael Hamann array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''), 115d0eed7edSMichael Hamann array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''), 116d0eed7edSMichael Hamann array('id' => 'incltest:level1', 'exists' => true, 'parent_id' => ''), 11782a2b8dfSPhil Hopper array('id' => 'mailinglist', 'exists' => true, 'parent_id' => ''), 118dbb479d3SLarsDW223 //array('id' => 'wiki:dokuwiki', 'exists' => true, 'parent_id' => ''), 119dbb479d3SLarsDW223 //array('id' => 'wiki:syntax', 'exists' => true, 'parent_id' => ''), 120dbb479d3SLarsDW223 //$wikiPages, 121dbb479d3SLarsDW223 ); 122dbb479d3SLarsDW223 12369877801SMichael Hamann // page int:editandsavetest exists in DokuWiki after September 2017 12469877801SMichael Hamann if (page_exists('int:editandsavetest')) { 12569877801SMichael Hamann $expected [] = array('id' => 'int:editandsavetest', 'exists' => true, 'parent_id' => ''); 12669877801SMichael Hamann } 12769877801SMichael Hamann 128dbb479d3SLarsDW223 // Add pages in namespace wiki 129dbb479d3SLarsDW223 $dir = $this->getDirContent(dirname(__FILE__).'/../../../../_test/data/pages/wiki'); 130dbb479d3SLarsDW223 $this->assertTrue($dir !== null); 131dbb479d3SLarsDW223 foreach ($dir as $page) { 132dbb479d3SLarsDW223 $page = substr($page, 0, -4); 133dbb479d3SLarsDW223 $expected [] = array('id' => 'wiki:'.$page, 'exists' => true, 'parent_id' => ''); 134dbb479d3SLarsDW223 } 135dbb479d3SLarsDW223 136dbb479d3SLarsDW223 array_multisort($expected); 137dbb479d3SLarsDW223 array_multisort($pages); 138dbb479d3SLarsDW223 $this->assertEquals($expected, $pages); 139d0eed7edSMichael Hamann } 140d0eed7edSMichael Hamann 141d0eed7edSMichael Hamann /** 142d0eed7edSMichael Hamann * Test ordering of namespace includes 143d0eed7edSMichael Hamann */ 144d0eed7edSMichael Hamann public function test_order() { 145d0eed7edSMichael Hamann 146d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array()); 147d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', 'inclorder:', '', '', $flags); 148d0eed7edSMichael Hamann 149d0eed7edSMichael Hamann $this->assertEquals(array( 150d0eed7edSMichael Hamann array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''), 151d0eed7edSMichael Hamann array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''), 152d0eed7edSMichael Hamann array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''), 153d0eed7edSMichael Hamann array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''), 154d0eed7edSMichael Hamann ), $pages); 155d0eed7edSMichael Hamann 156d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array('rsort')); 157d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', 'inclorder:', '', '', $flags); 158d0eed7edSMichael Hamann $this->assertEquals(array( 159d0eed7edSMichael Hamann array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''), 160d0eed7edSMichael Hamann array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''), 161d0eed7edSMichael Hamann array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''), 162d0eed7edSMichael Hamann array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''), 163d0eed7edSMichael Hamann ), $pages); 164d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array('order=custom')); 165d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', 'inclorder:', '', '', $flags); 166d0eed7edSMichael Hamann $this->assertEquals(array( 167d0eed7edSMichael Hamann array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''), 168d0eed7edSMichael Hamann array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''), 169d0eed7edSMichael Hamann array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''), 170d0eed7edSMichael Hamann array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''), 171d0eed7edSMichael Hamann ), $pages); 172d0eed7edSMichael Hamann 173d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array('order=custom', 'rsort')); 174d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', 'inclorder:', '', '', $flags); 175d0eed7edSMichael Hamann $this->assertEquals(array( 176d0eed7edSMichael Hamann array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''), 177d0eed7edSMichael Hamann array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''), 178d0eed7edSMichael Hamann array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''), 179d0eed7edSMichael Hamann array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''), 180d0eed7edSMichael Hamann ), $pages); 181d0eed7edSMichael Hamann } 182d0eed7edSMichael Hamann} 183