summaryrefslogtreecommitdiff
path: root/platform/www/lib/plugins/include/_test/namespace_includes.test.php
diff options
context:
space:
mode:
Diffstat (limited to 'platform/www/lib/plugins/include/_test/namespace_includes.test.php')
-rw-r--r--platform/www/lib/plugins/include/_test/namespace_includes.test.php182
1 files changed, 182 insertions, 0 deletions
diff --git a/platform/www/lib/plugins/include/_test/namespace_includes.test.php b/platform/www/lib/plugins/include/_test/namespace_includes.test.php
new file mode 100644
index 0000000..1da3234
--- /dev/null
+++ b/platform/www/lib/plugins/include/_test/namespace_includes.test.php
@@ -0,0 +1,182 @@
+<?php
+
+if (!defined('DOKU_INC')) die();
+
+/**
+ * Test namespace includes
+ *
+ * @group plugin_include
+ * @group plugins
+ */
+class plugin_include_namespaces_includes_test extends DokuWikiTest {
+ /**
+ * @var helper_plugin_include $helper
+ */
+ private $helper;
+
+ /**
+ * Setup - enable and load the include plugin and create the test pages
+ */
+ public function setUp() : void
+ {
+ $this->pluginsEnabled[] = 'include';
+ parent::setUp(); // this enables the include plugin
+ $this->helper = plugin_load('helper', 'include');
+
+ global $conf;
+ $conf['hidepages'] = 'inclhidden:hidden';
+
+ // for testing hidden pages
+ saveWikiText('inclhidden:hidden', 'Hidden page', 'Created hidden page');
+ saveWikiText('inclhidden:visible', 'Visible page', 'Created visible page');
+
+ // pages on different levels
+ saveWikiText('incltest:level1', 'Page on level 1', 'Created page on level 1');
+ saveWikiText('incltest:ns:level2', 'Page on level 2', 'Created page on level 2');
+ saveWikiText('incltest:ns:ns:level3', 'Page on level 3', 'Created page on level 3');
+
+ // for page ordering
+ saveWikiText('inclorder:page1', 'Page 1', 'Created page 1');
+ saveWikiText('inclorder:page2', 'Page 2', 'Created page 2');
+ saveWikiText('inclorder:page3', '{{include_n>10}} Page 3/10', 'created page 3/1');
+ saveWikiText('inclorder:page4', '{{include_n>2}} Page 4/2', 'created page 4/0');
+ }
+
+ /**
+ * Helper function to read dir content
+ */
+ protected function getDirContent ($dir) {
+ if (is_dir($dir)) {
+ $pages = array();
+ if ($handle = opendir($dir)) {
+ while (($file = readdir($handle)) !== false) {
+ if ($file != '.' && $file != '..') {
+ $pages [] = $file;
+ }
+ }
+ closedir($handle);
+ return $pages;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Test hiding of hidden pages in namespace includes
+ */
+ public function test_hidden() {
+ $flags = $this->helper->get_flags(array());
+ $pages = $this->helper->_get_included_pages('namespace', 'inclhidden:', '', '', $flags);
+ $this->assertEquals(array(
+ array('id' => 'inclhidden:visible', 'exists' => true, 'parent_id' => ''),
+ ), $pages);
+ }
+
+ /**
+ * Test include depth limit
+ */
+ public function test_depth() {
+ $flags = $this->helper->get_flags(array());
+ $pages = $this->helper->_get_included_pages('namespace', 'incltest:', '', '', $flags);
+ $this->assertEquals(array(
+ array('id' => 'incltest:level1', 'exists' => true, 'parent_id' => ''),
+ ), $pages);
+ $flags = $this->helper->get_flags(array('depth=2'));
+ $pages = $this->helper->_get_included_pages('namespace', 'incltest:', '', '', $flags);
+ $this->assertEquals(array(
+ array('id' => 'incltest:level1', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'incltest:ns:level2', 'exists' => true, 'parent_id' => ''),
+ ), $pages);
+ $flags = $this->helper->get_flags(array('depth=2'));
+ $pages = $this->helper->_get_included_pages('namespace', 'incltest:ns', '', '', $flags);
+ $this->assertEquals(array(
+ array('id' => 'incltest:ns:level2', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'incltest:ns:ns:level3', 'exists' => true, 'parent_id' => ''),
+ ), $pages);
+ $flags = $this->helper->get_flags(array('depth=0'));
+ $pages = $this->helper->_get_included_pages('namespace', 'incltest:', '', '', $flags);
+ $this->assertEquals(array(
+ array('id' => 'incltest:level1', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'incltest:ns:level2', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'incltest:ns:ns:level3', 'exists' => true, 'parent_id' => ''),
+ ), $pages);
+
+ // test include of the root namespace
+ $flags = $this->helper->get_flags(array());
+ $pages = $this->helper->_get_included_pages('namespace', ':', '', '', $flags);
+ $this->assertEquals(array(array('id' => 'mailinglist', 'exists' => true, 'parent_id' => '')), $pages);
+ $flags = $this->helper->get_flags(array('depth=2'));
+ $pages = $this->helper->_get_included_pages('namespace', ':', '', '', $flags);
+ $expected = array(
+ array('id' => 'inclhidden:visible', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'incltest:level1', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'mailinglist', 'exists' => true, 'parent_id' => ''),
+ //array('id' => 'wiki:dokuwiki', 'exists' => true, 'parent_id' => ''),
+ //array('id' => 'wiki:syntax', 'exists' => true, 'parent_id' => ''),
+ //$wikiPages,
+ );
+
+ // page int:editandsavetest exists in DokuWiki after September 2017
+ if (page_exists('int:editandsavetest')) {
+ $expected [] = array('id' => 'int:editandsavetest', 'exists' => true, 'parent_id' => '');
+ }
+
+ // Add pages in namespace wiki
+ $dir = $this->getDirContent(dirname(__FILE__).'/../../../../_test/data/pages/wiki');
+ $this->assertTrue($dir !== null);
+ foreach ($dir as $page) {
+ $page = substr($page, 0, -4);
+ $expected [] = array('id' => 'wiki:'.$page, 'exists' => true, 'parent_id' => '');
+ }
+
+ array_multisort($expected);
+ array_multisort($pages);
+ $this->assertEquals($expected, $pages);
+ }
+
+ /**
+ * Test ordering of namespace includes
+ */
+ public function test_order() {
+
+ $flags = $this->helper->get_flags(array());
+ $pages = $this->helper->_get_included_pages('namespace', 'inclorder:', '', '', $flags);
+
+ $this->assertEquals(array(
+ array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''),
+ ), $pages);
+
+ $flags = $this->helper->get_flags(array('rsort'));
+ $pages = $this->helper->_get_included_pages('namespace', 'inclorder:', '', '', $flags);
+ $this->assertEquals(array(
+ array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''),
+ ), $pages);
+ $flags = $this->helper->get_flags(array('order=custom'));
+ $pages = $this->helper->_get_included_pages('namespace', 'inclorder:', '', '', $flags);
+ $this->assertEquals(array(
+ array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''),
+ ), $pages);
+
+ $flags = $this->helper->get_flags(array('order=custom', 'rsort'));
+ $pages = $this->helper->_get_included_pages('namespace', 'inclorder:', '', '', $flags);
+ $this->assertEquals(array(
+ array('id' => 'inclorder:page2', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page1', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page3', 'exists' => true, 'parent_id' => ''),
+ array('id' => 'inclorder:page4', 'exists' => true, 'parent_id' => ''),
+ ), $pages);
+ }
+}