1 <?php
2 
3 /**
4  * Class plugin_include_nested_test
5  *
6  * @group plugin_include
7  * @group plugins
8  */
9 class plugin_include_nested_test extends DokuWikiTest {
10     private $ids = array(
11         'test:plugin_include:nested:start',
12         'test:plugin_include:nested:second',
13         'test:plugin_include:nested:third'
14     );
15 
16     public function setUp() : void
17     {
18         $this->pluginsEnabled[] = 'include';
19         parent::setUp();
20     }
21 
22     public function test_outer_to_inner() {
23         $this->_createPages();
24         $mainHTML = p_wiki_xhtml('test:plugin_include:nested:start');
25         $secondHTML = p_wiki_xhtml('test:plugin_include:nested:second');
26         $thirdHTML = p_wiki_xhtml('test:plugin_include:nested:third');
27         $this->_validateContent($mainHTML, $secondHTML, $thirdHTML);
28     }
29 
30     public function test_inner_to_outer() {
31         $this->_createPages();
32         $thirdHTML = p_wiki_xhtml('test:plugin_include:nested:third');
33         $secondHTML = p_wiki_xhtml('test:plugin_include:nested:second');
34         $mainHTML = p_wiki_xhtml('test:plugin_include:nested:start');
35         $this->_validateContent($mainHTML, $secondHTML, $thirdHTML);
36     }
37 
38     private function _validateContent($mainHTML, $secondHTML, $thirdHTML) {
39         $this->assertTrue(strpos($mainHTML, 'Main Content') !== false, 'Main content contains "Main Content"');
40         $this->assertTrue($this->_matchHeader('1', 'Main Test Page', $mainHTML), 'Main page header is h1');
41         $this->assertTrue(strpos($mainHTML, 'Second Content') !== false, 'Main content contains "Second Content"');
42         $this->assertTrue($this->_matchHeader('2', 'Second Test Page', $mainHTML), 'Second page header on main page is h2');
43         $this->assertTrue(strpos($mainHTML, 'Third Content') !== false, 'Main content contains "Third Content"');
44         $this->assertTrue($this->_matchHeader('3', 'Third Test Page', $mainHTML), 'Third page header on main page is h3');
45         $this->assertTrue(strpos($secondHTML, 'Second Content') !== false, 'Second content contains "Second Content"');
46         $this->assertTrue($this->_matchHeader('1', 'Second Test Page', $secondHTML), 'Second page header on second page is h1');
47         $this->assertTrue(strpos($secondHTML, 'Third Content') !== false, 'Second content contains "Third Content"');
48         $this->assertTrue($this->_matchHeader('2', 'Third Test Page', $secondHTML), 'Third page header on second page is h2');
49         $this->assertTrue(strpos($thirdHTML, 'Third Content') !== false, 'Third content contains "Third Content"');
50         $this->assertTrue($this->_matchHeader('1', 'Third Test Page', $thirdHTML), 'Third page header on third page is h1');
51     }
52 
53     private function _matchHeader($level, $text, $html) {
54         return preg_match('/<h'.$level.'[^>]*>(<a[^>]*>)?'.$text.'/', $html) > 0;
55     }
56 
57     private function _createPages() {
58         saveWikiText('test:plugin_include:nested:start',
59             '====== Main Test Page ======'.DOKU_LF.DOKU_LF
60             .'Main Content'.rand().DOKU_LF.DOKU_LF
61             .'{{page>second}}'.DOKU_LF,
62             'setup for test');
63         saveWikiText('test:plugin_include:nested:second',
64             '====== Second Test Page ======'.DOKU_LF.DOKU_LF
65             .'Second Content'.rand().DOKU_LF.DOKU_LF
66             .'{{page>third}}'.DOKU_LF,
67             'setup for test');
68         saveWikiText('test:plugin_include:nested:third',
69             '====== Third Test Page ======'.DOKU_LF.DOKU_LF
70             .'Third Content'.rand().DOKU_LF.DOKU_LF
71             .'{{page>third}}'.DOKU_LF,
72             'setup for test');
73     }
74 }
75 
76