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