PageRenderTime 28ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/_test/tests/inc/parser/parser_footnote.test.php

https://gitlab.com/michield/dokuwiki
PHP | 388 lines | 365 code | 23 blank | 0 comment | 0 complexity | ad48620eecb6e5100859e4d0a7145ae3 MD5 | raw file
  1. <?php
  2. require_once 'parser.inc.php';
  3. class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
  4. function setUp() {
  5. parent::setUp();
  6. $this->P->addMode('footnote',new Doku_Parser_Mode_Footnote());
  7. }
  8. function testFootnote() {
  9. $this->P->parse('Foo (( testing )) Bar');
  10. $calls = array (
  11. array('document_start',array()),
  12. array('p_open',array()),
  13. array('cdata',array("\n".'Foo ')),
  14. array('nest', array ( array (
  15. array('footnote_open',array()),
  16. array('cdata',array(' testing ')),
  17. array('footnote_close',array()),
  18. ))),
  19. array('cdata',array(' Bar')),
  20. array('p_close',array()),
  21. array('document_end',array()),
  22. );
  23. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  24. }
  25. function testNotAFootnote() {
  26. $this->P->parse("Foo (( testing\n Bar");
  27. $calls = array (
  28. array('document_start',array()),
  29. array('p_open',array()),
  30. array('cdata',array("\nFoo (( testing\n Bar")),
  31. array('p_close',array()),
  32. array('document_end',array()),
  33. );
  34. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  35. }
  36. function testFootnoteLinefeed() {
  37. $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
  38. $this->P->parse("Foo (( testing\ntesting )) Bar");
  39. $calls = array (
  40. array('document_start',array()),
  41. array('p_open',array()),
  42. array('cdata',array('Foo ')),
  43. array('nest', array ( array (
  44. array('footnote_open',array()),
  45. array('cdata',array(" testing\ntesting ")),
  46. array('footnote_close',array()),
  47. ))),
  48. array('cdata',array(' Bar')),
  49. array('p_close',array()),
  50. array('document_end',array()),
  51. );
  52. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  53. }
  54. function testFootnoteNested() {
  55. $this->P->parse('Foo (( x((y))z )) Bar');
  56. $calls = array (
  57. array('document_start',array()),
  58. array('p_open',array()),
  59. array('cdata',array("\n".'Foo ')),
  60. array('nest', array ( array (
  61. array('footnote_open',array()),
  62. array('cdata',array(' x((y')),
  63. array('footnote_close',array()),
  64. ))),
  65. array('cdata',array('z )) Bar')),
  66. array('p_close',array()),
  67. array('document_end',array()),
  68. );
  69. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  70. }
  71. function testFootnoteEol() {
  72. $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
  73. $this->P->parse("Foo \nX(( test\ning ))Y\n Bar");
  74. $calls = array (
  75. array('document_start',array()),
  76. array('p_open',array()),
  77. array('cdata',array('Foo '.DOKU_PARSER_EOL.'X')),
  78. array('nest', array ( array (
  79. array('footnote_open',array()),
  80. array('cdata',array(" test\ning ")),
  81. array('footnote_close',array()),
  82. ))),
  83. array('cdata',array('Y'.DOKU_PARSER_EOL.' Bar')),
  84. array('p_close',array()),
  85. array('document_end',array()),
  86. );
  87. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  88. }
  89. function testFootnoteStrong() {
  90. $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong'));
  91. $this->P->parse('Foo (( **testing** )) Bar');
  92. $calls = array (
  93. array('document_start',array()),
  94. array('p_open',array()),
  95. array('cdata',array("\n".'Foo ')),
  96. array('nest', array ( array (
  97. array('footnote_open',array()),
  98. array('cdata',array(' ')),
  99. array('strong_open',array()),
  100. array('cdata',array('testing')),
  101. array('strong_close',array()),
  102. array('cdata',array(' ')),
  103. array('footnote_close',array()),
  104. ))),
  105. array('cdata',array(' Bar')),
  106. array('p_close',array()),
  107. array('document_end',array()),
  108. );
  109. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  110. }
  111. function testFootnoteHr() {
  112. $this->P->addMode('hr',new Doku_Parser_Mode_HR());
  113. $this->P->parse("Foo (( \n ---- \n )) Bar");
  114. $calls = array (
  115. array('document_start',array()),
  116. array('p_open',array()),
  117. array('cdata',array("\n".'Foo ')),
  118. array('nest', array ( array (
  119. array('footnote_open',array()),
  120. array('cdata',array(' ')),
  121. array('hr',array()),
  122. array('cdata',array("\n ")),
  123. array('footnote_close',array()),
  124. ))),
  125. array('cdata',array(' Bar')),
  126. array('p_close',array()),
  127. array('document_end',array()),
  128. );
  129. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  130. }
  131. function testFootnoteCode() {
  132. $this->P->addMode('code',new Doku_Parser_Mode_Code());
  133. $this->P->parse("Foo (( <code>Test</code> )) Bar");
  134. $calls = array (
  135. array('document_start',array()),
  136. array('p_open',array()),
  137. array('cdata',array("\n".'Foo ')),
  138. array('nest', array ( array (
  139. array('footnote_open',array()),
  140. array('cdata',array(' ')),
  141. array('code',array('Test',null,null)),
  142. array('cdata',array(' ')),
  143. array('footnote_close',array()),
  144. ))),
  145. array('cdata',array(' Bar')),
  146. array('p_close',array()),
  147. array('document_end',array()),
  148. );
  149. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  150. }
  151. function testFootnotePreformatted() {
  152. $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
  153. $this->P->parse("Foo (( \n Test\n )) Bar");
  154. $calls = array (
  155. array('document_start',array()),
  156. array('p_open',array()),
  157. array('cdata',array("\n".'Foo ')),
  158. array('nest', array ( array (
  159. array('footnote_open',array()),
  160. array('cdata',array(' ')),
  161. array('preformatted',array('Test')),
  162. array('cdata',array(' ')),
  163. array('footnote_close',array()),
  164. ))),
  165. array('cdata',array(' Bar')),
  166. array('p_close',array()),
  167. array('document_end',array()),
  168. );
  169. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  170. }
  171. function testFootnotePreformattedEol() {
  172. $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
  173. $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
  174. $this->P->parse("Foo (( \n Test\n )) Bar");
  175. $calls = array (
  176. array('document_start',array()),
  177. array('p_open',array()),
  178. array('cdata',array('Foo ')),
  179. array('nest', array ( array (
  180. array('footnote_open',array()),
  181. array('cdata',array(' ')),
  182. array('preformatted',array('Test')),
  183. array('cdata',array(' ')),
  184. array('footnote_close',array()),
  185. ))),
  186. array('cdata',array(' Bar')),
  187. array('p_close',array()),
  188. array('document_end',array()),
  189. );
  190. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  191. }
  192. function testFootnoteUnformatted() {
  193. $this->P->addMode('unformatted',new Doku_Parser_Mode_Unformatted());
  194. $this->P->parse("Foo (( <nowiki>Test</nowiki> )) Bar");
  195. $calls = array (
  196. array('document_start',array()),
  197. array('p_open',array()),
  198. array('cdata',array("\n".'Foo ')),
  199. array('nest', array ( array (
  200. array('footnote_open',array()),
  201. array('cdata',array(' ')),
  202. array('unformatted',array('Test')),
  203. array('cdata',array(' ')),
  204. array('footnote_close',array()),
  205. ))),
  206. array('cdata',array(' Bar')),
  207. array('p_close',array()),
  208. array('document_end',array()),
  209. );
  210. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  211. }
  212. function testFootnoteNotHeader() {
  213. $this->P->addMode('unformatted',new Doku_Parser_Mode_Unformatted());
  214. $this->P->parse("Foo (( \n====Test====\n )) Bar");
  215. $calls = array (
  216. array('document_start',array()),
  217. array('p_open',array()),
  218. array('cdata',array("\n".'Foo ')),
  219. array('nest', array ( array (
  220. array('footnote_open',array()),
  221. array('cdata',array(" \n====Test====\n ")),
  222. array('footnote_close',array()),
  223. ))),
  224. array('cdata',array(' Bar')),
  225. array('p_close',array()),
  226. array('document_end',array()),
  227. );
  228. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  229. }
  230. function testFootnoteTable() {
  231. $this->P->addMode('table',new Doku_Parser_Mode_Table());
  232. $this->P->parse("Foo ((
  233. | Row 0 Col 1 | Row 0 Col 2 | Row 0 Col 3 |
  234. | Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
  235. )) Bar");
  236. $calls = array (
  237. array('document_start',array()),
  238. array('p_open',array()),
  239. array('cdata',array("\n".'Foo ')),
  240. array('nest', array ( array (
  241. array('footnote_open',array()),
  242. array('table_open',array(3, 2, 8)),
  243. array('tablerow_open',array()),
  244. array('tablecell_open',array(1,'left',1)),
  245. array('cdata',array(' Row 0 Col 1 ')),
  246. array('tablecell_close',array()),
  247. array('tablecell_open',array(1,'left',1)),
  248. array('cdata',array(' Row 0 Col 2 ')),
  249. array('tablecell_close',array()),
  250. array('tablecell_open',array(1,'left',1)),
  251. array('cdata',array(' Row 0 Col 3 ')),
  252. array('tablecell_close',array()),
  253. array('tablerow_close',array()),
  254. array('tablerow_open',array()),
  255. array('tablecell_open',array(1,'left',1)),
  256. array('cdata',array(' Row 1 Col 1 ')),
  257. array('tablecell_close',array()),
  258. array('tablecell_open',array(1,'left',1)),
  259. array('cdata',array(' Row 1 Col 2 ')),
  260. array('tablecell_close',array()),
  261. array('tablecell_open',array(1,'left',1)),
  262. array('cdata',array(' Row 1 Col 3 ')),
  263. array('tablecell_close',array()),
  264. array('tablerow_close',array()),
  265. array('table_close',array(123)),
  266. array('cdata',array(' ')),
  267. array('footnote_close',array()),
  268. ))),
  269. array('cdata',array(' Bar')),
  270. array('p_close',array()),
  271. array('document_end',array()),
  272. );
  273. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  274. }
  275. function testFootnoteList() {
  276. $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock());
  277. $this->P->parse("Foo ((
  278. *A
  279. * B
  280. * C
  281. )) Bar");
  282. $calls = array (
  283. array('document_start',array()),
  284. array('p_open',array()),
  285. array('cdata',array("\n".'Foo ')),
  286. array('nest', array ( array (
  287. array('footnote_open',array()),
  288. array('listu_open',array()),
  289. array('listitem_open',array(1)),
  290. array('listcontent_open',array()),
  291. array('cdata',array("A")),
  292. array('listcontent_close',array()),
  293. array('listu_open',array()),
  294. array('listitem_open',array(2)),
  295. array('listcontent_open',array()),
  296. array('cdata',array(' B')),
  297. array('listcontent_close',array()),
  298. array('listitem_close',array()),
  299. array('listu_close',array()),
  300. array('listitem_close',array()),
  301. array('listitem_open',array(1)),
  302. array('listcontent_open',array()),
  303. array('cdata',array(' C')),
  304. array('listcontent_close',array()),
  305. array('listitem_close',array()),
  306. array('listu_close',array()),
  307. array('cdata',array(' ')),
  308. array('footnote_close',array()),
  309. ))),
  310. array('cdata',array(' Bar')),
  311. array('p_close',array()),
  312. array('document_end',array()),
  313. );
  314. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  315. }
  316. function testFootnoteQuote() {
  317. $this->P->addMode('quote',new Doku_Parser_Mode_Quote());
  318. $this->P->parse("Foo ((
  319. > def
  320. >>ghi
  321. )) Bar");
  322. $calls = array (
  323. array('document_start',array()),
  324. array('p_open',array()),
  325. array('cdata',array("\n".'Foo ')),
  326. array('nest', array ( array (
  327. array('footnote_open',array()),
  328. array('quote_open',array()),
  329. array('cdata',array(" def")),
  330. array('quote_open',array()),
  331. array('cdata',array("ghi")),
  332. array('quote_close',array()),
  333. array('quote_close',array()),
  334. array('cdata',array(' ')),
  335. array('footnote_close',array()),
  336. ))),
  337. array('cdata',array(' Bar')),
  338. array('p_close',array()),
  339. array('document_end',array()),
  340. );
  341. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  342. }
  343. function testFootnoteNesting() {
  344. $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong'));
  345. $this->P->parse("(( a ** (( b )) ** c ))");
  346. $calls = array(
  347. array('document_start',array()),
  348. array('p_open',array()),
  349. array('cdata',array("\n")),
  350. array('nest', array ( array (
  351. array('footnote_open',array()),
  352. array('cdata',array(' a ')),
  353. array('strong_open',array()),
  354. array('cdata',array(' (( b ')),
  355. array('footnote_close',array()),
  356. ))),
  357. array('cdata',array(" ")),
  358. array('strong_close',array()),
  359. array('cdata',array(" c ))")),
  360. array('p_close',array()),
  361. array('document_end',array()),
  362. );
  363. $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  364. }
  365. }