djlint 1.30.0 → 1.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/package.json +3 -2
  2. package/.coveragerc +0 -9
  3. package/.editorconfig +0 -21
  4. package/.flake8 +0 -0
  5. package/.github/FUNDING.yml +0 -2
  6. package/.github/ISSUE_TEMPLATE/config.yml +0 -6
  7. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
  8. package/.github/ISSUE_TEMPLATE/formatter_but_report.md +0 -30
  9. package/.github/ISSUE_TEMPLATE/linter_bug_report.md +0 -34
  10. package/.github/ISSUE_TEMPLATE/translation.md +0 -14
  11. package/.github/config.yml +0 -4
  12. package/.github/pull_request_template.md +0 -10
  13. package/.github/workflows/cancel.yml +0 -17
  14. package/.github/workflows/demo.yml +0 -98
  15. package/.github/workflows/issues.yml +0 -23
  16. package/.github/workflows/linkcheck.yaml +0 -21
  17. package/.github/workflows/lint.yml +0 -25
  18. package/.github/workflows/release.yml +0 -57
  19. package/.github/workflows/test.yml +0 -85
  20. package/.pre-commit-config.yaml +0 -45
  21. package/.pre-commit-hooks.yaml +0 -71
  22. package/.prettierignore +0 -7
  23. package/.prettierrc +0 -11
  24. package/.releaserc +0 -16
  25. package/CHANGELOG.md +0 -13
  26. package/MANIFEST.in +0 -2
  27. package/build_demo.sh +0 -17
  28. package/docs/.eleventy.js +0 -425
  29. package/docs/.eleventyignore +0 -2
  30. package/docs/.prettierignore +0 -3
  31. package/docs/.prettierrc +0 -11
  32. package/docs/package.json +0 -73
  33. package/docs/readme.md +0 -17
  34. package/docs/src/_data/configuration.json +0 -646
  35. package/docs/src/_data/eleventyComputed.js +0 -22
  36. package/docs/src/_data/i18n/index.js +0 -159
  37. package/docs/src/_data/js.js +0 -7
  38. package/docs/src/_data/locales.js +0 -17
  39. package/docs/src/_data/site.json +0 -8
  40. package/docs/src/_includes/demo.njk +0 -157
  41. package/docs/src/_includes/docs_layout.njk +0 -34
  42. package/docs/src/_includes/foot.njk +0 -26
  43. package/docs/src/_includes/index.njk +0 -187
  44. package/docs/src/_includes/languages_layout.njk +0 -11
  45. package/docs/src/_includes/layout.njk +0 -111
  46. package/docs/src/_includes/nav.njk +0 -85
  47. package/docs/src/_utils/minify-html.js +0 -14
  48. package/docs/src/_utils/rollupper.js +0 -91
  49. package/docs/src/_utils/scripts.11ty.js +0 -27
  50. package/docs/src/demo.njk +0 -4
  51. package/docs/src/docs/best-practices.md +0 -78
  52. package/docs/src/docs/changelog.md +0 -452
  53. package/docs/src/docs/configuration.md +0 -145
  54. package/docs/src/docs/docs.json +0 -4
  55. package/docs/src/docs/formatter.md +0 -82
  56. package/docs/src/docs/getting-started.md +0 -126
  57. package/docs/src/docs/ignoring-code.md +0 -75
  58. package/docs/src/docs/integrations.md +0 -120
  59. package/docs/src/docs/languages/angular.md +0 -31
  60. package/docs/src/docs/languages/django.md +0 -40
  61. package/docs/src/docs/languages/golang.md +0 -31
  62. package/docs/src/docs/languages/handlebars.md +0 -31
  63. package/docs/src/docs/languages/jinja.md +0 -39
  64. package/docs/src/docs/languages/languages.json +0 -3
  65. package/docs/src/docs/languages/mustache.md +0 -31
  66. package/docs/src/docs/languages/nunjucks.md +0 -39
  67. package/docs/src/docs/languages/twig.md +0 -41
  68. package/docs/src/docs/linter.md +0 -199
  69. package/docs/src/fr/demo.njk +0 -4
  70. package/docs/src/fr/docs/best-practices.md +0 -78
  71. package/docs/src/fr/docs/changelog.md +0 -452
  72. package/docs/src/fr/docs/configuration.md +0 -144
  73. package/docs/src/fr/docs/docs.json +0 -3
  74. package/docs/src/fr/docs/formatter.md +0 -83
  75. package/docs/src/fr/docs/getting-started.md +0 -127
  76. package/docs/src/fr/docs/ignoring-code.md +0 -75
  77. package/docs/src/fr/docs/integrations.md +0 -100
  78. package/docs/src/fr/docs/languages/angular.md +0 -31
  79. package/docs/src/fr/docs/languages/django.md +0 -31
  80. package/docs/src/fr/docs/languages/golang.md +0 -31
  81. package/docs/src/fr/docs/languages/handlebars.md +0 -31
  82. package/docs/src/fr/docs/languages/jinja.md +0 -31
  83. package/docs/src/fr/docs/languages/languages.json +0 -3
  84. package/docs/src/fr/docs/languages/mustache.md +0 -31
  85. package/docs/src/fr/docs/languages/nunjucks.md +0 -31
  86. package/docs/src/fr/docs/languages/twig.md +0 -31
  87. package/docs/src/fr/docs/linter.md +0 -207
  88. package/docs/src/fr/fr.json +0 -4
  89. package/docs/src/fr/index.njk +0 -4
  90. package/docs/src/index.njk +0 -4
  91. package/docs/src/lib/generate-content-hash.js +0 -13
  92. package/docs/src/robots.txt +0 -4
  93. package/docs/src/ru/demo.njk +0 -4
  94. package/docs/src/ru/docs/best-practices.md +0 -78
  95. package/docs/src/ru/docs/changelog.md +0 -453
  96. package/docs/src/ru/docs/configuration.md +0 -142
  97. package/docs/src/ru/docs/docs.json +0 -3
  98. package/docs/src/ru/docs/formatter.md +0 -82
  99. package/docs/src/ru/docs/getting-started.md +0 -127
  100. package/docs/src/ru/docs/ignoring-code.md +0 -75
  101. package/docs/src/ru/docs/integrations.md +0 -100
  102. package/docs/src/ru/docs/languages/angular.md +0 -31
  103. package/docs/src/ru/docs/languages/django.md +0 -31
  104. package/docs/src/ru/docs/languages/golang.md +0 -31
  105. package/docs/src/ru/docs/languages/handlebars.md +0 -31
  106. package/docs/src/ru/docs/languages/jinja.md +0 -31
  107. package/docs/src/ru/docs/languages/languages.json +0 -3
  108. package/docs/src/ru/docs/languages/mustache.md +0 -31
  109. package/docs/src/ru/docs/languages/nunjucks.md +0 -31
  110. package/docs/src/ru/docs/languages/twig.md +0 -31
  111. package/docs/src/ru/docs/linter.md +0 -126
  112. package/docs/src/ru/index.njk +0 -4
  113. package/docs/src/ru/ru.json +0 -4
  114. package/docs/src/sitemap.njk +0 -16
  115. package/docs/src/static/css/site.scss +0 -467
  116. package/docs/src/static/font/fontawesome/stylesheet.scss +0 -78
  117. package/docs/src/static/img/apple-touch-icon.png +0 -0
  118. package/docs/src/static/img/demo-min.gif +0 -0
  119. package/docs/src/static/img/demo.gif +0 -0
  120. package/docs/src/static/img/demo.webm +0 -0
  121. package/docs/src/static/img/favicon-16x16.png +0 -0
  122. package/docs/src/static/img/favicon-32x32.png +0 -0
  123. package/docs/src/static/img/favicon.ico +0 -0
  124. package/docs/src/static/img/icon-square.indd +0 -0
  125. package/docs/src/static/img/icon-square.png +0 -0
  126. package/docs/src/static/img/icon.png +0 -0
  127. package/docs/src/static/img/logo-192x192.png +0 -0
  128. package/docs/src/static/img/logo-512x512.png +0 -0
  129. package/docs/src/static/img/logos/angular.png +0 -0
  130. package/docs/src/static/img/logos/django.png +0 -0
  131. package/docs/src/static/img/logos/golang.png +0 -0
  132. package/docs/src/static/img/logos/handlebars.png +0 -0
  133. package/docs/src/static/img/logos/jinja.png +0 -0
  134. package/docs/src/static/img/logos/mustache.png +0 -0
  135. package/docs/src/static/img/logos/nunjucks.png +0 -0
  136. package/docs/src/static/img/logos/twig.png +0 -0
  137. package/docs/src/static/img/old_demo.gif +0 -0
  138. package/docs/src/static/img/style.css +0 -122
  139. package/docs/src/static/js/animate.js +0 -69
  140. package/docs/src/static/js/editor.js +0 -171
  141. package/docs/src/static/js/hamburger.js +0 -19
  142. package/docs/src/static/js/modal.js +0 -47
  143. package/docs/src/static/js/worker.js +0 -142
  144. package/docs/src/static/py/EditorConfig-99-py3-none-any.whl +0 -0
  145. package/docs/src/static/py/PyYAML-99-py3-none-any.whl +0 -0
  146. package/docs/src/static/py/click-99-py3-none-any.whl +0 -0
  147. package/docs/src/static/py/colorama-99-py3-none-any.whl +0 -0
  148. package/docs/src/static/py/cssbeautifier-99-py3-none-any.whl +0 -0
  149. package/docs/src/static/py/djlint-99-py3-none-any.whl +0 -0
  150. package/docs/src/static/py/html_tag_names-99-py3-none-any.whl +0 -0
  151. package/docs/src/static/py/html_void_elements-99-py3-none-any.whl +0 -0
  152. package/docs/src/static/py/jsbeautifier-99-py3-none-any.whl +0 -0
  153. package/docs/src/static/py/json5-99-py3-none-any.whl +0 -0
  154. package/docs/src/static/py/pathspec-99-py3-none-any.whl +0 -0
  155. package/docs/src/static/py/regex-2023.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +0 -0
  156. package/docs/src/static/py/six-1.16.0-py2.py3-none-any.whl +0 -0
  157. package/docs/src/static/py/tomli-2.0.1-py3-none-any.whl +0 -0
  158. package/docs/src/static/py/tqdm-4.65.0-py3-none-any.whl +0 -0
  159. package/icon.xcf +0 -0
  160. package/poetry.lock +0 -835
  161. package/pyproject.toml +0 -100
  162. package/renovate.json +0 -44
  163. package/scripts/updateVersion.js +0 -16
  164. package/src/djlint/__init__.py +0 -451
  165. package/src/djlint/__main__.py +0 -4
  166. package/src/djlint/formatter/__init__.py +0 -1
  167. package/src/djlint/formatter/attributes.py +0 -212
  168. package/src/djlint/formatter/compress.py +0 -64
  169. package/src/djlint/formatter/condense.py +0 -221
  170. package/src/djlint/formatter/css.py +0 -60
  171. package/src/djlint/formatter/expand.py +0 -111
  172. package/src/djlint/formatter/indent.py +0 -418
  173. package/src/djlint/formatter/js.py +0 -58
  174. package/src/djlint/helpers.py +0 -321
  175. package/src/djlint/lint.py +0 -128
  176. package/src/djlint/output.py +0 -220
  177. package/src/djlint/reformat.py +0 -63
  178. package/src/djlint/rules/H025.py +0 -65
  179. package/src/djlint/rules.yaml +0 -279
  180. package/src/djlint/settings.py +0 -969
  181. package/src/djlint/src.py +0 -91
  182. package/tests/__init__.py +0 -0
  183. package/tests/conftest.py +0 -239
  184. package/tests/test_cli.py +0 -71
  185. package/tests/test_config/__init__.py +0 -0
  186. package/tests/test_config/test_blank_line_after_tag.py +0 -135
  187. package/tests/test_config/test_blank_line_before_tag.py +0 -141
  188. package/tests/test_config/test_close_void_tags.py +0 -31
  189. package/tests/test_config/test_custom_blocks.py +0 -56
  190. package/tests/test_config/test_custom_html.py +0 -45
  191. package/tests/test_config/test_djlintrc/.djlintrc +0 -38
  192. package/tests/test_config/test_djlintrc/__init__.py +0 -0
  193. package/tests/test_config/test_djlintrc/test_config.py +0 -44
  194. package/tests/test_config/test_djlintrc_custom/.djlint-cust +0 -38
  195. package/tests/test_config/test_djlintrc_custom/.djlintrc +0 -2
  196. package/tests/test_config/test_djlintrc_custom/__init__.py +0 -0
  197. package/tests/test_config/test_djlintrc_custom/test_config.py +0 -48
  198. package/tests/test_config/test_excludes/__init__.py +0 -0
  199. package/tests/test_config/test_excludes/excluded.html +0 -1
  200. package/tests/test_config/test_excludes/foo/excluded.html +0 -1
  201. package/tests/test_config/test_excludes/html.html +0 -1
  202. package/tests/test_config/test_excludes/pyproject.toml +0 -3
  203. package/tests/test_config/test_excludes/test_config.py +0 -30
  204. package/tests/test_config/test_extension/__init__.py +0 -0
  205. package/tests/test_config/test_extension/html.test +0 -1
  206. package/tests/test_config/test_extension/pyproject.toml +0 -3
  207. package/tests/test_config/test_extension/test_config.py +0 -27
  208. package/tests/test_config/test_files/.djlintrc_global +0 -9
  209. package/tests/test_config/test_files/test.html +0 -3
  210. package/tests/test_config/test_files/test_config.py +0 -123
  211. package/tests/test_config/test_files/test_two.html +0 -1
  212. package/tests/test_config/test_format_attribute_template_tags.py +0 -280
  213. package/tests/test_config/test_format_css.py +0 -197
  214. package/tests/test_config/test_format_js.py +0 -220
  215. package/tests/test_config/test_gitignore/__init__.py +0 -0
  216. package/tests/test_config/test_gitignore/html_one.html +0 -1
  217. package/tests/test_config/test_gitignore/html_two.html +0 -1
  218. package/tests/test_config/test_gitignore/test_config.py +0 -142
  219. package/tests/test_config/test_ignore/__init__.py +0 -0
  220. package/tests/test_config/test_ignore/html.html +0 -1
  221. package/tests/test_config/test_ignore/html_two.html +0 -12
  222. package/tests/test_config/test_ignore/pyproject.toml +0 -3
  223. package/tests/test_config/test_ignore/test_config.py +0 -32
  224. package/tests/test_config/test_ignore_blocks.py +0 -45
  225. package/tests/test_config/test_ignore_case.py +0 -39
  226. package/tests/test_config/test_indent.py +0 -63
  227. package/tests/test_config/test_linter_output_format/__init__.py +0 -0
  228. package/tests/test_config/test_linter_output_format/html-one.html +0 -1
  229. package/tests/test_config/test_linter_output_format/html-two.html +0 -1
  230. package/tests/test_config/test_linter_output_format/pyproject.toml +0 -3
  231. package/tests/test_config/test_linter_output_format/test_config.py +0 -34
  232. package/tests/test_config/test_max_attribute_length.py +0 -100
  233. package/tests/test_config/test_max_line_length.py +0 -94
  234. package/tests/test_config/test_per_file_ignores/__init__.py +0 -0
  235. package/tests/test_config/test_per_file_ignores/html.html +0 -2
  236. package/tests/test_config/test_per_file_ignores/pyproject.toml +0 -2
  237. package/tests/test_config/test_per_file_ignores/test_config.py +0 -25
  238. package/tests/test_config/test_pragmas/__init__.py +0 -0
  239. package/tests/test_config/test_pragmas/html_five.html +0 -2
  240. package/tests/test_config/test_pragmas/html_four.html +0 -5
  241. package/tests/test_config/test_pragmas/html_one.html +0 -1
  242. package/tests/test_config/test_pragmas/html_six.html +0 -2
  243. package/tests/test_config/test_pragmas/html_three.html +0 -4
  244. package/tests/test_config/test_pragmas/html_two.html +0 -2
  245. package/tests/test_config/test_pragmas/pyproject.toml +0 -3
  246. package/tests/test_config/test_pragmas/test_config.py +0 -142
  247. package/tests/test_config/test_preserve_blank_lines.py +0 -109
  248. package/tests/test_config/test_preserve_leading_space.py +0 -159
  249. package/tests/test_config/test_profile/__init__.py +0 -0
  250. package/tests/test_config/test_profile/html.html +0 -2
  251. package/tests/test_config/test_profile/pyproject.toml +0 -3
  252. package/tests/test_config/test_profile/test_config.py +0 -64
  253. package/tests/test_config/test_pyproject/__init__.py +0 -0
  254. package/tests/test_config/test_pyproject/blank.html +0 -0
  255. package/tests/test_config/test_pyproject/pyproject.toml +0 -36
  256. package/tests/test_config/test_pyproject/test_config.py +0 -44
  257. package/tests/test_django/__init__.py +0 -0
  258. package/tests/test_django/test_asset.py +0 -32
  259. package/tests/test_django/test_autoescape.py +0 -25
  260. package/tests/test_django/test_block.py +0 -29
  261. package/tests/test_django/test_blocktrans.py +0 -236
  262. package/tests/test_django/test_blocktrans_trimmed.py +0 -283
  263. package/tests/test_django/test_comments.py +0 -164
  264. package/tests/test_django/test_filter.py +0 -30
  265. package/tests/test_django/test_for.py +0 -34
  266. package/tests/test_django/test_if.py +0 -34
  267. package/tests/test_django/test_ifchanged.py +0 -37
  268. package/tests/test_django/test_include.py +0 -24
  269. package/tests/test_django/test_load.py +0 -24
  270. package/tests/test_django/test_quoted.py +0 -34
  271. package/tests/test_django/test_spaceless.py +0 -30
  272. package/tests/test_django/test_tag_spaces.py +0 -35
  273. package/tests/test_django/test_templatetag.py +0 -40
  274. package/tests/test_django/test_verbatim.py +0 -24
  275. package/tests/test_django/test_with.py +0 -32
  276. package/tests/test_djlint/-.html +0 -1
  277. package/tests/test_djlint/__init__.py +0 -0
  278. package/tests/test_djlint/bad.html +0 -6
  279. package/tests/test_djlint/bad.html.dj +0 -23
  280. package/tests/test_djlint/bad.html.dj2 +0 -2
  281. package/tests/test_djlint/multiple_files/a/a.html +0 -1
  282. package/tests/test_djlint/multiple_files/b/b1.html +0 -1
  283. package/tests/test_djlint/multiple_files/b/b2.html +0 -1
  284. package/tests/test_djlint/test_djlint.py +0 -242
  285. package/tests/test_golang/__init__.py +0 -0
  286. package/tests/test_golang/test_if.py +0 -24
  287. package/tests/test_golang/test_range.py +0 -24
  288. package/tests/test_handlebars/__init__.py +0 -0
  289. package/tests/test_handlebars/test_each.py +0 -34
  290. package/tests/test_handlebars/test_else.py +0 -24
  291. package/tests/test_handlebars/test_with.py +0 -24
  292. package/tests/test_html/__init__.py +0 -0
  293. package/tests/test_html/test_alpinejs.py +0 -65
  294. package/tests/test_html/test_attributes.py +0 -935
  295. package/tests/test_html/test_aurelia.py +0 -24
  296. package/tests/test_html/test_basics.py +0 -905
  297. package/tests/test_html/test_bracket_same_line.py +0 -177
  298. package/tests/test_html/test_case.py +0 -81
  299. package/tests/test_html/test_cdata.py +0 -34
  300. package/tests/test_html/test_comments.py +0 -333
  301. package/tests/test_html/test_css.py +0 -193
  302. package/tests/test_html/test_doctype_declarations.py +0 -202
  303. package/tests/test_html/test_ignored.py +0 -193
  304. package/tests/test_html/test_interpolation.py +0 -56
  305. package/tests/test_html/test_line_break_after_multiline_tag.py +0 -95
  306. package/tests/test_html/test_next_line_empty.py +0 -53
  307. package/tests/test_html/test_selfclosing.py +0 -55
  308. package/tests/test_html/test_single_attribute_per_line.py +0 -87
  309. package/tests/test_html/test_srcset.py +0 -43
  310. package/tests/test_html/test_svg.py +0 -104
  311. package/tests/test_html/test_symbol_entities.py +0 -34
  312. package/tests/test_html/test_tag_code.py +0 -24
  313. package/tests/test_html/test_tag_dd.py +0 -24
  314. package/tests/test_html/test_tag_details_summary.py +0 -24
  315. package/tests/test_html/test_tag_dt.py +0 -24
  316. package/tests/test_html/test_tag_fig_caption.py +0 -29
  317. package/tests/test_html/test_tag_hr.py +0 -29
  318. package/tests/test_html/test_tag_picture.py +0 -32
  319. package/tests/test_html/test_tag_pre.py +0 -45
  320. package/tests/test_html/test_tag_script.py +0 -516
  321. package/tests/test_html/test_tag_small.py +0 -24
  322. package/tests/test_html/test_tag_span.py +0 -119
  323. package/tests/test_html/test_tag_textarea.py +0 -82
  324. package/tests/test_html/test_tags.py +0 -842
  325. package/tests/test_html/test_text.py +0 -34
  326. package/tests/test_html/test_whitespace.py +0 -477
  327. package/tests/test_html/test_yaml.py +0 -156
  328. package/tests/test_jinja/__init__.py +0 -0
  329. package/tests/test_jinja/test_call.py +0 -34
  330. package/tests/test_jinja/test_parenthesis.py +0 -24
  331. package/tests/test_linter/__init__.py +0 -0
  332. package/tests/test_linter/test_custom_rules/.djlint_rules.yaml +0 -6
  333. package/tests/test_linter/test_custom_rules/__init__.py +0 -0
  334. package/tests/test_linter/test_custom_rules/html.html +0 -1
  335. package/tests/test_linter/test_custom_rules/pyproject.toml +0 -1
  336. package/tests/test_linter/test_custom_rules/test_linter.py +0 -29
  337. package/tests/test_linter/test_custom_rules_bad/.djlint_rules.yaml +0 -24
  338. package/tests/test_linter/test_custom_rules_bad/__init__.py +0 -0
  339. package/tests/test_linter/test_custom_rules_bad/html.html +0 -1
  340. package/tests/test_linter/test_custom_rules_bad/pyproject.toml +0 -1
  341. package/tests/test_linter/test_custom_rules_bad/test_linter.py +0 -29
  342. package/tests/test_linter/test_django_linter.py +0 -476
  343. package/tests/test_linter/test_h005.py +0 -45
  344. package/tests/test_linter/test_h006.py +0 -81
  345. package/tests/test_linter/test_h007.py +0 -45
  346. package/tests/test_linter/test_h008.py +0 -60
  347. package/tests/test_linter/test_h009.py +0 -45
  348. package/tests/test_linter/test_h010.py +0 -44
  349. package/tests/test_linter/test_h037.py +0 -150
  350. package/tests/test_linter/test_ignore_rules.py +0 -45
  351. package/tests/test_linter/test_jinja_linter.py +0 -227
  352. package/tests/test_linter/test_linter.py +0 -691
  353. package/tests/test_linter/test_nunjucks_linter.py +0 -59
  354. package/tests/test_linter/test_python_module_rules/.djlint_rules.yaml +0 -4
  355. package/tests/test_linter/test_python_module_rules/__init__.py +0 -0
  356. package/tests/test_linter/test_python_module_rules/html_bad.html +0 -3
  357. package/tests/test_linter/test_python_module_rules/html_ok.html +0 -3
  358. package/tests/test_linter/test_python_module_rules/my_module.py +0 -32
  359. package/tests/test_linter/test_python_module_rules/pyproject.toml +0 -1
  360. package/tests/test_linter/test_python_module_rules/test_linter.py +0 -26
  361. package/tests/test_nunjucks/__init__.py +0 -0
  362. package/tests/test_nunjucks/test_functions.py +0 -94
  363. package/tests/test_nunjucks/test_macros.py +0 -41
  364. package/tests/test_nunjucks/test_set.py +0 -206
  365. package/tests/test_nunjucks/test_spaceless.py +0 -24
  366. package/tests/test_twig/__init__.py +0 -0
  367. package/tests/test_twig/test_comments.py +0 -51
  368. package/tox.ini +0 -48
