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