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 /** 45*dbb479d3SLarsDW223 * Helper function to read dir content 46*dbb479d3SLarsDW223 */ 47*dbb479d3SLarsDW223 protected function getDirContent ($dir) { 48*dbb479d3SLarsDW223 if (is_dir($dir)) { 49*dbb479d3SLarsDW223 $pages = array(); 50*dbb479d3SLarsDW223 if ($handle = opendir($dir)) { 51*dbb479d3SLarsDW223 while (($file = readdir($handle)) !== false) { 52*dbb479d3SLarsDW223 if ($file != '.' && $file != '..') { 53*dbb479d3SLarsDW223 $pages [] = $file; 54*dbb479d3SLarsDW223 } 55*dbb479d3SLarsDW223 } 56*dbb479d3SLarsDW223 closedir($handle); 57*dbb479d3SLarsDW223 return $pages; 58*dbb479d3SLarsDW223 } 59*dbb479d3SLarsDW223 } 60*dbb479d3SLarsDW223 return null; 61*dbb479d3SLarsDW223 } 62*dbb479d3SLarsDW223 63*dbb479d3SLarsDW223 /** 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); 109*dbb479d3SLarsDW223 $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' => ''), 117*dbb479d3SLarsDW223 //array('id' => 'wiki:dokuwiki', 'exists' => true, 'parent_id' => ''), 118*dbb479d3SLarsDW223 //array('id' => 'wiki:syntax', 'exists' => true, 'parent_id' => ''), 119*dbb479d3SLarsDW223 //$wikiPages, 120*dbb479d3SLarsDW223 ); 121*dbb479d3SLarsDW223 122*dbb479d3SLarsDW223 // Add pages in namespace wiki 123*dbb479d3SLarsDW223 $dir = $this->getDirContent(dirname(__FILE__).'/../../../../_test/data/pages/wiki'); 124*dbb479d3SLarsDW223 $this->assertTrue($dir !== null); 125*dbb479d3SLarsDW223 foreach ($dir as $page) { 126*dbb479d3SLarsDW223 $page = substr($page, 0, -4); 127*dbb479d3SLarsDW223 $expected [] = array('id' => 'wiki:'.$page, 'exists' => true, 'parent_id' => ''); 128*dbb479d3SLarsDW223 } 129*dbb479d3SLarsDW223 130*dbb479d3SLarsDW223 array_multisort($expected); 131*dbb479d3SLarsDW223 array_multisort($pages); 132*dbb479d3SLarsDW223 $this->assertEquals($expected, $pages); 133d0eed7edSMichael Hamann } 134d0eed7edSMichael Hamann 135d0eed7edSMichael Hamann /** 136d0eed7edSMichael Hamann * Test ordering of namespace includes 137d0eed7edSMichael Hamann */ 138d0eed7edSMichael Hamann public function test_order() { 139d0eed7edSMichael Hamann 140d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array()); 141d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', 'inclorder:', '', '', $flags); 142d0eed7edSMichael Hamann 143d0eed7edSMichael Hamann $this->assertEquals(array( 144d0eed7edSMichael Hamann array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''), 145d0eed7edSMichael Hamann array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''), 146d0eed7edSMichael Hamann array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''), 147d0eed7edSMichael Hamann array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''), 148d0eed7edSMichael Hamann ), $pages); 149d0eed7edSMichael Hamann 150d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array('rsort')); 151d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', 'inclorder:', '', '', $flags); 152d0eed7edSMichael Hamann $this->assertEquals(array( 153d0eed7edSMichael Hamann array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''), 154d0eed7edSMichael Hamann array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''), 155d0eed7edSMichael Hamann array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''), 156d0eed7edSMichael Hamann array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''), 157d0eed7edSMichael Hamann ), $pages); 158d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array('order=custom')); 159d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', 'inclorder:', '', '', $flags); 160d0eed7edSMichael Hamann $this->assertEquals(array( 161d0eed7edSMichael Hamann array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''), 162d0eed7edSMichael Hamann array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''), 163d0eed7edSMichael Hamann array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''), 164d0eed7edSMichael Hamann array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''), 165d0eed7edSMichael Hamann ), $pages); 166d0eed7edSMichael Hamann 167d0eed7edSMichael Hamann $flags = $this->helper->get_flags(array('order=custom', 'rsort')); 168d0eed7edSMichael Hamann $pages = $this->helper->_get_included_pages('namespace', 'inclorder:', '', '', $flags); 169d0eed7edSMichael Hamann $this->assertEquals(array( 170d0eed7edSMichael Hamann array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''), 171d0eed7edSMichael Hamann array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''), 172d0eed7edSMichael Hamann array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''), 173d0eed7edSMichael Hamann array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''), 174d0eed7edSMichael Hamann ), $pages); 175d0eed7edSMichael Hamann } 176d0eed7edSMichael Hamann} 177