@@ -1,905 +0,0 @@
1
- """Basic html tests.
2
-
3
- poetry run pytest tests/test_html/test_basics.py
4
- """
5
- import pytest
6
-
7
- from src.djlint.reformat import formatter
8
- from tests.conftest import printer
9
-
10
- test_data = [
11
- pytest.param(
12
- (
13
- "<!--\n"
14
- "#7241,\n"
15
- "reproduction:\n"
16
- "two different element,\n"
17
- "linebreak\n"
18
- "\\`<\\`\n"
19
- "extra space(s)\n"
20
- "-->\n"
21
- "<div><span>\n"
22
- "<\n"
23
- ),
24
- (
25
- "<!--\n"
26
- "#7241,\n"
27
- "reproduction:\n"
28
- "two different element,\n"
29
- "linebreak\n"
30
- "\\`<\\`\n"
31
- "extra space(s)\n"
32
- "-->\n"
33
- "<div>\n"
34
- " <span>\n"
35
- " <\n"
36
- ),
37
- id="broken_html",
38
- ),
39
- pytest.param("<!--hello world-->", "<!--hello world-->\n", id="comment"),
40
- pytest.param(
41
- (
42
- "<!doctype html>\n"
43
- "<html>\n"
44
- "<head></head>\n"
45
- "<body></body>\n"
46
- "</html>\n"
47
- ),
48
- (
49
- "<!DOCTYPE html>\n"
50
- "<html>\n"
51
- " <head></head>\n"
52
- " <body></body>\n"
53
- "</html>\n"
54
- ),
55
- id="emtpy_doc",
56
- ),
57
- pytest.param("", "", id="empty"),
58
- pytest.param(
59
- (
60
- "<form>\n"
61
- ' <div class="form-group">\n'
62
- ' <label for="exampleInputEmail1">Email address</label>\n'
63
- ' <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">\n'
64
- ' <small id="emailHelp" class="form-text text-muted">We\'ll never share your email with anyone else.</small>\n'
65
- " </div>\n"
66
- ' <div class="form-group">\n'
67
- ' <label for="exampleInputPassword1">Password</label>\n'
68
- ' <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">\n'
69
- " </div>\n"
70
- ' <div class="form-group">\n'
71
- ' <label for="exampleSelect1">Example select</label>\n'
72
- ' <select class="form-control" id="exampleSelect1">\n'
73
- " <option>1</option>\n"
74
- " <option>2</option>\n"
75
- " <option>3</option>\n"
76
- " <option>4</option>\n"
77
- " <option>5</option>\n"
78
- " </select>\n"
79
- " </div>\n"
80
- ' <div class="form-group">\n'
81
- ' <label for="exampleSelect2">Example multiple select</label>\n'
82
- ' <select multiple class="form-control" id="exampleSelect2">\n'
83
- " <option>1</option>\n"
84
- " <option>2</option>\n"
85
- " <option>3</option>\n"
86
- " <option>4</option>\n"
87
- " <option>5</option>\n"
88
- " </select>\n"
89
- " </div>\n"
90
- ' <div class="form-group">\n'
91
- ' <label for="exampleTextarea">Example textarea</label>\n'
92
- ' <textarea class="form-control" id="exampleTextarea" rows="3"></textarea>\n'
93
- " </div>\n"
94
- ' <div class="form-group">\n'
95
- ' <label for="exampleInputFile">File input</label>\n'
96
- ' <input type="file" class="form-control-file" id="exampleInputFile" aria-describedby="fileHelp">\n'
97
- ' <small id="fileHelp" class="form-text text-muted">This is some placeholder block-level help text for the above input. It\'s a bit lighter and easily wraps to a new line.</small>\n'
98
- " </div>\n"
99
- ' <fieldset class="form-group">\n'
100
- " <legend>\n"
101
- " Radio buttons\n"
102
- " </legend>\n"
103
- ' <div class="form-check">\n'
104
- ' <label class="form-check-label">\n'
105
- ' <input type="radio" class="form-check-input" name="optionsRadios" id="optionsRadios1" value="option1" checked>\n'
106
- " Option one is this and that&mdash;be sure to include why it's great\n"
107
- " </label>\n"
108
- " </div>\n"
109
- ' <div class="form-check">\n'
110
- ' <label class="form-check-label">\n'
111
- ' <input type="radio" class="form-check-input" name="optionsRadios" id="optionsRadios2" value="option2">\n'
112
- " Option two can be something else and selecting it will deselect option one\n"
113
- " </label>\n"
114
- " </div>\n"
115
- ' <div class="form-check disabled">\n'
116
- ' <label class="form-check-label">\n'
117
- ' <input type="radio" class="form-check-input" name="optionsRadios" id="optionsRadios3" value="option3" disabled>\n'
118
- " Option three is disabled\n"
119
- " </label>\n"
120
- " </div>\n"
121
- " </fieldset>\n"
122
- ' <div class="form-check">\n'
123
- ' <label class="form-check-label">\n'
124
- ' <input type="checkbox" class="form-check-input">\n'
125
- " Check me out\n"
126
- " </label>\n"
127
- " </div>\n"
128
- ' <button type="submit" class="btn btn-primary">Submit</button>\n'
129
- "</form>\n"
130
- ),
131
- (
132
- "<form>\n"
133
- ' <div class="form-group">\n'
134
- ' <label for="exampleInputEmail1">Email address</label>\n'
135
- ' <input type="email"\n'
136
- ' class="form-control"\n'
137
- ' id="exampleInputEmail1"\n'
138
- ' aria-describedby="emailHelp"\n'
139
- ' placeholder="Enter email">\n'
140
- ' <small id="emailHelp" class="form-text text-muted">We\'ll never share your email with anyone else.</small>\n'
141
- " </div>\n"
142
- ' <div class="form-group">\n'
143
- ' <label for="exampleInputPassword1">Password</label>\n'
144
- ' <input type="password"\n'
145
- ' class="form-control"\n'
146
- ' id="exampleInputPassword1"\n'
147
- ' placeholder="Password">\n'
148
- " </div>\n"
149
- ' <div class="form-group">\n'
150
- ' <label for="exampleSelect1">Example select</label>\n'
151
- ' <select class="form-control" id="exampleSelect1">\n'
152
- " <option>1</option>\n"
153
- " <option>2</option>\n"
154
- " <option>3</option>\n"
155
- " <option>4</option>\n"
156
- " <option>5</option>\n"
157
- " </select>\n"
158
- " </div>\n"
159
- ' <div class="form-group">\n'
160
- ' <label for="exampleSelect2">Example multiple select</label>\n'
161
- ' <select multiple class="form-control" id="exampleSelect2">\n'
162
- " <option>1</option>\n"
163
- " <option>2</option>\n"
164
- " <option>3</option>\n"
165
- " <option>4</option>\n"
166
- " <option>5</option>\n"
167
- " </select>\n"
168
- " </div>\n"
169
- ' <div class="form-group">\n'
170
- ' <label for="exampleTextarea">Example textarea</label>\n'
171
- ' <textarea class="form-control" id="exampleTextarea" rows="3"></textarea>\n'
172
- " </div>\n"
173
- ' <div class="form-group">\n'
174
- ' <label for="exampleInputFile">File input</label>\n'
175
- ' <input type="file"\n'
176
- ' class="form-control-file"\n'
177
- ' id="exampleInputFile"\n'
178
- ' aria-describedby="fileHelp">\n'
179
- ' <small id="fileHelp" class="form-text text-muted">This is some placeholder block-level help text for the above input. It\'s a bit lighter and easily wraps to a new line.</small>\n'
180
- " </div>\n"
181
- ' <fieldset class="form-group">\n'
182
- " <legend>Radio buttons</legend>\n"
183
- ' <div class="form-check">\n'
184
- ' <label class="form-check-label">\n'
185
- ' <input type="radio"\n'
186
- ' class="form-check-input"\n'
187
- ' name="optionsRadios"\n'
188
- ' id="optionsRadios1"\n'
189
- ' value="option1"\n'
190
- " checked>\n"
191
- " Option one is this and that&mdash;be sure to include why it's great\n"
192
- " </label>\n"
193
- " </div>\n"
194
- ' <div class="form-check">\n'
195
- ' <label class="form-check-label">\n'
196
- ' <input type="radio"\n'
197
- ' class="form-check-input"\n'
198
- ' name="optionsRadios"\n'
199
- ' id="optionsRadios2"\n'
200
- ' value="option2">\n'
201
- " Option two can be something else and selecting it will deselect option one\n"
202
- " </label>\n"
203
- " </div>\n"
204
- ' <div class="form-check disabled">\n'
205
- ' <label class="form-check-label">\n'
206
- ' <input type="radio"\n'
207
- ' class="form-check-input"\n'
208
- ' name="optionsRadios"\n'
209
- ' id="optionsRadios3"\n'
210
- ' value="option3"\n'
211
- " disabled>\n"
212
- " Option three is disabled\n"
213
- " </label>\n"
214
- " </div>\n"
215
- " </fieldset>\n"
216
- ' <div class="form-check">\n'
217
- ' <label class="form-check-label">\n'
218
- ' <input type="checkbox" class="form-check-input">\n'
219
- " Check me out\n"
220
- " </label>\n"
221
- " </div>\n"
222
- ' <button type="submit" class="btn btn-primary">Submit</button>\n'
223
- "</form>\n"
224
- ),
225
- id="form",
226
- ),
227
- pytest.param(
228
- (
229
- "<!DOCTYPE html>\n"
230
- '<html lang="en">\n'
231
- " <head>\n"
232
- ' <meta charset="UTF-8">\n'
233
- ' <meta name="viewport" content="width=device-width, initial-scale=1.0">\n'
234
- ' <meta http-equiv="X-UA-Compatible" content="ie=edge">\n'
235
- " <title>Document</title>\n"
236
- " </head>\n"
237
- " <body>\n"
238
- " <!-- A comment -->\n"
239
- " <h1>Hello World</h1>\n"
240
- " </body>\n"
241
- "</html>\n"
242
- ),
243
- (
244
- "<!DOCTYPE html>\n"
245
- '<html lang="en">\n'
246
- " <head>\n"
247
- ' <meta charset="UTF-8">\n'
248
- ' <meta name="viewport" content="width=device-width, initial-scale=1.0">\n'
249
- ' <meta http-equiv="X-UA-Compatible" content="ie=edge">\n'
250
- " <title>Document</title>\n"
251
- " </head>\n"
252
- " <body>\n"
253
- " <!-- A comment -->\n"
254
- " <h1>Hello World</h1>\n"
255
- " </body>\n"
256
- "</html>\n"
257
- ),
258
- id="hello_world",
259
- ),
260
- pytest.param(
261
- (
262
- "<!-- htmlhint attr-lowercase: false -->\n"
263
- "<html>\n"
264
- " <body>\n"
265
- ' <a href="#">Anchor</a>\n'
266
- ' <div hidden class="foo" id=bar></div>\n'
267
- " </body>\n"
268
- "</html>\n"
269
- ),
270
- (
271
- "<!-- htmlhint attr-lowercase: false -->\n"
272
- "<html>\n"
273
- " <body>\n"
274
- ' <a href="#">Anchor</a>\n'
275
- ' <div hidden class="foo" id=bar></div>\n'
276
- " </body>\n"
277
- "</html>\n"
278
- ),
279
- id="html_comments",
280
- ),
281
- pytest.param(
282
- (
283
- "<!doctype html>\n"
284
- '<html class="no-js" lang="">\n'
285
- " <head>\n"
286
- ' <meta charset="utf-8">\n'
287
- ' <meta http-equiv="x-ua-compatible" content="ie=edge">\n'
288
- " <title></title>\n"
289
- ' <meta name="description" content="">\n'
290
- ' <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">\n'
291
- ' <link rel="manifest" href="site.webmanifest">\n'
292
- ' <link rel="apple-touch-icon" href="icon.png">\n'
293
- " <!-- Place favicon.ico in the root directory -->\n"
294
- ' <link rel="stylesheet" href="css/normalize.css">\n'
295
- ' <link rel="stylesheet" href="css/main.css">\n'
296
- " </head>\n"
297
- " <body>\n"
298
- " <!--[if lte IE 9]>\n"
299
- ' <p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="https://browsehappy.com/">upgrade your browser</a> to improve your experience and security.</p>\n'
300
- " <![endif]-->\n"
301
- " <!-- Add your site or application content here -->\n"
302
- " <p>Hello world! This is HTML5 Boilerplate.</p>\n"
303
- ' <script src="js/vendor/modernizr-3.6.0.min.js"></script>\n'
304
- ' <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>\n'
305
- " <script>window.jQuery || document.write('<script src=\"js/vendor/jquery-3.3.1.min.js\"><\\/script>')</script>\n"
306
- ' <script src="js/plugins.js"></script>\n'
307
- ' <script src="js/main.js"></script>\n'
308
- " <!-- Google Analytics: change UA-XXXXX-Y to be your site's ID. -->\n"
309
- " <script>\n"
310
- " window.ga = function () { ga.q.push(arguments) }; ga.q = []; ga.l = +new Date;\n"
311
- " ga('create', 'UA-XXXXX-Y', 'auto'); ga('send', 'pageview')\n"
312
- " </script>\n"
313
- ' <script src="https://www.google-analytics.com/analytics.js" async defer></script>\n'
314
- " </body>\n"
315
- "</html>\n"
316
- ),
317
- (
318
- "<!DOCTYPE html>\n"
319
- '<html class="no-js" lang="">\n'
320
- " <head>\n"
321
- ' <meta charset="utf-8">\n'
322
- ' <meta http-equiv="x-ua-compatible" content="ie=edge">\n'
323
- " <title></title>\n"
324
- ' <meta name="description" content="">\n'
325
- ' <meta name="viewport"\n'
326
- ' content="width=device-width, initial-scale=1, shrink-to-fit=no">\n'
327
- ' <link rel="manifest" href="site.webmanifest">\n'
328
- ' <link rel="apple-touch-icon" href="icon.png">\n'
329
- " <!-- Place favicon.ico in the root directory -->\n"
330
- ' <link rel="stylesheet" href="css/normalize.css">\n'
331
- ' <link rel="stylesheet" href="css/main.css">\n'
332
- " </head>\n"
333
- " <body>\n"
334
- " <!--[if lte IE 9]>\n"
335
- ' <p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="https://browsehappy.com/">upgrade your browser</a> to improve your experience and security.</p>\n'
336
- " <![endif]-->\n"
337
- " <!-- Add your site or application content here -->\n"
338
- " <p>Hello world! This is HTML5 Boilerplate.</p>\n"
339
- ' <script src="js/vendor/modernizr-3.6.0.min.js"></script>\n'
340
- ' <script src="https://code.jquery.com/jquery-3.3.1.min.js"\n'
341
- ' integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="\n'
342
- ' crossorigin="anonymous"></script>\n'
343
- " <script>window.jQuery || document.write('<script src=\"js/vendor/jquery-3.3.1.min.js\"><\\/script>')</script>\n"
344
- ' <script src="js/plugins.js"></script>\n'
345
- ' <script src="js/main.js"></script>\n'
346
- " <!-- Google Analytics: change UA-XXXXX-Y to be your site's ID. -->\n"
347
- " <script>\n"
348
- " window.ga = function () { ga.q.push(arguments) }; ga.q = []; ga.l = +new Date;\n"
349
- " ga('create', 'UA-XXXXX-Y', 'auto'); ga('send', 'pageview')\n"
350
- " </script>\n"
351
- ' <script src="https://www.google-analytics.com/analytics.js" async defer></script>\n'
352
- " </body>\n"
353
- "</html>\n"
354
- ),
355
- id="html5_boilerplate",
356
- ),
357
- pytest.param(
358
- "<strong>a</strong>-<strong>b</strong>-",
359
- "<strong>a</strong>-<strong>b</strong>-\n",
360
- id="issue_9368_2",
361
- ),
362
- pytest.param(
363
- "a track<strong>pad</strong>, or a <strong>gyro</strong>scope.",
364
- "a track<strong>pad</strong>, or a <strong>gyro</strong>scope.\n",
365
- id="issue_9368_3",
366
- ),
367
- pytest.param(
368
- "<strong>a</strong>-&gt;<strong>b</strong>-&gt;",
369
- "<strong>a</strong>-&gt;<strong>b</strong>-&gt;\n",
370
- id="issue_9368",
371
- ),
372
- pytest.param(
373
- (
374
- "<html>\n"
375
- "<head></head>\n"
376
- "<body>\n"
377
- ' <a href="#">Anchor</a>\n'
378
- ' <div hidden class="foo" id=bar></div>\n'
379
- "</body>\n"
380
- "</html>\n"
381
- ),
382
- (
383
- "<html>\n"
384
- " <head></head>\n"
385
- " <body>\n"
386
- ' <a href="#">Anchor</a>\n'
387
- ' <div hidden class="foo" id=bar></div>\n'
388
- " </body>\n"
389
- "</html>\n"
390
- ),
391
- id="more_html",
392
- ),
393
- pytest.param(
394
- (
395
- "<html>\n"
396
- " <head>\n"
397
- ' <meta charset="UTF-8" />\n'
398
- ' <link rel="stylesheet" href="code-guide.css" />\n'
399
- " </head>\n"
400
- " <body></body>\n"
401
- "</html>\n"
402
- ),
403
- (
404
- "<html>\n"
405
- " <head>\n"
406
- ' <meta charset="UTF-8" />\n'
407
- ' <link rel="stylesheet" href="code-guide.css" />\n'
408
- " </head>\n"
409
- " <body></body>\n"
410
- "</html>\n"
411
- ),
412
- id="void_elements",
413
- ),
414
- pytest.param(
415
- (
416
- '<video controls width="250">\n'
417
- ' <source src="/media/examples/flower.webm"\n'
418
- ' type="video/webm">\n'
419
- ' <source src="/media/examples/flower.mp4"\n'
420
- ' type="video/mp4"\n'
421
- "></video>text after\n"
422
- "<!-- #8626 -->\n"
423
- '<object data="horse.wav"><param name="autoplay" value="true"\n'
424
- '><param name="autoplay" value="true"\n'
425
- "></object>1\n"
426
- '<span><img src="1.png"\n'
427
- '><img src="1.png"\n'
428
- "></span>1\n"
429
- ),
430
- (
431
- '<video controls width="250">\n'
432
- ' <source src="/media/examples/flower.webm" type="video/webm">\n'
433
- ' <source src="/media/examples/flower.mp4" type="video/mp4">\n'
434
- "</video>\n"
435
- "text after\n"
436
- "<!-- #8626 -->\n"
437
- '<object data="horse.wav">\n'
438
- ' <param name="autoplay" value="true">\n'
439
- ' <param name="autoplay" value="true">\n'
440
- "</object>1\n"
441
- "<span>\n"
442
- ' <img src="1.png">\n'
443
- ' <img src="1.png">\n'
444
- "</span>1\n"
445
- ),
446
- id="more_void_elements",
447
- ),
448
- pytest.param(
449
- (
450
- "<!-- unknown tag with colon -->\n"
451
- "<div>\n"
452
- "<foo:bar>\n"
453
- "<div> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block </div>\n"
454
- "<div> block </div><DIV> BLOCK </DIV> <div> block </div><div> block </div><div> block </div>\n"
455
- "<pre> pre pr\n"
456
- "e</pre>\n"
457
- "<textarea> pre-wrap pr\n"
458
- "e-wrap </textarea>\n"
459
- "<span> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline </span>\n"
460
- "<span> inline </span><span> inline </span> <span> inline </span><span> inline </span>\n"
461
- "<html:div> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block </html:div>\n"
462
- "<html:DIV> block </html:DIV><HTML:DIV> BLOCK </HTML:DIV> <html:div> block </html:div><html:div> block </html:div><html:div> block </html:div>\n"
463
- "<html:pre> pre pr\n"
464
- "e</html:pre>\n"
465
- "<html:textarea> pre-wrap pr\n"
466
- "e-wrap </html:textarea>\n"
467
- "<html:span> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline </html:span>\n"
468
- "<html:span> inline </html:span><html:span> inline </html:span> <html:span> inline </html:span><html:span> inline </html:span></foo:bar>\n"
469
- "</div>\n"
470
- "<!-- block tag with colon -->\n"
471
- "<div>\n"
472
- "<foo:div>\n"
473
- "<div> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block </div>\n"
474
- "<div> block </div><DIV> BLOCK </DIV> <div> block </div><div> block </div><div> block </div>\n"
475
- "<pre> pre pr\n"
476
- "e</pre>\n"
477
- "<textarea> pre-wrap pr\n"
478
- "e-wrap </textarea>\n"
479
- "<span> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline </span>\n"
480
- "<span> inline </span><span> inline </span> <span> inline </span><span> inline </span>\n"
481
- "<html:div> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block </html:div>\n"
482
- "<html:DIV> block </html:DIV><HTML:DIV> BLOCK </HTML:DIV> <html:div> block </html:div><html:div> block </html:div><html:div> block </html:div>\n"
483
- "<html:pre> pre pr\n"
484
- "e</html:pre>\n"
485
- "<html:textarea> pre-wrap pr\n"
486
- "e-wrap </html:textarea>\n"
487
- "<html:span> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline </html:span>\n"
488
- "<html:span> inline </html:span><html:span> inline </html:span> <html:span> inline </html:span><html:span> inline </html:span></foo:div>\n"
489
- "</div>\n"
490
- "<!-- inline tag with colon -->\n"
491
- "<div>\n"
492
- "<foo:span>\n"
493
- "<div> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block </div>\n"
494
- "<div> block </div><DIV> BLOCK </DIV> <div> block </div><div> block </div><div> block </div>\n"
495
- "<pre> pre pr\n"
496
- "e</pre>\n"
497
- "<textarea> pre-wrap pr\n"
498
- "e-wrap </textarea>\n"
499
- "<span> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline </span>\n"
500
- "<span> inline </span><span> inline </span> <span> inline </span><span> inline </span>\n"
501
- "<html:div> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block </html:div>\n"
502
- "<html:DIV> block </html:DIV><HTML:DIV> BLOCK </HTML:DIV> <html:div> block </html:div><html:div> block </html:div><html:div> block </html:div>\n"
503
- "<html:pre> pre pr\n"
504
- "e</html:pre>\n"
505
- "<html:textarea> pre-wrap pr\n"
506
- "e-wrap </html:textarea>\n"
507
- "<html:span> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline </html:span>\n"
508
- "<html:span> inline </html:span><html:span> inline </html:span> <html:span> inline </html:span><html:span> inline </html:span></foo:span>\n"
509
- "</div>\n"
510
- "<!-- unknown -->\n"
511
- "<div>\n"
512
- "<foo-bar>\n"
513
- "<div> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block </div>\n"
514
- "<div> block </div><DIV> BLOCK </DIV> <div> block </div><div> block </div><div> block </div>\n"
515
- "<pre> pre pr\n"
516
- "e</pre>\n"
517
- "<textarea> pre-wrap pr\n"
518
- "e-wrap </textarea>\n"
519
- "<span> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline </span>\n"
520
- "<span> inline </span><span> inline </span> <span> inline </span><span> inline </span>\n"
521
- "<html:div> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block </html:div>\n"
522
- "<html:DIV> block </html:DIV><HTML:DIV> BLOCK </HTML:DIV> <html:div> block </html:div><html:div> block </html:div><html:div> block </html:div>\n"
523
- "<html:pre> pre pr\n"
524
- "e</html:pre>\n"
525
- "<html:textarea> pre-wrap pr\n"
526
- "e-wrap </html:textarea>\n"
527
- "<html:span> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline </html:span>\n"
528
- "<html:span> inline </html:span><html:span> inline </html:span> <html:span> inline </html:span><html:span> inline </html:span></foo-bar>\n"
529
- "</div>\n"
530
- "<!-- without colon -->\n"
531
- "<div>\n"
532
- "<div>\n"
533
- "<div> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block </div>\n"
534
- "<div> block </div><DIV> BLOCK </DIV> <div> block </div><div> block </div><div> block </div>\n"
535
- "<pre> pre pr\n"
536
- "e</pre>\n"
537
- "<textarea> pre-wrap pr\n"
538
- "e-wrap </textarea>\n"
539
- "<span> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline </span>\n"
540
- "<span> inline </span><span> inline </span> <span> inline </span><span> inline </span>\n"
541
- "<html:div> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block </html:div>\n"
542
- "<html:DIV> block </html:DIV><HTML:DIV> BLOCK </HTML:DIV> <html:div> block </html:div><html:div> block </html:div><html:div> block </html:div>\n"
543
- "<html:pre> pre pr\n"
544
- "e</html:pre>\n"
545
- "<html:textarea> pre-wrap pr\n"
546
- "e-wrap </html:textarea>\n"
547
- "<html:span> looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline </html:span>\n"
548
- "<html:span> inline </html:span><html:span> inline </html:span> <html:span> inline </html:span><html:span> inline </html:span></div>\n"
549
- "</div>\n"
550
- "<!-- #7236 -->\n"
551
- "<with:colon>\n"
552
- " <div><h1> text text text text text text text text text text text text text text </h1></div>\n"
553
- " <script>\n"
554
- " const func = function() { console.log('Hello, there');}\n"
555
- " </script>\n"
556
- " </with:colon>\n"
557
- "<!-- script like -->\n"
558
- "<with:colon>\n"
559
- "<style>.a{color:#f00}</style>\n"
560
- " <SCRIPT>\n"
561
- " const func = function() { console.log('Hello, there');}\n"
562
- " </SCRIPT>\n"
563
- "<STYLE>.A{COLOR:#F00}</STYLE>\n"
564
- "<html:script>const func = function() { console.log('Hello, there');}</html:script>\n"
565
- "<html:style>.a{color:#f00}</html:style>\n"
566
- "<svg><style>.a{color:#f00}</style></svg>\n"
567
- "<svg><style>.a{color:#f00}</style></svg>\n"
568
- "</with:colon>\n"
569
- "<html:script>const func = function() { console.log('Hello, there');}</html:script>\n"
570
- "<html:style>.a{color:#f00}</html:style>\n"
571
- ),
572
- (
573
- "<!-- unknown tag with colon -->\n"
574
- "<div>\n"
575
- " <foo:bar>\n"
576
- " <div>looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block</div>\n"
577
- " <div>block</div>\n"
578
- " <div>BLOCK</div>\n"
579
- " <div>block</div>\n"
580
- " <div>block</div>\n"
581
- " <div>block</div>\n"
582
- " <pre> pre pr\n"
583
- "e</pre>\n"
584
- " <textarea> pre-wrap pr\n"
585
- "e-wrap </textarea>\n"
586
- " <span>looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline</span>\n"
587
- " <span>inline</span><span>inline</span> <span>inline</span><span>inline</span>\n"
588
- " <html:div>\n"
589
- " looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block\n"
590
- " </html:div>\n"
591
- " <html:DIV>\n"
592
- " block\n"
593
- " </html:DIV>\n"
594
- " <HTML:DIV>\n"
595
- " BLOCK\n"
596
- " </HTML:DIV>\n"
597
- " <html:div>\n"
598
- " block\n"
599
- " </html:div>\n"
600
- " <html:div>\n"
601
- " block\n"
602
- " </html:div>\n"
603
- " <html:div>\n"
604
- " block\n"
605
- " </html:div>\n"
606
- " <html:pre>\n"
607
- " pre pr\n"
608
- " e\n"
609
- " </html:pre>\n"
610
- " <html:textarea>\n"
611
- " pre-wrap pr\n"
612
- " e-wrap\n"
613
- " </html:textarea>\n"
614
- " <html:span>\n"
615
- " looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline\n"
616
- " </html:span>\n"
617
- " <html:span>\n"
618
- " inline\n"
619
- " </html:span>\n"
620
- " <html:span>\n"
621
- " inline\n"
622
- " </html:span>\n"
623
- " <html:span>\n"
624
- " inline\n"
625
- " </html:span>\n"
626
- " <html:span>\n"
627
- " inline\n"
628
- " </html:span>\n"
629
- " </foo:bar>\n"
630
- "</div>\n"
631
- "<!-- block tag with colon -->\n"
632
- "<div>\n"
633
- " <foo:div>\n"
634
- " <div>looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block</div>\n"
635
- " <div>block</div>\n"
636
- " <div>BLOCK</div>\n"
637
- " <div>block</div>\n"
638
- " <div>block</div>\n"
639
- " <div>block</div>\n"
640
- " <pre> pre pr\n"
641
- "e</pre>\n"
642
- " <textarea> pre-wrap pr\n"
643
- "e-wrap </textarea>\n"
644
- " <span>looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline</span>\n"
645
- " <span>inline</span><span>inline</span> <span>inline</span><span>inline</span>\n"
646
- " <html:div>\n"
647
- " looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block\n"
648
- " </html:div>\n"
649
- " <html:DIV>\n"
650
- " block\n"
651
- " </html:DIV>\n"
652
- " <HTML:DIV>\n"
653
- " BLOCK\n"
654
- " </HTML:DIV>\n"
655
- " <html:div>\n"
656
- " block\n"
657
- " </html:div>\n"
658
- " <html:div>\n"
659
- " block\n"
660
- " </html:div>\n"
661
- " <html:div>\n"
662
- " block\n"
663
- " </html:div>\n"
664
- " <html:pre>\n"
665
- " pre pr\n"
666
- " e\n"
667
- " </html:pre>\n"
668
- " <html:textarea>\n"
669
- " pre-wrap pr\n"
670
- " e-wrap\n"
671
- " </html:textarea>\n"
672
- " <html:span>\n"
673
- " looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline\n"
674
- " </html:span>\n"
675
- " <html:span>\n"
676
- " inline\n"
677
- " </html:span>\n"
678
- " <html:span>\n"
679
- " inline\n"
680
- " </html:span>\n"
681
- " <html:span>\n"
682
- " inline\n"
683
- " </html:span>\n"
684
- " <html:span>\n"
685
- " inline\n"
686
- " </html:span>\n"
687
- " </foo:div>\n"
688
- "</div>\n"
689
- "<!-- inline tag with colon -->\n"
690
- "<div>\n"
691
- " <foo:span>\n"
692
- " <div>looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block</div>\n"
693
- " <div>block</div>\n"
694
- " <div>BLOCK</div>\n"
695
- " <div>block</div>\n"
696
- " <div>block</div>\n"
697
- " <div>block</div>\n"
698
- " <pre> pre pr\n"
699
- "e</pre>\n"
700
- " <textarea> pre-wrap pr\n"
701
- "e-wrap </textarea>\n"
702
- " <span>looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline</span>\n"
703
- " <span>inline</span><span>inline</span> <span>inline</span><span>inline</span>\n"
704
- " <html:div>\n"
705
- " looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block\n"
706
- " </html:div>\n"
707
- " <html:DIV>\n"
708
- " block\n"
709
- " </html:DIV>\n"
710
- " <HTML:DIV>\n"
711
- " BLOCK\n"
712
- " </HTML:DIV>\n"
713
- " <html:div>\n"
714
- " block\n"
715
- " </html:div>\n"
716
- " <html:div>\n"
717
- " block\n"
718
- " </html:div>\n"
719
- " <html:div>\n"
720
- " block\n"
721
- " </html:div>\n"
722
- " <html:pre>\n"
723
- " pre pr\n"
724
- " e\n"
725
- " </html:pre>\n"
726
- " <html:textarea>\n"
727
- " pre-wrap pr\n"
728
- " e-wrap\n"
729
- " </html:textarea>\n"
730
- " <html:span>\n"
731
- " looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline\n"
732
- " </html:span>\n"
733
- " <html:span>\n"
734
- " inline\n"
735
- " </html:span>\n"
736
- " <html:span>\n"
737
- " inline\n"
738
- " </html:span>\n"
739
- " <html:span>\n"
740
- " inline\n"
741
- " </html:span>\n"
742
- " <html:span>\n"
743
- " inline\n"
744
- " </html:span>\n"
745
- " </foo:span>\n"
746
- "</div>\n"
747
- "<!-- unknown -->\n"
748
- "<div>\n"
749
- " <foo-bar>\n"
750
- " <div>looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block</div>\n"
751
- " <div>block</div>\n"
752
- " <div>BLOCK</div>\n"
753
- " <div>block</div>\n"
754
- " <div>block</div>\n"
755
- " <div>block</div>\n"
756
- " <pre> pre pr\n"
757
- "e</pre>\n"
758
- " <textarea> pre-wrap pr\n"
759
- "e-wrap </textarea>\n"
760
- " <span>looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline</span>\n"
761
- " <span>inline</span><span>inline</span> <span>inline</span><span>inline</span>\n"
762
- " <html:div>\n"
763
- " looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block\n"
764
- " </html:div>\n"
765
- " <html:DIV>\n"
766
- " block\n"
767
- " </html:DIV>\n"
768
- " <HTML:DIV>\n"
769
- " BLOCK\n"
770
- " </HTML:DIV>\n"
771
- " <html:div>\n"
772
- " block\n"
773
- " </html:div>\n"
774
- " <html:div>\n"
775
- " block\n"
776
- " </html:div>\n"
777
- " <html:div>\n"
778
- " block\n"
779
- " </html:div>\n"
780
- " <html:pre>\n"
781
- " pre pr\n"
782
- " e\n"
783
- " </html:pre>\n"
784
- " <html:textarea>\n"
785
- " pre-wrap pr\n"
786
- " e-wrap\n"
787
- " </html:textarea>\n"
788
- " <html:span>\n"
789
- " looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline\n"
790
- " </html:span>\n"
791
- " <html:span>\n"
792
- " inline\n"
793
- " </html:span>\n"
794
- " <html:span>\n"
795
- " inline\n"
796
- " </html:span>\n"
797
- " <html:span>\n"
798
- " inline\n"
799
- " </html:span>\n"
800
- " <html:span>\n"
801
- " inline\n"
802
- " </html:span>\n"
803
- " </foo-bar>\n"
804
- "</div>\n"
805
- "<!-- without colon -->\n"
806
- "<div>\n"
807
- " <div>\n"
808
- " <div>looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block</div>\n"
809
- " <div>block</div>\n"
810
- " <div>BLOCK</div>\n"
811
- " <div>block</div>\n"
812
- " <div>block</div>\n"
813
- " <div>block</div>\n"
814
- " <pre> pre pr\n"
815
- "e</pre>\n"
816
- " <textarea> pre-wrap pr\n"
817
- "e-wrap </textarea>\n"
818
- " <span>looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline</span>\n"
819
- " <span>inline</span><span>inline</span> <span>inline</span><span>inline</span>\n"
820
- " <html:div>\n"
821
- " looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog block\n"
822
- " </html:div>\n"
823
- " <html:DIV>\n"
824
- " block\n"
825
- " </html:DIV>\n"
826
- " <HTML:DIV>\n"
827
- " BLOCK\n"
828
- " </HTML:DIV>\n"
829
- " <html:div>\n"
830
- " block\n"
831
- " </html:div>\n"
832
- " <html:div>\n"
833
- " block\n"
834
- " </html:div>\n"
835
- " <html:div>\n"
836
- " block\n"
837
- " </html:div>\n"
838
- " <html:pre>\n"
839
- " pre pr\n"
840
- " e\n"
841
- " </html:pre>\n"
842
- " <html:textarea>\n"
843
- " pre-wrap pr\n"
844
- " e-wrap\n"
845
- " </html:textarea>\n"
846
- " <html:span>\n"
847
- " looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog inline\n"
848
- " </html:span>\n"
849
- " <html:span>\n"
850
- " inline\n"
851
- " </html:span>\n"
852
- " <html:span>\n"
853
- " inline\n"
854
- " </html:span>\n"
855
- " <html:span>\n"
856
- " inline\n"
857
- " </html:span>\n"
858
- " <html:span>\n"
859
- " inline\n"
860
- " </html:span>\n"
861
- " </div>\n"
862
- "</div>\n"
863
- "<!-- #7236 -->\n"
864
- "<with:colon>\n"
865
- "<div>\n"
866
- " <h1>text text text text text text text text text text text text text text</h1>\n"
867
- "</div>\n"
868
- "<script>const func = function() { console.log('Hello, there');}</script>\n"
869
- "</with:colon>\n"
870
- "<!-- script like -->\n"
871
- "<with:colon>\n"
872
- "<style>.a{color:#f00}</style>\n"
873
- "<script>const func = function() { console.log('Hello, there');}</script>\n"
874
- "<style>.A{COLOR:#F00}</style>\n"
875
- "<html:script>\n"
876
- " const func = function() { console.log('Hello, there');}\n"
877
- "</html:script>\n"
878
- "<html:style>\n"
879
- " .a{color:#f00}\n"
880
- "</html:style>\n"
881
- "<svg>\n"
882
- " <style>.a{color:#f00}</style>\n"
883
- "</svg>\n"
884
- "<svg>\n"
885
- " <style>.a{color:#f00}</style>\n"
886
- "</svg>\n"
887
- "</with:colon>\n"
888
- "<html:script>\n"
889
- " const func = function() { console.log('Hello, there');}\n"
890
- "</html:script>\n"
891
- "<html:style>\n"
892
- " .a{color:#f00}\n"
893
- "</html:style>\n"
894
- ),
895
- id="with_colon",
896
- ),
897
- ]
898
-
899
-
900
- @pytest.mark.parametrize(("source", "expected"), test_data)
901
- def test_base(source, expected, basic_config):
902
- output = formatter(basic_config, source)
903
-
904
- printer(expected, source, output)
905
- assert expected == output