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