1<?php
2/*
3 * Copyright (c) 2016 Mark C. Prins <mprins@users.sf.net>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17/**
18 * Syntax tests for the yalist plugin.
19 *
20 * @group plugin_yalist
21 * @group plugins
22 */
23class syntax_plugin_yalist_test extends DokuWikiTest {
24    protected $pluginsEnabled = array('yalist');
25
26/**
27 * copy data and add pages to the index.
28 */
29    public static function setUpBeforeClass(): void {
30        parent::setUpBeforeClass();
31        global $conf;
32        $conf['allowdebug'] = 1;
33        TestUtils::rcopy(TMP_DIR, dirname(__FILE__) . '/data/');
34        dbglog("\nset up class syntax_plugin_yalist_test");
35    }
36    function setUp(): void {
37        parent::setUp();
38        global $conf;
39        $conf['allowdebug'] = 1;
40        $conf['cachetime'] = -1;
41        $data = array();
42        search($data, $conf['datadir'], 'search_allpages', array('skipacl' => true));
43        $verbose = false;
44        $force = false;
45        foreach ($data as $val) {
46            idx_addPage($val['id'], $verbose, $force);
47        }
48        if ($conf['allowdebug']) {
49            touch(DOKU_TMP_DATA . 'cache/debug.log');
50        }
51    }
52    public function tearDown(): void {
53        parent::tearDown();
54        global $conf;
55        // try to get the debug log after running the test, print and clear
56        if ($conf['allowdebug']) {
57            print "\n";
58            readfile(DOKU_TMP_DATA . 'cache/debug.log');
59            unlink(DOKU_TMP_DATA . 'cache/debug.log');
60        }
61    }
62
63    public function testExample(): void {
64        $request = new TestRequest();
65        $response = $request->get(array('id'=>'example'), '/doku.php');
66
67        // save the response html
68        //$handle=fopen('/tmp/data.html', 'w');
69        //fwrite($handle, $response->getContent());
70        //fclose($handle);
71
72        //print_r($response);
73        $this->assertTrue(strpos($response->getContent(),
74'<h1 class="sectionedit1" id="yalist_example">yalist example</h1>
75<div class="level1">
76<ol>
77<li class="level1"><div class="li">
78 Ordered list item 1
79</div></li>
80<li class="level1"><div class="li">
81 Ordered list item 2
82</div></li>
83<li class="level1"><div class="li">
84<p>
85 Ordered list item 3…
86</p><p>
87 … in multiple paragraphs
88</p>
89</div></li>
90<li class="level1"><div class="li">
91 Ordered list item 4
92</div></li>
93</ol>
94
95<ul>
96<li class="level1"><div class="li">
97 Unordered list item
98</div></li>
99<li class="level1"><div class="li">
100<p>
101 Unordered list item…
102</p><p>
103 … in multiple paragraphs
104</p>
105</div></li>
106</ul>
107
108<ol>
109<li class="level1"><div class="li">
110 Ordered list, first level
111</div><ol>
112<li class="level2"><div class="li">
113 Second level
114</div><ol>
115<li class="level3"><div class="li">
116 Third level
117</div><ol>
118<li class="level4"><div class="li">
119 Fourth level
120</div></li>
121</ol>
122</li>
123</ol>
124</li>
125<li class="level2"><div class="li">
126<p>
127 Back to second level
128</p>
129</div><ol>
130<li class="level3"><div class="li">
131 <em>Second?! What happened to third?</em>
132</div></li>
133</ol>
134<div class="li">
135<p>
136 <em>Quiet, you.</em>
137</p>
138</div></li>
139</ol>
140</li>
141<li class="level1"><div class="li">
142 Back to first level
143</div></li>
144<li class="level1"><div class="li">
145 Still at first level
146</div></li>
147</ol>
148
149<dl>
150<dt class="level1"><span class="dt"> Definition list</span></dt>
151<dd class="level1"><div class="dd">
152 Definition lists vary only slightly from other types of lists in that list items consist of two parts: a term and a description. The term is given by the DT element and is restricted to inline content. The description is given with a DD element that contains block-level content. [Source: <abbr title="World Wide Web Consortium">W3C</abbr>]
153</div></dd>
154<dt class="level1"><span class="dt"> Definition list w/ multiple paragraphs</span></dt>
155<dd class="level1"><div class="dd">
156<p>
157 The style sheet provided with this plugin will render these paragraphs…
158</p><p>
159 … to the left of the term being defined.
160</p>
161</div><dl>
162<dt class="level2"><span class="dt"> Definition list w/ multiple “paragraphs”</span></dt>
163<dd class="level2"><div class="dd">
164 Another way to separate blocks of text in a definition…
165</div></dd>
166<dd class="level2"><div class="dd">
167 … is to simply have multiple definitions for a term (or group of terms).
168</div></dd>
169</dl>
170</dd>
171</dl>
172
173<dl>
174<dd class="level1"><div class="dd">
175 This definition list has DD tags without any preceding DT tags.
176</div></dd>
177<dd class="level1"><div class="dd">
178 Hey, it&#039;s legal XHTML.
179</div></dd>
180<dt class="level1"><span class="dt"> Just like DT tags without following DD tags.</span></dt>
181<dt class="level1"><span class="dt">? But DT tags can&#039;t contain paragraphs. That would <em class="u">not</em> be legal XHTML.</span></dt>
182</dl>
183
184<pre class="code">.. If you try, the result will be rendered oddly.</pre>
185
186</div>') !== false,
187            'expected html snippet was not in the output'
188        );
189    }
190}
191