xref: /plugin/include/_test/namespace_includes.test.php (revision 69781840d34fa6ae25dd31730d4777a7af46f442)
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