PageRenderTime 41ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/bbcode/parser_test.php

http://github.com/phpbb/phpbb
PHP | 264 lines | 234 code | 10 blank | 20 comment | 1 complexity | df70ed193a96ebecf57e16527b5954be MD5 | raw file
Possible License(s): GPL-3.0, AGPL-1.0
  1. <?php
  2. /**
  3. *
  4. * This file is part of the phpBB Forum Software package.
  5. *
  6. * @copyright (c) phpBB Limited <https://www.phpbb.com>
  7. * @license GNU General Public License, version 2 (GPL-2.0)
  8. *
  9. * For full copyright and license information, please see
  10. * the docs/CREDITS.txt file.
  11. *
  12. */
  13. require_once dirname(__FILE__) . '/../../phpBB/includes/bbcode.php';
  14. require_once dirname(__FILE__) . '/../../phpBB/includes/message_parser.php';
  15. class phpbb_bbcode_parser_test extends \phpbb_test_case
  16. {
  17. public function bbcode_firstpass_data()
  18. {
  19. return array(
  20. // Default bbcodes from in their simplest way
  21. array(
  22. 'Test default bbcodes: simple bold',
  23. '[b]bold[/b]',
  24. '[b:]bold[/b:]',
  25. ),
  26. array(
  27. 'Test default bbcodes: simple underlined',
  28. '[u]underlined[/u]',
  29. '[u:]underlined[/u:]',
  30. ),
  31. array(
  32. 'Test default bbcodes: simple italic',
  33. '[i]italic[/i]',
  34. '[i:]italic[/i:]',
  35. ),
  36. array(
  37. 'Test default bbcodes: simple color rgb',
  38. '[color=#FF0000]colored[/color]',
  39. '[color=#FF0000:]colored[/color:]',
  40. ),
  41. array(
  42. 'Test default bbcodes: simple color name',
  43. '[color=red]colored[/color]',
  44. '[color=red:]colored[/color:]',
  45. ),
  46. array(
  47. 'Test default bbcodes: simple size',
  48. '[size=75]smaller[/size]',
  49. '[size=75:]smaller[/size:]',
  50. ),
  51. array(
  52. 'Test default bbcodes: simple quote',
  53. '[quote]quoted[/quote]',
  54. '[quote:]quoted[/quote:]',
  55. ),
  56. array(
  57. 'Test default bbcodes: simple quote with username',
  58. '[quote=&quot;username&quot;]quoted[/quote]',
  59. '[quote=&quot;username&quot;:]quoted[/quote:]',
  60. ),
  61. array(
  62. 'Test default bbcodes: simple code',
  63. '[code]unparsed code[/code]',
  64. '[code:]unparsed code[/code:]',
  65. ),
  66. array(
  67. 'Test default bbcodes: simple list',
  68. '[list]no item[/list]',
  69. '[list:]no item[/list:u:]',
  70. ),
  71. array(
  72. 'Test default bbcodes: simple list-item only',
  73. '[*]unparsed',
  74. '[*]unparsed',
  75. ),
  76. array(
  77. 'Test default bbcodes: simple list-item',
  78. '[list][*]item[/list]',
  79. '[list:][*:]item[/*:m:][/list:u:]',
  80. ),
  81. array(
  82. 'Test default bbcodes: simple list-item closed',
  83. '[list][*]item[/*][/list]',
  84. '[list:][*:]item[/*:][/list:u:]',
  85. ),
  86. array(
  87. 'Test default bbcodes: simple list-item numbered',
  88. '[list=1][*]item[/list]',
  89. '[list=1:][*:]item[/*:m:][/list:o:]',
  90. ),
  91. array(
  92. 'Test default bbcodes: simple list-item alpha',
  93. '[list=a][*]item[/list]',
  94. '[list=a:][*:]item[/*:m:][/list:o:]',
  95. ),
  96. array(
  97. 'Test default bbcodes: simple list-item roman',
  98. '[list=i][*]item[/list]',
  99. '[list=i:][*:]item[/*:m:][/list:o:]',
  100. ),
  101. array(
  102. 'Test default bbcodes: simple list-item disc',
  103. '[list=disc][*]item[/list]',
  104. '[list=disc:][*:]item[/*:m:][/list:u:]',
  105. ),
  106. array(
  107. 'Test default bbcodes: simple list-item circle',
  108. '[list=circle][*]item[/list]',
  109. '[list=circle:][*:]item[/*:m:][/list:u:]',
  110. ),
  111. array(
  112. 'Test default bbcodes: simple list-item square',
  113. '[list=square][*]item[/list]',
  114. '[list=square:][*:]item[/*:m:][/list:u:]',
  115. ),
  116. array(
  117. 'Test default bbcodes: simple img',
  118. '[img]https://area51.phpbb.com/images/area51.png[/img]',
  119. '[img:]https&#58;//area51&#46;phpbb&#46;com/images/area51&#46;png[/img:]',
  120. ),
  121. array(
  122. 'Test default bbcodes: simple url',
  123. '[url]https://area51.phpbb.com/[/url]',
  124. '[url:]https&#58;//area51&#46;phpbb&#46;com/[/url:]',
  125. ),
  126. array(
  127. 'Test default bbcodes: simple url with description',
  128. '[url=https://area51.phpbb.com/]Area51[/url]',
  129. '[url=https&#58;//area51&#46;phpbb&#46;com/:]Area51[/url:]',
  130. ),
  131. array(
  132. 'Test default bbcodes: simple email',
  133. '[email]bbcode-test@phpbb.com[/email]',
  134. '[email:]bbcode-test@phpbb&#46;com[/email:]',
  135. ),
  136. array(
  137. 'Test default bbcodes: simple email with description',
  138. '[email=bbcode-test@phpbb.com]Email[/email]',
  139. '[email=bbcode-test@phpbb&#46;com:]Email[/email:]',
  140. ),
  141. array(
  142. 'Test default bbcodes: simple attachment',
  143. '[attachment=0]filename[/attachment]',
  144. '[attachment=0:]<!-- ia0 -->filename<!-- ia0 -->[/attachment:]',
  145. ),
  146. // Special cases for quote which were reported as bugs before
  147. array(
  148. 'PHPBB3-1401 - correct: parsed',
  149. '[quote=&quot;&#91;test]test&quot;]test [ test[/quote]',
  150. '[quote=&quot;&#91;test]test&quot;:]test [ test[/quote:]',
  151. ),
  152. array(
  153. 'PHPBB3-6117 - correct: parsed',
  154. '[quote]test[/quote] test ] and [ test [quote]test[/quote]',
  155. '[quote:]test[/quote:] test ] and [ test [quote:]test[/quote:]',
  156. ),
  157. array(
  158. 'PHPBB3-6200 - correct: parsed',
  159. '[quote=&quot;[&quot;]test[/quote]',
  160. '[quote=&quot;&#91;&quot;:]test[/quote:]',
  161. ),
  162. array(
  163. 'PHPBB3-9364 - quoted: "test[/[/b]quote] test" / non-quoted: "[/quote] test" - also failed if layout distorted',
  164. '[quote]test[/[/b]quote] test [/quote][/quote] test',
  165. '[quote:]test[/[/b]quote] test [/quote:][/quote] test',
  166. ),
  167. array(
  168. 'PHPBB3-8096 - first quote tag parsed, second quote tag unparsed',
  169. '[quote=&quot;a&quot;]a[/quote][quote=&quot;a]a[/quote]',
  170. '[quote=&quot;a&quot;:]a[/quote:][quote=&quot;a]a[/quote]',
  171. ),
  172. // Simple bbcodes nesting
  173. array(
  174. 'Allow textual bbcodes in textual bbcodes',
  175. '[b]bold [i]bold + italic[/i][/b]',
  176. '[b:]bold [i:]bold + italic[/i:][/b:]',
  177. ),
  178. array(
  179. 'Allow textual bbcodes in url with description',
  180. '[url=https://area51.phpbb.com/]Area51 [i]italic[/i][/url]',
  181. '[url=https&#58;//area51&#46;phpbb&#46;com/:]Area51 [i:]italic[/i:][/url:]',
  182. ),
  183. array(
  184. 'Allow url with description in textual bbcodes',
  185. '[i]italic [url=https://area51.phpbb.com/]Area51[/url][/i]',
  186. '[i:]italic [url=https&#58;//area51&#46;phpbb&#46;com/:]Area51[/url:][/i:]',
  187. ),
  188. // Nesting bbcodes into quote usernames
  189. array(
  190. 'Allow textual bbcodes in usernames',
  191. '[quote=&quot;[i]test[/i]&quot;]test[/quote]',
  192. '[quote=&quot;[i:]test[/i:]&quot;:]test[/quote:]',
  193. ),
  194. array(
  195. 'Allow links bbcodes in usernames',
  196. '[quote=&quot;[url=https://area51.phpbb.com/]test[/url]&quot;]test[/quote]',
  197. '[quote=&quot;[url=https&#58;//area51&#46;phpbb&#46;com/:]test[/url:]&quot;:]test[/quote:]',
  198. ),
  199. array(
  200. 'Allow img bbcodes in usernames - Username displayed the image',
  201. '[quote=&quot;[img]https://area51.phpbb.com/images/area51.png[/img]&quot;]test[/quote]',
  202. '[quote=&quot;[img:]https&#58;//area51&#46;phpbb&#46;com/images/area51&#46;png[/img:]&quot;:]test[/quote:]',
  203. ),
  204. array(
  205. 'Disallow flash bbcodes in usernames - Username displayed as [flash]http://www.phpbb.com/[/flash]',
  206. '[quote=&quot;[flash]http://www.phpbb.com/[/flash]&quot;]test[/quote]',
  207. '[quote=&quot;&#91;flash]http://www.phpbb.com/&#91;/flash]&quot;:]test[/quote:]',
  208. ),
  209. array(
  210. 'Disallow quote bbcodes in usernames - Username displayed as [quote]test[/quote]',
  211. '[quote=&quot;[quote]test[/quote]&quot;]test[/quote]',
  212. '[quote=&quot;&#91;quote]test&#91;/quote]&quot;:]test[/quote:]',
  213. ),
  214. // Do not parse bbcodes in code boxes
  215. array(
  216. 'Do not parse textual bbcodes in code',
  217. '[code]unparsed code [b]bold [i]bold + italic[/i][/b][/code]',
  218. '[code:]unparsed code &#91;b&#93;bold &#91;i&#93;bold + italic&#91;/i&#93;&#91;/b&#93;[/code:]',
  219. ),
  220. array(
  221. 'Do not parse quote bbcodes in code',
  222. '[code]unparsed code [quote=&quot;username&quot;]quoted[/quote][/code]',
  223. '[code:]unparsed code &#91;quote=&quot;username&quot;&#93;quoted&#91;/quote&#93;[/code:]',
  224. ),
  225. // New user friendly mixed nesting
  226. array(
  227. 'Textual bbcode nesting into textual bbcode',
  228. '[b]bold [i]bold + italic[/b] italic[/i]',
  229. '[b:]bold [i:]bold + italic[/b:] italic[/i:]',
  230. 'Incomplete test case: secondpass parses as [b:]bold [i:]bold + italic[/i:] italic[/b:]',
  231. ),
  232. );
  233. }
  234. /**
  235. * @dataProvider bbcode_firstpass_data
  236. */
  237. public function test_bbcode_firstpass($description, $message, $expected, $incomplete = false)
  238. {
  239. if ($incomplete)
  240. {
  241. $this->markTestIncomplete($incomplete);
  242. }
  243. global $user, $request, $symfony_request;
  244. $user = new phpbb_mock_user;
  245. $request = new phpbb_mock_request;
  246. $symfony_request = new \phpbb\symfony_request($request);
  247. $bbcode = new bbcode_firstpass();
  248. $bbcode->mode = 'post';
  249. $bbcode->message = $message;
  250. $bbcode->bbcode_init(false);
  251. $bbcode->parse_bbcode();
  252. $this->assertEquals($expected, $bbcode->message);
  253. }
  254. }