A Python parser for MediaWiki wikicode https://mwparserfromhell.readthedocs.io/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

318 regels
13 KiB

  1. name: no_params
  2. label: simplest type of template
  3. input: "{{template}}"
  4. output: [TemplateOpen(), Text(text="template"), TemplateClose()]
  5. ---
  6. name: one_param_unnamed
  7. label: basic template with one unnamed parameter
  8. input: "{{foo|bar}}"
  9. output: [TemplateOpen(), Text(text="foo"), TemplateParamSeparator(), Text(text="bar"), TemplateClose()]
  10. ---
  11. name: one_param_named
  12. label: basic template with one named parameter
  13. input: "{{foo|bar=baz}}"
  14. output: [TemplateOpen(), Text(text="foo"), TemplateParamSeparator(), Text(text="bar"), TemplateParamEquals(), Text(text="baz"), TemplateClose()]
  15. ---
  16. name: multiple_unnamed_params
  17. label: basic template with multiple unnamed parameters
  18. input: "{{foo|bar|baz|biz|buzz}}"
  19. output: [TemplateOpen(), Text(text="foo"), TemplateParamSeparator(), Text(text="bar"), TemplateParamSeparator(), Text(text="baz"), TemplateParamSeparator(), Text(text="biz"), TemplateParamSeparator(), Text(text="buzz"), TemplateClose()]
  20. ---
  21. name: multiple_named_params
  22. label: basic template with multiple named parameters
  23. input: "{{foo|bar=baz|biz=buzz|buff=baff|usr=bin}}"
  24. output: [TemplateOpen(), Text(text="foo"), TemplateParamSeparator(), Text(text="bar"), TemplateParamEquals(), Text(text="baz"), TemplateParamSeparator(), Text(text="biz"), TemplateParamEquals(), Text(text="buzz"), TemplateParamSeparator(), Text(text="buff"), TemplateParamEquals(), Text(text="baff"), TemplateParamSeparator(), Text(text="usr"), TemplateParamEquals(), Text(text="bin"), TemplateClose()]
  25. ---
  26. name: multiple_mixed_params
  27. label: basic template with multiple unnamed/named parameters
  28. input: "{{foo|bar=baz|biz|buzz=buff|usr|bin}}"
  29. output: [TemplateOpen(), Text(text="foo"), TemplateParamSeparator(), Text(text="bar"), TemplateParamEquals(), Text(text="baz"), TemplateParamSeparator(), Text(text="biz"), TemplateParamSeparator(), Text(text="buzz"), TemplateParamEquals(), Text(text="buff"), TemplateParamSeparator(), Text(text="usr"), TemplateParamSeparator(), Text(text="bin"), TemplateClose()]
  30. ---
  31. name: multiple_mixed_params2
  32. label: basic template with multiple unnamed/named parameters in another order
  33. input: "{{foo|bar|baz|biz=buzz|buff=baff|usr=bin}}"
  34. output: [TemplateOpen(), Text(text="foo"), TemplateParamSeparator(), Text(text="bar"), TemplateParamSeparator(), Text(text="baz"), TemplateParamSeparator(), Text(text="biz"), TemplateParamEquals(), Text(text="buzz"), TemplateParamSeparator(), Text(text="buff"), TemplateParamEquals(), Text(text="baff"), TemplateParamSeparator(), Text(text="usr"), TemplateParamEquals(), Text(text="bin"), TemplateClose()]
  35. ---
  36. name: nested_unnamed_param
  37. label: nested template as an unnamed parameter
  38. input: "{{foo|{{bar}}}}"
  39. output: [TemplateOpen(), Text(text="foo"), TemplateParamSeparator(), TemplateOpen(), Text(text="bar"), TemplateClose(), TemplateClose()]
  40. ---
  41. name: nested_named_param_value
  42. label: nested template as a parameter value with a named parameter
  43. input: "{{foo|bar={{baz}}}}"
  44. output: [TemplateOpen(), Text(text="foo"), TemplateParamSeparator(), Text(text="bar"), TemplateParamEquals(), TemplateOpen(), Text(text="baz"), TemplateClose(), TemplateClose()]
  45. ---
  46. name: nested_named_param_name_and_value
  47. label: nested templates as a parameter name and value
  48. input: "{{foo|{{bar}}={{baz}}}}"
  49. output: [TemplateOpen(), Text(text="foo"), TemplateParamSeparator(), TemplateOpen(), Text(text="bar"), TemplateClose(), TemplateParamEquals(), TemplateOpen(), Text(text="baz"), TemplateClose(), TemplateClose()]
  50. ---
  51. name: nested_name_start
  52. label: nested template at the beginning of a template name
  53. input: "{{{{foo}}bar}}"
  54. output: [TemplateOpen(), TemplateOpen(), Text(text="foo"), TemplateClose(), Text(text="bar"), TemplateClose()]
  55. ---
  56. name: nested_name_start_unnamed_param
  57. label: nested template at the beginning of a template name and as an unnamed parameter
  58. input: "{{{{foo}}bar|{{baz}}}}"
  59. output: [TemplateOpen(), TemplateOpen(), Text(text="foo"), TemplateClose(), Text(text="bar"), TemplateParamSeparator(), TemplateOpen(), Text(text="baz"), TemplateClose(), TemplateClose()]
  60. ---
  61. name: nested_name_start_named_param_value
  62. label: nested template at the beginning of a template name and as a parameter value with a named parameter
  63. input: "{{{{foo}}bar|baz={{biz}}}}"
  64. output: [TemplateOpen(), TemplateOpen(), Text(text="foo"), TemplateClose(), Text(text="bar"), TemplateParamSeparator(), Text(text="baz"), TemplateParamEquals(), TemplateOpen(), Text(text="biz"), TemplateClose(), TemplateClose()]
  65. ---
  66. name: nested_name_start_named_param_name_and_value
  67. label: nested template at the beginning of a template name and as a parameter name and value
  68. input: "{{{{foo}}bar|{{baz}}={{biz}}}}"
  69. output: [TemplateOpen(), TemplateOpen(), Text(text="foo"), TemplateClose(), Text(text="bar"), TemplateParamSeparator(), TemplateOpen(), Text(text="baz"), TemplateClose(), TemplateParamEquals(), TemplateOpen(), Text(text="biz"), TemplateClose(), TemplateClose()]
  70. ---
  71. name: nested_name_end
  72. label: nested template at the end of a template name
  73. input: "{{foo{{bar}}}}"
  74. output: [TemplateOpen(), Text(text="foo"), TemplateOpen(), Text(text="bar"), TemplateClose(), TemplateClose()]
  75. ---
  76. name: nested_name_end_unnamed_param
  77. label: nested template at the end of a template name and as an unnamed parameter
  78. input: "{{foo{{bar}}|{{baz}}}}"
  79. output: [TemplateOpen(), Text(text="foo"), TemplateOpen(), Text(text="bar"), TemplateClose(), TemplateParamSeparator(), TemplateOpen(), Text(text="baz"), TemplateClose(), TemplateClose()]
  80. ---
  81. name: nested_name_end_named_param_value
  82. label: nested template at the end of a template name and as a parameter value with a named parameter
  83. input: "{{foo{{bar}}|baz={{biz}}}}"
  84. output: [TemplateOpen(), Text(text="foo"), TemplateOpen(), Text(text="bar"), TemplateClose(), TemplateParamSeparator(), Text(text="baz"), TemplateParamEquals(), TemplateOpen(), Text(text="biz"), TemplateClose(), TemplateClose()]
  85. ---
  86. name: nested_name_end_named_param_name_and_value
  87. label: nested template at the end of a template name and as a parameter name and value
  88. input: "{{foo{{bar}}|{{baz}}={{biz}}}}"
  89. output: [TemplateOpen(), Text(text="foo"), TemplateOpen(), Text(text="bar"), TemplateClose(), TemplateParamSeparator(), TemplateOpen(), Text(text="baz"), TemplateClose(), TemplateParamEquals(), TemplateOpen(), Text(text="biz"), TemplateClose(), TemplateClose()]
  90. ---
  91. name: nested_name_mid
  92. label: nested template in the middle of a template name
  93. input: "{{foo{{bar}}baz}}"
  94. output: [TemplateOpen(), Text(text="foo"), TemplateOpen(), Text(text="bar"), TemplateClose(), Text(text="baz"), TemplateClose()]
  95. ---
  96. name: nested_name_mid_unnamed_param
  97. label: nested template in the middle of a template name and as an unnamed parameter
  98. input: "{{foo{{bar}}baz|{{biz}}}}"
  99. output: [TemplateOpen(), Text(text="foo"), TemplateOpen(), Text(text="bar"), TemplateClose(), Text(text="baz"), TemplateParamSeparator(), TemplateOpen(), Text(text="biz"), TemplateClose(), TemplateClose()]
  100. ---
  101. name: nested_name_mid_named_param_value
  102. label: nested template in the middle of a template name and as a parameter value with a named parameter
  103. input: "{{foo{{bar}}baz|biz={{buzz}}}}"
  104. output: [TemplateOpen(), Text(text="foo"), TemplateOpen(), Text(text="bar"), TemplateClose(), Text(text="baz"), TemplateParamSeparator(), Text(text="biz"), TemplateParamEquals(), TemplateOpen(), Text(text="buzz"), TemplateClose(), TemplateClose()]
  105. ---
  106. name: nested_name_mid_named_param_name_and_value
  107. label: nested template in the middle of a template name and as a parameter name and value
  108. input: "{{foo{{bar}}baz|{{biz}}={{buzz}}}}"
  109. output: [TemplateOpen(), Text(text="foo"), TemplateOpen(), Text(text="bar"), TemplateClose(), Text(text="baz"), TemplateParamSeparator(), TemplateOpen(), Text(text="biz"), TemplateClose(), TemplateParamEquals(), TemplateOpen(), Text(text="buzz"), TemplateClose(), TemplateClose()]
  110. ---
  111. name: nested_name_start_end
  112. label: nested template at the beginning and end of a template name
  113. input: "{{{{foo}}{{bar}}}}"
  114. output: [TemplateOpen(), TemplateOpen(), Text(text="foo"), TemplateClose(), TemplateOpen(), Text(text="bar"), TemplateClose(), TemplateClose()]
  115. ---
  116. name: nested_name_start_end_unnamed_param
  117. label: nested template at the beginning and end of a template name and as an unnamed parameter
  118. input: "{{{{foo}}{{bar}}|{{baz}}}}"
  119. output: [TemplateOpen(), TemplateOpen(), Text(text="foo"), TemplateClose(), TemplateOpen(), Text(text="bar"), TemplateClose(), TemplateParamSeparator(), TemplateOpen(), Text(text="baz"), TemplateClose(), TemplateClose()]
  120. ---
  121. name: nested_name_start_end_named_param_value
  122. label: nested template at the beginning and end of a template name and as a parameter value with a named parameter
  123. input: "{{{{foo}}{{bar}}|baz={{biz}}}}"
  124. output: [TemplateOpen(), TemplateOpen(), Text(text="foo"), TemplateClose(), TemplateOpen(), Text(text="bar"), TemplateClose(), TemplateParamSeparator(), Text(text="baz"), TemplateParamEquals(), TemplateOpen(), Text(text="biz"), TemplateClose(), TemplateClose()]
  125. ---
  126. name: nested_name_start_end_named_param_name_and_value
  127. label: nested template at the beginning and end of a template name and as a parameter name and value
  128. input: "{{{{foo}}{{bar}}|{{baz}}={{biz}}}}"
  129. output: [TemplateOpen(), TemplateOpen(), Text(text="foo"), TemplateClose(), TemplateOpen(), Text(text="bar"), TemplateClose(), TemplateParamSeparator(), TemplateOpen(), Text(text="baz"), TemplateClose(), TemplateParamEquals(), TemplateOpen(), Text(text="biz"), TemplateClose(), TemplateClose()]
  130. ---
  131. name: nested_names_multiple
  132. label: multiple nested templates within nested templates
  133. input: "{{{{{{{{foo}}bar}}baz}}biz}}"
  134. output: [TemplateOpen(), TemplateOpen(), TemplateOpen(), TemplateOpen(), Text(text="foo"), TemplateClose(), Text(text="bar"), TemplateClose(), Text(text="baz"), TemplateClose(), Text(text="biz"), TemplateClose()]
  135. ---
  136. name: nested_names_multiple_unnamed_param
  137. label: multiple nested templates within nested templates with a nested unnamed parameter
  138. input: "{{{{{{{{foo}}bar}}baz}}biz|{{buzz}}}}"
  139. output: [TemplateOpen(), TemplateOpen(), TemplateOpen(), TemplateOpen(), Text(text="foo"), TemplateClose(), Text(text="bar"), TemplateClose(), Text(text="baz"), TemplateClose(), Text(text="biz"), TemplateParamSeparator(), TemplateOpen(), Text(text="buzz"), TemplateClose(), TemplateClose()]
  140. ---
  141. name: nested_names_multiple_named_param_value
  142. label: multiple nested templates within nested templates with a nested parameter value in a named parameter
  143. input: "{{{{{{{{foo}}bar}}baz}}biz|buzz={{bin}}}}"
  144. output: [TemplateOpen(), TemplateOpen(), TemplateOpen(), TemplateOpen(), Text(text="foo"), TemplateClose(), Text(text="bar"), TemplateClose(), Text(text="baz"), TemplateClose(), Text(text="biz"), TemplateParamSeparator(), Text(text="buzz"), TemplateParamEquals(), TemplateOpen(), Text(text="bin"), TemplateClose(), TemplateClose()]
  145. ---
  146. name: nested_names_multiple_named_param_name_and_value
  147. label: multiple nested templates within nested templates with a nested parameter name and value
  148. input: "{{{{{{{{foo}}bar}}baz}}biz|{{buzz}}={{bin}}}}"
  149. output: [TemplateOpen(), TemplateOpen(), TemplateOpen(), TemplateOpen(), Text(text="foo"), TemplateClose(), Text(text="bar"), TemplateClose(), Text(text="baz"), TemplateClose(), Text(text="biz"), TemplateParamSeparator(), TemplateOpen(), Text(text="buzz"), TemplateClose(), TemplateParamEquals(), TemplateOpen(), Text(text="bin"), TemplateClose(), TemplateClose()]
  150. ---
  151. name: incomplete_tests
  152. "{{{{{{{{foo}}bar|baz=biz}}buzz}}usr|{{bin}}}}"
  153. "{{\nfoobar}}"
  154. "{{foobar\n}}"
  155. "{{\nfoobar\n}}"
  156. "{{foo\nbar}}"
  157. "{{\nfoo\nbar}}"
  158. "{{foo\nbar\n}}"
  159. "{{\nfoo\nbar\n}}"
  160. "{{foo|\nbar}}"
  161. "{{foo|bar\n}}"
  162. "{{foo|\nbar\n}}"
  163. "{{foo|\nb\nar}}"
  164. "{{foo|b\nar\n}}"
  165. "{{foo|\nb\nar\n}}"
  166. "{{\nfoo|\nbar}}"
  167. "{{\nfoo|bar\n}}"
  168. "{{\nfoo|\nbar\n}}"
  169. "{{\nfoo|\nb\nar}}"
  170. "{{\nfoo|b\nar\n}}"
  171. "{{\nfoo|\nb\nar\n}}"
  172. "{{foo\n|\nbar}}"
  173. "{{foo\n|bar\n}}"
  174. "{{foo\n|\nbar\n}}"
  175. "{{foo\n|\nb\nar}}"
  176. "{{foo\n|b\nar\n}}"
  177. "{{foo\n|\nb\nar\n}}"
  178. "{{\nfoo\n|\nbar}}"
  179. "{{\nfoo\n|bar\n}}"
  180. "{{\nfoo\n|\nbar\n}}"
  181. "{{\nfoo\n|\nb\nar}}"
  182. "{{\nfoo\n|b\nar\n}}"
  183. "{{\nfoo\n|\nb\nar\n}}"
  184. "{{f\noo|\nbar}}"
  185. "{{\nf\noo|\nbar}}"
  186. "{{f\noo\n|\nbar}}"
  187. "{{\nf\noo\n|\nbar}}"
  188. "{{foo|1=\nbar}}"
  189. "{{foo|1=bar\n}}"
  190. "{{foo|1=\nbar\n}}"
  191. "{{foo|1=\nb\nar}}"
  192. "{{foo|1=b\nar\n}}"
  193. "{{foo|1=\nb\nar\n}}"
  194. "{{foo|\nbar=baz}}"
  195. "{{foo|bar\n=baz}}"
  196. "{{foo|\nbar\n=baz}}"
  197. "{{foo|\nb\nar=baz}}"
  198. "{{foo|b\nar\n=baz}}"
  199. "{{foo|\nb\nar\n=baz}}"
  200. "{{foo|\nbar=baz\n}}"
  201. "{{foo|bar\n=baz\n}}"
  202. "{{foo|\nbar\n=baz\n}}"
  203. "{{foo|\nb\nar=baz\n}}"
  204. "{{foo|b\nar\n=baz\n}}"
  205. "{{foo|\nb\nar\n=baz\n}}"
  206. "{{foo|\nbar=\nbaz}}"
  207. "{{foo|bar\n=\nbaz}}"
  208. "{{foo|\nbar\n=\nbaz}}"
  209. "{{foo|\nb\nar=\nbaz}}"
  210. "{{foo|b\nar\n=\nbaz}}"
  211. "{{foo|\nb\nar\n=\nbaz}}"
  212. "{{foo|\nbar=\nbaz\n}}"
  213. "{{foo|bar\n=\nbaz\n}}"
  214. "{{foo|\nbar\n=\nbaz\n}}"
  215. "{{foo|\nb\nar=\nbaz\n}}"
  216. "{{foo|b\nar\n=\nbaz\n}}"
  217. "{{foo|\nb\nar\n=\nbaz\n}}"
  218. "{{foo|\nbar=ba\nz}}"
  219. "{{foo|bar\n=ba\nz}}"
  220. "{{foo|\nbar\n=ba\nz}}"
  221. "{{foo|\nb\nar=ba\nz}}"
  222. "{{foo|b\nar\n=ba\nz}}"
  223. "{{foo|\nb\nar\n=ba\nz}}"
  224. "{{\nfoo\n|\nbar\n=\nb\naz\n|\nb\nuz\n}}"
  225. "{{\nfoo\n|\nb\nar\n|\nbaz\n=\nb\nuz\n}}"
  226. "{{\nfoo\n|\n{{\nbar\n|\nbaz\n=\nb\niz\n}}\n=\nb\nuzz\n}}"
  227. "{{foo{bar}}"
  228. "{{foo}bar}}"
  229. "{{{foobar}}"
  230. "{{foo{b{ar}}"
  231. "{{foo[bar}}"
  232. "{{foo]bar}}"
  233. "{{[foobar}}"
  234. "{{foobar]}}"
  235. "{{foobar"
  236. "{{foobar}"
  237. "{{foobar|"
  238. "{{foo|bar"
  239. "{{foo|bar|"
  240. "{{foo|bar="
  241. "{{foo|bar=|"
  242. "{{foo|bar=baz"
  243. "{{foo|bar=baz|"
  244. "{{foo|bar|baz"
  245. "{{foo|bar|baz="
  246. "{{foo|bar|baz=biz"
  247. "{{foo|bar=baz|biz"
  248. "{{foo|bar=baz|biz="
  249. "{{foo|bar=baz|biz=buzz"