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