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