hamlit 1.7.2 → 2.0.1

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 (283) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -3
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +25 -37
  5. data/CHANGELOG.md +18 -0
  6. data/Gemfile +16 -0
  7. data/LICENSE.txt +23 -2
  8. data/README.md +106 -48
  9. data/REFERENCE.md +222 -0
  10. data/Rakefile +77 -19
  11. data/benchmark/boolean_attribute.haml +6 -0
  12. data/benchmark/class_attribute.haml +5 -0
  13. data/benchmark/common_attribute.haml +3 -0
  14. data/benchmark/data_attribute.haml +4 -0
  15. data/benchmark/dynamic_attributes/boolean_attribute.haml +4 -0
  16. data/benchmark/dynamic_attributes/class_attribute.haml +4 -0
  17. data/benchmark/dynamic_attributes/common_attribute.haml +2 -0
  18. data/benchmark/dynamic_attributes/data_attribute.haml +2 -0
  19. data/benchmark/dynamic_attributes/id_attribute.haml +2 -0
  20. data/benchmark/etc/attribute_builder.haml +5 -0
  21. data/benchmark/etc/real_sample.haml +888 -0
  22. data/benchmark/etc/real_sample.rb +11 -0
  23. data/benchmark/etc/static_analyzer.haml +1 -0
  24. data/benchmark/etc/tags.haml +3 -0
  25. data/benchmark/ext/build_data.rb +15 -0
  26. data/benchmark/ext/build_id.rb +13 -0
  27. data/benchmark/id_attribute.haml +3 -0
  28. data/benchmark/plain.haml +4 -0
  29. data/benchmark/script.haml +4 -0
  30. data/benchmark/slim/LICENSE +21 -0
  31. data/{benchmarks → benchmark/slim}/context.rb +2 -4
  32. data/benchmark/slim/run-benchmarks.rb +94 -0
  33. data/{benchmarks → benchmark/slim}/view.erb +3 -3
  34. data/{benchmarks → benchmark/slim}/view.haml +0 -0
  35. data/{benchmarks/view.escaped.slim → benchmark/slim/view.slim} +1 -1
  36. data/benchmark/string_interpolation.haml +2 -0
  37. data/benchmark/utils/benchmark_ips_extension.rb +43 -0
  38. data/bin/bench +85 -0
  39. data/bin/clone +14 -0
  40. data/bin/console +11 -0
  41. data/bin/lineprof +48 -0
  42. data/bin/ruby +3 -0
  43. data/bin/setup +7 -0
  44. data/bin/stackprof +27 -0
  45. data/{test → bin/test} +6 -10
  46. data/{bin → exe}/hamlit +0 -0
  47. data/ext/hamlit/extconf.rb +14 -0
  48. data/ext/hamlit/hamlit.c +512 -0
  49. data/ext/hamlit/houdini/.gitignore +3 -0
  50. data/ext/hamlit/houdini/COPYING +7 -0
  51. data/ext/hamlit/houdini/Makefile +79 -0
  52. data/ext/hamlit/houdini/README.md +59 -0
  53. data/ext/hamlit/houdini/buffer.c +249 -0
  54. data/ext/hamlit/houdini/buffer.h +113 -0
  55. data/ext/hamlit/houdini/houdini.h +46 -0
  56. data/ext/hamlit/houdini/houdini_href_e.c +115 -0
  57. data/ext/hamlit/houdini/houdini_html_e.c +90 -0
  58. data/ext/hamlit/houdini/houdini_html_u.c +122 -0
  59. data/ext/hamlit/houdini/houdini_js_e.c +90 -0
  60. data/ext/hamlit/houdini/houdini_js_u.c +60 -0
  61. data/ext/hamlit/houdini/houdini_uri_e.c +107 -0
  62. data/ext/hamlit/houdini/houdini_uri_u.c +68 -0
  63. data/ext/hamlit/houdini/houdini_xml_e.c +136 -0
  64. data/ext/hamlit/houdini/html_unescape.gperf +258 -0
  65. data/ext/hamlit/houdini/html_unescape.h +754 -0
  66. data/ext/hamlit/houdini/tools/build_table.py +13 -0
  67. data/ext/hamlit/houdini/tools/build_tables.c +51 -0
  68. data/ext/hamlit/houdini/tools/wikipedia_table.txt +2025 -0
  69. data/hamlit.gemspec +30 -31
  70. data/lib/hamlit.rb +3 -1
  71. data/lib/hamlit/attribute_builder.rb +12 -0
  72. data/lib/hamlit/cli.rb +44 -43
  73. data/lib/hamlit/compiler.rb +92 -16
  74. data/lib/hamlit/compiler/attribute_compiler.rb +148 -0
  75. data/lib/hamlit/compiler/children_compiler.rb +111 -0
  76. data/lib/hamlit/compiler/comment_compiler.rb +36 -0
  77. data/lib/hamlit/compiler/doctype_compiler.rb +45 -0
  78. data/lib/hamlit/compiler/script_compiler.rb +97 -0
  79. data/lib/hamlit/compiler/silent_script_compiler.rb +24 -0
  80. data/lib/hamlit/compiler/tag_compiler.rb +69 -0
  81. data/lib/hamlit/engine.rb +12 -7
  82. data/lib/hamlit/error.rb +14 -0
  83. data/lib/hamlit/escapable.rb +12 -0
  84. data/lib/hamlit/filters.rb +65 -0
  85. data/lib/hamlit/filters/base.rb +4 -62
  86. data/lib/hamlit/filters/coffee.rb +9 -7
  87. data/lib/hamlit/filters/css.rb +25 -8
  88. data/lib/hamlit/filters/erb.rb +4 -6
  89. data/lib/hamlit/filters/escaped.rb +11 -9
  90. data/lib/hamlit/filters/javascript.rb +25 -8
  91. data/lib/hamlit/filters/less.rb +9 -7
  92. data/lib/hamlit/filters/markdown.rb +5 -6
  93. data/lib/hamlit/filters/plain.rb +11 -15
  94. data/lib/hamlit/filters/preserve.rb +15 -5
  95. data/lib/hamlit/filters/ruby.rb +3 -5
  96. data/lib/hamlit/filters/sass.rb +9 -7
  97. data/lib/hamlit/filters/scss.rb +9 -7
  98. data/lib/hamlit/filters/text_base.rb +24 -0
  99. data/lib/hamlit/filters/tilt_base.rb +47 -0
  100. data/lib/hamlit/hash_parser.rb +107 -0
  101. data/lib/hamlit/html.rb +9 -6
  102. data/lib/hamlit/identity.rb +12 -0
  103. data/lib/hamlit/object_ref.rb +29 -0
  104. data/lib/hamlit/parser.rb +25 -142
  105. data/lib/hamlit/parser/MIT-LICENSE +20 -0
  106. data/lib/hamlit/parser/README.md +28 -0
  107. data/lib/hamlit/parser/haml_buffer.rb +348 -0
  108. data/lib/hamlit/parser/haml_compiler.rb +553 -0
  109. data/lib/hamlit/parser/haml_error.rb +61 -0
  110. data/lib/hamlit/parser/haml_helpers.rb +727 -0
  111. data/lib/hamlit/parser/haml_options.rb +286 -0
  112. data/lib/hamlit/parser/haml_parser.rb +801 -0
  113. data/lib/hamlit/parser/haml_util.rb +283 -0
  114. data/lib/hamlit/parser/haml_xss_mods.rb +109 -0
  115. data/lib/hamlit/{helpers.rb → rails_helpers.rb} +2 -7
  116. data/lib/hamlit/rails_template.rb +30 -0
  117. data/lib/hamlit/railtie.rb +1 -12
  118. data/lib/hamlit/ruby_expression.rb +31 -0
  119. data/lib/hamlit/static_analyzer.rb +49 -0
  120. data/lib/hamlit/string_interpolation.rb +69 -0
  121. data/lib/hamlit/template.rb +8 -0
  122. data/lib/hamlit/utils.rb +9 -0
  123. data/lib/hamlit/version.rb +1 -1
  124. metadata +116 -324
  125. data/.rspec +0 -2
  126. data/benchmarks/benchmark.rb +0 -110
  127. data/benchmarks/view.slim +0 -17
  128. data/doc/README.md +0 -19
  129. data/doc/engine/indent.md +0 -48
  130. data/doc/engine/new_attribute.md +0 -77
  131. data/doc/engine/old_attributes.md +0 -198
  132. data/doc/engine/silent_script.md +0 -97
  133. data/doc/engine/tag.md +0 -48
  134. data/doc/engine/text.md +0 -64
  135. data/doc/faml/README.md +0 -16
  136. data/doc/faml/engine/indent.md +0 -48
  137. data/doc/faml/engine/old_attributes.md +0 -111
  138. data/doc/faml/engine/silent_script.md +0 -97
  139. data/doc/faml/engine/text.md +0 -59
  140. data/doc/faml/filters/erb.md +0 -24
  141. data/doc/faml/filters/javascript.md +0 -27
  142. data/doc/faml/filters/less.md +0 -57
  143. data/doc/faml/filters/plain.md +0 -25
  144. data/doc/filters/erb.md +0 -31
  145. data/doc/filters/javascript.md +0 -83
  146. data/doc/filters/less.md +0 -57
  147. data/doc/filters/markdown.md +0 -31
  148. data/doc/filters/plain.md +0 -25
  149. data/doc/haml/README.md +0 -15
  150. data/doc/haml/engine/new_attribute.md +0 -77
  151. data/doc/haml/engine/old_attributes.md +0 -142
  152. data/doc/haml/engine/tag.md +0 -48
  153. data/doc/haml/engine/text.md +0 -29
  154. data/doc/haml/filters/erb.md +0 -26
  155. data/doc/haml/filters/javascript.md +0 -76
  156. data/doc/haml/filters/markdown.md +0 -31
  157. data/lib/hamlit/attribute.rb +0 -78
  158. data/lib/hamlit/compilers/attributes.rb +0 -108
  159. data/lib/hamlit/compilers/comment.rb +0 -13
  160. data/lib/hamlit/compilers/doctype.rb +0 -39
  161. data/lib/hamlit/compilers/filter.rb +0 -53
  162. data/lib/hamlit/compilers/new_attribute.rb +0 -115
  163. data/lib/hamlit/compilers/old_attribute.rb +0 -241
  164. data/lib/hamlit/compilers/runtime_attribute.rb +0 -58
  165. data/lib/hamlit/compilers/script.rb +0 -31
  166. data/lib/hamlit/compilers/strip.rb +0 -19
  167. data/lib/hamlit/compilers/text.rb +0 -111
  168. data/lib/hamlit/concerns/attribute_builder.rb +0 -22
  169. data/lib/hamlit/concerns/balanceable.rb +0 -68
  170. data/lib/hamlit/concerns/deprecation.rb +0 -20
  171. data/lib/hamlit/concerns/error.rb +0 -31
  172. data/lib/hamlit/concerns/escapable.rb +0 -17
  173. data/lib/hamlit/concerns/included.rb +0 -28
  174. data/lib/hamlit/concerns/indentable.rb +0 -117
  175. data/lib/hamlit/concerns/lexable.rb +0 -32
  176. data/lib/hamlit/concerns/line_reader.rb +0 -62
  177. data/lib/hamlit/concerns/registerable.rb +0 -24
  178. data/lib/hamlit/concerns/string_interpolation.rb +0 -48
  179. data/lib/hamlit/concerns/whitespace.rb +0 -91
  180. data/lib/hamlit/filters/tilt.rb +0 -41
  181. data/lib/hamlit/parsers/attribute.rb +0 -71
  182. data/lib/hamlit/parsers/comment.rb +0 -30
  183. data/lib/hamlit/parsers/doctype.rb +0 -18
  184. data/lib/hamlit/parsers/filter.rb +0 -18
  185. data/lib/hamlit/parsers/multiline.rb +0 -58
  186. data/lib/hamlit/parsers/script.rb +0 -126
  187. data/lib/hamlit/parsers/tag.rb +0 -83
  188. data/lib/hamlit/parsers/text.rb +0 -28
  189. data/lib/hamlit/temple.rb +0 -9
  190. data/release +0 -6
  191. data/spec/Rakefile +0 -72
  192. data/spec/hamlit/engine/comment_spec.rb +0 -56
  193. data/spec/hamlit/engine/doctype_spec.rb +0 -19
  194. data/spec/hamlit/engine/error_spec.rb +0 -135
  195. data/spec/hamlit/engine/indent_spec.rb +0 -42
  196. data/spec/hamlit/engine/multiline_spec.rb +0 -44
  197. data/spec/hamlit/engine/new_attribute_spec.rb +0 -110
  198. data/spec/hamlit/engine/old_attributes_spec.rb +0 -404
  199. data/spec/hamlit/engine/script_spec.rb +0 -116
  200. data/spec/hamlit/engine/silent_script_spec.rb +0 -213
  201. data/spec/hamlit/engine/tag_spec.rb +0 -295
  202. data/spec/hamlit/engine/text_spec.rb +0 -239
  203. data/spec/hamlit/engine_spec.rb +0 -58
  204. data/spec/hamlit/filters/coffee_spec.rb +0 -60
  205. data/spec/hamlit/filters/css_spec.rb +0 -33
  206. data/spec/hamlit/filters/erb_spec.rb +0 -16
  207. data/spec/hamlit/filters/javascript_spec.rb +0 -82
  208. data/spec/hamlit/filters/less_spec.rb +0 -37
  209. data/spec/hamlit/filters/markdown_spec.rb +0 -30
  210. data/spec/hamlit/filters/plain_spec.rb +0 -15
  211. data/spec/hamlit/filters/ruby_spec.rb +0 -24
  212. data/spec/hamlit/filters/sass_spec.rb +0 -33
  213. data/spec/hamlit/filters/scss_spec.rb +0 -37
  214. data/spec/hamlit/haml_spec.rb +0 -910
  215. data/spec/rails/.gitignore +0 -18
  216. data/spec/rails/.rspec +0 -2
  217. data/spec/rails/Gemfile +0 -19
  218. data/spec/rails/README.rdoc +0 -28
  219. data/spec/rails/Rakefile +0 -6
  220. data/spec/rails/app/assets/images/.keep +0 -0
  221. data/spec/rails/app/assets/javascripts/application.js +0 -15
  222. data/spec/rails/app/assets/stylesheets/application.css +0 -15
  223. data/spec/rails/app/controllers/application_controller.rb +0 -8
  224. data/spec/rails/app/controllers/concerns/.keep +0 -0
  225. data/spec/rails/app/controllers/users_controller.rb +0 -23
  226. data/spec/rails/app/helpers/application_helper.rb +0 -2
  227. data/spec/rails/app/mailers/.keep +0 -0
  228. data/spec/rails/app/models/.keep +0 -0
  229. data/spec/rails/app/models/concerns/.keep +0 -0
  230. data/spec/rails/app/views/application/index.html.haml +0 -18
  231. data/spec/rails/app/views/layouts/application.html.haml +0 -12
  232. data/spec/rails/app/views/users/capture.html.haml +0 -5
  233. data/spec/rails/app/views/users/capture_haml.html.haml +0 -5
  234. data/spec/rails/app/views/users/form.html.haml +0 -2
  235. data/spec/rails/app/views/users/helpers.html.haml +0 -10
  236. data/spec/rails/app/views/users/index.html.haml +0 -9
  237. data/spec/rails/app/views/users/inline.html.haml +0 -6
  238. data/spec/rails/app/views/users/old_attributes.html.haml +0 -5
  239. data/spec/rails/app/views/users/safe_buffer.html.haml +0 -4
  240. data/spec/rails/app/views/users/whitespace.html.haml +0 -4
  241. data/spec/rails/bin/bundle +0 -3
  242. data/spec/rails/bin/rails +0 -8
  243. data/spec/rails/bin/rake +0 -8
  244. data/spec/rails/bin/setup +0 -29
  245. data/spec/rails/bin/spring +0 -15
  246. data/spec/rails/config.ru +0 -4
  247. data/spec/rails/config/application.rb +0 -34
  248. data/spec/rails/config/boot.rb +0 -3
  249. data/spec/rails/config/database.yml +0 -25
  250. data/spec/rails/config/environment.rb +0 -5
  251. data/spec/rails/config/environments/development.rb +0 -41
  252. data/spec/rails/config/environments/production.rb +0 -79
  253. data/spec/rails/config/environments/test.rb +0 -42
  254. data/spec/rails/config/initializers/assets.rb +0 -11
  255. data/spec/rails/config/initializers/backtrace_silencers.rb +0 -7
  256. data/spec/rails/config/initializers/cookies_serializer.rb +0 -3
  257. data/spec/rails/config/initializers/filter_parameter_logging.rb +0 -4
  258. data/spec/rails/config/initializers/inflections.rb +0 -16
  259. data/spec/rails/config/initializers/mime_types.rb +0 -4
  260. data/spec/rails/config/initializers/session_store.rb +0 -3
  261. data/spec/rails/config/initializers/wrap_parameters.rb +0 -14
  262. data/spec/rails/config/locales/en.yml +0 -24
  263. data/spec/rails/config/routes.rb +0 -16
  264. data/spec/rails/config/secrets.yml +0 -22
  265. data/spec/rails/db/schema.rb +0 -16
  266. data/spec/rails/db/seeds.rb +0 -7
  267. data/spec/rails/lib/assets/.keep +0 -0
  268. data/spec/rails/lib/tasks/.keep +0 -0
  269. data/spec/rails/log/.keep +0 -0
  270. data/spec/rails/public/404.html +0 -67
  271. data/spec/rails/public/422.html +0 -67
  272. data/spec/rails/public/500.html +0 -66
  273. data/spec/rails/public/favicon.ico +0 -0
  274. data/spec/rails/public/robots.txt +0 -5
  275. data/spec/rails/spec/hamlit_spec.rb +0 -123
  276. data/spec/rails/spec/rails_helper.rb +0 -56
  277. data/spec/rails/spec/spec_helper.rb +0 -91
  278. data/spec/rails/vendor/assets/javascripts/.keep +0 -0
  279. data/spec/rails/vendor/assets/stylesheets/.keep +0 -0
  280. data/spec/spec_helper.rb +0 -36
  281. data/spec/spec_helper/document_generator.rb +0 -93
  282. data/spec/spec_helper/render_helper.rb +0 -120
  283. data/spec/spec_helper/test_case.rb +0 -55
@@ -1,37 +0,0 @@
1
- describe Hamlit::Filters::Less do
2
- describe '#compile' do
3
- it 'renders less filter' do
4
- assert_render(<<-HAML, <<-HTML, compatible_only: :haml, error_with: :faml)
5
- :less
6
- .users_controller {
7
- .show_action {
8
- margin: 10px;
9
- padding: 20px;
10
- }
11
- }
12
- HAML
13
- <style>
14
- .users_controller .show_action {
15
- margin: 10px;
16
- padding: 20px;
17
- }
18
- </style>
19
- HTML
20
- end
21
-
22
- it 'parses string interpolation' do
23
- assert_render(<<-'HAML', <<-HTML, compatible_only: :haml, error_with: :faml)
24
- :less
25
- .foo {
26
- content: "#{'<&>'}";
27
- }
28
- HAML
29
- <style>
30
- .foo {
31
- content: "<&>";
32
- }
33
- </style>
34
- HTML
35
- end
36
- end
37
- end
@@ -1,30 +0,0 @@
1
- describe Hamlit::Filters::Markdown do
2
- describe '#compile' do
3
- it 'renders markdown filter' do
4
- assert_render(<<-HAML, <<-HTML)
5
- :markdown
6
- # Hamlit
7
- Yet another haml implementation
8
- HAML
9
- <h1>Hamlit</h1>
10
-
11
- <p>Yet another haml implementation</p>
12
- HTML
13
- end
14
-
15
- it 'renders markdown filter with string interpolation' do
16
- assert_render(<<-'HAML', <<-HTML, compatible_only: :faml)
17
- - project = '<Hamlit>'
18
- :markdown
19
- # #{project}
20
- #{'<&>'}
21
- Yet another haml implementation
22
- HAML
23
- <h1><Hamlit></h1>
24
-
25
- <p>&lt;&amp;&gt;
26
- Yet another haml implementation</p>
27
- HTML
28
- end
29
- end
30
- end
@@ -1,15 +0,0 @@
1
- describe Hamlit::Filters::Plain do
2
- describe '#compile' do
3
- it 'renders plain filter' do
4
- assert_render(<<-'HAML', <<-HTML, compatible_only: :haml)
5
- :plain
6
-
7
- #{'い'}
8
- HAML
9
-
10
-
11
-
12
- HTML
13
- end
14
- end
15
- end
@@ -1,24 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Hamlit::Filters::Ruby do
4
- it 'renders ruby filter' do
5
- assert_render(<<-HAML, <<-HTML)
6
- :ruby
7
- hello
8
- HAML
9
- hello
10
- HTML
11
- end
12
-
13
- it 'renders ruby filter' do
14
- assert_render(<<-'HAML', <<-HTML)
15
- :ruby
16
- hash = {
17
- a: "#{'<&>'}",
18
- }
19
- = hash[:a]
20
- HAML
21
- &lt;&amp;&gt;
22
- HTML
23
- end
24
- end
@@ -1,33 +0,0 @@
1
- describe Hamlit::Filters::Sass do
2
- describe '#compile' do
3
- it 'renders sass filter' do
4
- assert_render(<<-HAML, <<-HTML)
5
- :sass
6
- .users_controller
7
- .show_action
8
- margin: 10px
9
- padding: 20px
10
- HAML
11
- <style>
12
- .users_controller .show_action {
13
- margin: 10px;
14
- padding: 20px; }
15
- </style>
16
- HTML
17
- end
18
-
19
- it 'renders sass filter with string interpolation' do
20
- assert_render(<<-'HAML', <<-HTML)
21
- :sass
22
- .users_controller
23
- .show_action
24
- content: "#{'<&>'}"
25
- HAML
26
- <style>
27
- .users_controller .show_action {
28
- content: "<&>"; }
29
- </style>
30
- HTML
31
- end
32
- end
33
- end
@@ -1,37 +0,0 @@
1
- describe Hamlit::Filters::Scss do
2
- describe '#compile' do
3
- it 'renders scss filter' do
4
- assert_render(<<-HAML, <<-HTML)
5
- :scss
6
- .users_controller {
7
- .show_action {
8
- margin: 10px;
9
- padding: 20px;
10
- }
11
- }
12
- HAML
13
- <style>
14
- .users_controller .show_action {
15
- margin: 10px;
16
- padding: 20px; }
17
- </style>
18
- HTML
19
- end
20
-
21
- it 'parses string interpolation' do
22
- assert_render(<<-'HAML', <<-HTML)
23
- :scss
24
- .users_controller {
25
- .show_action {
26
- content: "#{'<&>'}";
27
- }
28
- }
29
- HAML
30
- <style>
31
- .users_controller .show_action {
32
- content: "<&>"; }
33
- </style>
34
- HTML
35
- end
36
- end
37
- end
@@ -1,910 +0,0 @@
1
- require "haml"
2
-
3
- # This is a spec converted by haml-spec.
4
- # See: https://github.com/haml/haml-spec
5
- describe "haml ugly mode with ecape_html" do
6
- DEFAULT_OPTIONS = { ugly: true, escape_html: true }.freeze
7
-
8
- def assert_haml(haml, locals, options)
9
- engine = Haml::Engine.new(haml, DEFAULT_OPTIONS.merge(options))
10
- hamlit = Hamlit::Template.new(options) { haml }
11
- expect(hamlit.render(Object.new, locals)).to eq(engine.render(Object.new, locals))
12
- end
13
-
14
- context "headers" do
15
- specify "an XHTML XML prolog" do
16
- haml = %q{!!! XML}
17
- html = %q{<?xml version='1.0' encoding='utf-8' ?>}
18
- locals = {}
19
- options = {:format=>:xhtml}
20
- assert_haml(haml, locals, options)
21
- end
22
-
23
- specify "an XHTML default (transitional) doctype" do
24
- haml = %q{!!!}
25
- html = %q{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">}
26
- locals = {}
27
- options = {:format=>:xhtml}
28
- assert_haml(haml, locals, options)
29
- end
30
-
31
- specify "an XHTML 1.1 doctype" do
32
- haml = %q{!!! 1.1}
33
- html = %q{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">}
34
- locals = {}
35
- options = {:format=>:xhtml}
36
- assert_haml(haml, locals, options)
37
- end
38
-
39
- specify "an XHTML 1.2 mobile doctype" do
40
- haml = %q{!!! mobile}
41
- html = %q{<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">}
42
- locals = {}
43
- options = {:format=>:xhtml}
44
- assert_haml(haml, locals, options)
45
- end
46
-
47
- specify "an XHTML 1.1 basic doctype" do
48
- haml = %q{!!! basic}
49
- html = %q{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">}
50
- locals = {}
51
- options = {:format=>:xhtml}
52
- assert_haml(haml, locals, options)
53
- end
54
-
55
- specify "an XHTML 1.0 frameset doctype" do
56
- haml = %q{!!! frameset}
57
- html = %q{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">}
58
- locals = {}
59
- options = {:format=>:xhtml}
60
- assert_haml(haml, locals, options)
61
- end
62
-
63
- specify "an HTML 5 doctype with XHTML syntax" do
64
- haml = %q{!!! 5}
65
- html = %q{<!DOCTYPE html>}
66
- locals = {}
67
- options = {:format=>:xhtml}
68
- assert_haml(haml, locals, options)
69
- end
70
-
71
- specify "an HTML 5 XML prolog (silent)" do
72
- haml = %q{!!! XML}
73
- html = %q{}
74
- locals = {}
75
- options = {:format=>:html5}
76
- assert_haml(haml, locals, options)
77
- end
78
-
79
- specify "an HTML 5 doctype" do
80
- haml = %q{!!!}
81
- html = %q{<!DOCTYPE html>}
82
- locals = {}
83
- options = {:format=>:html5}
84
- assert_haml(haml, locals, options)
85
- end
86
-
87
- specify "an HTML 4 XML prolog (silent)" do
88
- haml = %q{!!! XML}
89
- html = %q{}
90
- locals = {}
91
- options = {:format=>:html4}
92
- assert_haml(haml, locals, options)
93
- end
94
-
95
- specify "an HTML 4 default (transitional) doctype" do
96
- haml = %q{!!!}
97
- html = %q{<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">}
98
- locals = {}
99
- options = {:format=>:html4}
100
- assert_haml(haml, locals, options)
101
- end
102
-
103
- specify "an HTML 4 frameset doctype" do
104
- haml = %q{!!! frameset}
105
- html = %q{<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">}
106
- locals = {}
107
- options = {:format=>:html4}
108
- assert_haml(haml, locals, options)
109
- end
110
-
111
- specify "an HTML 4 strict doctype" do
112
- haml = %q{!!! strict}
113
- html = %q{<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">}
114
- locals = {}
115
- options = {:format=>:html4}
116
- assert_haml(haml, locals, options)
117
- end
118
- end
119
-
120
- context "basic Haml tags and CSS" do
121
- specify "a simple Haml tag" do
122
- haml = %q{%p}
123
- html = %q{<p></p>}
124
- locals = {}
125
- options = {}
126
- assert_haml(haml, locals, options)
127
- end
128
-
129
- specify "a self-closing tag (XHTML)" do
130
- haml = %q{%meta}
131
- html = %q{<meta />}
132
- locals = {}
133
- options = {:format=>:xhtml}
134
- assert_haml(haml, locals, options)
135
- end
136
-
137
- specify "a self-closing tag (HTML4)" do
138
- haml = %q{%meta}
139
- html = %q{<meta>}
140
- locals = {}
141
- options = {:format=>:html4}
142
- assert_haml(haml, locals, options)
143
- end
144
-
145
- specify "a self-closing tag (HTML5)" do
146
- haml = %q{%meta}
147
- html = %q{<meta>}
148
- locals = {}
149
- options = {:format=>:html5}
150
- assert_haml(haml, locals, options)
151
- end
152
-
153
- specify "a self-closing tag ('/' modifier + XHTML)" do
154
- haml = %q{%zzz/}
155
- html = %q{<zzz />}
156
- locals = {}
157
- options = {:format=>:xhtml}
158
- assert_haml(haml, locals, options)
159
- end
160
-
161
- specify "a self-closing tag ('/' modifier + HTML5)" do
162
- haml = %q{%zzz/}
163
- html = %q{<zzz>}
164
- locals = {}
165
- options = {:format=>:html5}
166
- assert_haml(haml, locals, options)
167
- end
168
-
169
- specify "a tag with a CSS class" do
170
- haml = %q{%p.class1}
171
- html = %q{<p class='class1'></p>}
172
- locals = {}
173
- options = {}
174
- assert_haml(haml, locals, options)
175
- end
176
-
177
- specify "a tag with multiple CSS classes" do
178
- haml = %q{%p.class1.class2}
179
- html = %q{<p class='class1 class2'></p>}
180
- locals = {}
181
- options = {}
182
- assert_haml(haml, locals, options)
183
- end
184
-
185
- specify "a tag with a CSS id" do
186
- haml = %q{%p#id1}
187
- html = %q{<p id='id1'></p>}
188
- locals = {}
189
- options = {}
190
- assert_haml(haml, locals, options)
191
- end
192
-
193
- specify "a tag with multiple CSS id's" do
194
- haml = %q{%p#id1#id2}
195
- html = %q{<p id='id2'></p>}
196
- locals = {}
197
- options = {}
198
- assert_haml(haml, locals, options)
199
- end
200
-
201
- specify "a tag with a class followed by an id" do
202
- haml = %q{%p.class1#id1}
203
- html = %q{<p class='class1' id='id1'></p>}
204
- locals = {}
205
- options = {}
206
- assert_haml(haml, locals, options)
207
- end
208
-
209
- specify "a tag with an id followed by a class" do
210
- haml = %q{%p#id1.class1}
211
- html = %q{<p class='class1' id='id1'></p>}
212
- locals = {}
213
- options = {}
214
- assert_haml(haml, locals, options)
215
- end
216
-
217
- specify "an implicit div with a CSS id" do
218
- haml = %q{#id1}
219
- html = %q{<div id='id1'></div>}
220
- locals = {}
221
- options = {}
222
- assert_haml(haml, locals, options)
223
- end
224
-
225
- specify "an implicit div with a CSS class" do
226
- haml = %q{.class1}
227
- html = %q{<div class='class1'></div>}
228
- locals = {}
229
- options = {}
230
- assert_haml(haml, locals, options)
231
- end
232
-
233
- specify "multiple simple Haml tags" do
234
- haml = %q{%div
235
- %div
236
- %p}
237
- html = %q{<div>
238
- <div>
239
- <p></p>
240
- </div>
241
- </div>}
242
- locals = {}
243
- options = {}
244
- assert_haml(haml, locals, options)
245
- end
246
- end
247
-
248
- context "tags with unusual HTML characters" do
249
- specify "a tag with colons" do
250
- haml = %q{%ns:tag}
251
- html = %q{<ns:tag></ns:tag>}
252
- locals = {}
253
- options = {}
254
- assert_haml(haml, locals, options)
255
- end
256
-
257
- specify "a tag with underscores" do
258
- haml = %q{%snake_case}
259
- html = %q{<snake_case></snake_case>}
260
- locals = {}
261
- options = {}
262
- assert_haml(haml, locals, options)
263
- end
264
-
265
- specify "a tag with dashes" do
266
- haml = %q{%dashed-tag}
267
- html = %q{<dashed-tag></dashed-tag>}
268
- locals = {}
269
- options = {}
270
- assert_haml(haml, locals, options)
271
- end
272
-
273
- specify "a tag with camelCase" do
274
- haml = %q{%camelCase}
275
- html = %q{<camelCase></camelCase>}
276
- locals = {}
277
- options = {}
278
- assert_haml(haml, locals, options)
279
- end
280
-
281
- specify "a tag with PascalCase" do
282
- haml = %q{%PascalCase}
283
- html = %q{<PascalCase></PascalCase>}
284
- locals = {}
285
- options = {}
286
- assert_haml(haml, locals, options)
287
- end
288
- end
289
-
290
- context "tags with unusual CSS identifiers" do
291
- specify "an all-numeric class" do
292
- haml = %q{.123}
293
- html = %q{<div class='123'></div>}
294
- locals = {}
295
- options = {}
296
- assert_haml(haml, locals, options)
297
- end
298
-
299
- specify "a class with underscores" do
300
- haml = %q{.__}
301
- html = %q{<div class='__'></div>}
302
- locals = {}
303
- options = {}
304
- assert_haml(haml, locals, options)
305
- end
306
-
307
- specify "a class with dashes" do
308
- haml = %q{.--}
309
- html = %q{<div class='--'></div>}
310
- locals = {}
311
- options = {}
312
- assert_haml(haml, locals, options)
313
- end
314
- end
315
-
316
- context "tags with inline content" do
317
- specify "Inline content simple tag" do
318
- haml = %q{%p hello}
319
- html = %q{<p>hello</p>}
320
- locals = {}
321
- options = {}
322
- assert_haml(haml, locals, options)
323
- end
324
-
325
- specify "Inline content tag with CSS" do
326
- haml = %q{%p.class1 hello}
327
- html = %q{<p class='class1'>hello</p>}
328
- locals = {}
329
- options = {}
330
- assert_haml(haml, locals, options)
331
- end
332
-
333
- specify "Inline content multiple simple tags" do
334
- haml = %q{%div
335
- %div
336
- %p text}
337
- html = %q{<div>
338
- <div>
339
- <p>text</p>
340
- </div>
341
- </div>}
342
- locals = {}
343
- options = {}
344
- assert_haml(haml, locals, options)
345
- end
346
- end
347
-
348
- context "tags with nested content" do
349
- specify "Nested content simple tag" do
350
- haml = %q{%p
351
- hello}
352
- html = %q{<p>
353
- hello
354
- </p>}
355
- locals = {}
356
- options = {}
357
- assert_haml(haml, locals, options)
358
- end
359
-
360
- specify "Nested content tag with CSS" do
361
- haml = %q{%p.class1
362
- hello}
363
- html = %q{<p class='class1'>
364
- hello
365
- </p>}
366
- locals = {}
367
- options = {}
368
- assert_haml(haml, locals, options)
369
- end
370
-
371
- specify "Nested content multiple simple tags" do
372
- haml = %q{%div
373
- %div
374
- %p
375
- text}
376
- html = %q{<div>
377
- <div>
378
- <p>
379
- text
380
- </p>
381
- </div>
382
- </div>}
383
- locals = {}
384
- options = {}
385
- assert_haml(haml, locals, options)
386
- end
387
- end
388
-
389
- context "tags with HTML-style attributes" do
390
- specify "HTML-style one attribute" do
391
- haml = %q{%p(a='b')}
392
- html = %q{<p a='b'></p>}
393
- locals = {}
394
- options = {}
395
- assert_haml(haml, locals, options)
396
- end
397
-
398
- specify "HTML-style multiple attributes" do
399
- haml = %q{%p(a='b' c='d')}
400
- html = %q{<p a='b' c='d'></p>}
401
- locals = {}
402
- options = {}
403
- assert_haml(haml, locals, options)
404
- end
405
-
406
- specify "HTML-style attributes separated with newlines" do
407
- haml = %q{%p(a='b'
408
- c='d')}
409
- html = %q{<p a='b' c='d'></p>}
410
- locals = {}
411
- options = {}
412
- assert_haml(haml, locals, options)
413
- end
414
-
415
- specify "HTML-style interpolated attribute" do
416
- haml = %q{%p(a="#{var}")}
417
- html = %q{<p a='value'></p>}
418
- locals = {:var=>"value"}
419
- options = {}
420
- assert_haml(haml, locals, options)
421
- end
422
-
423
- specify "HTML-style 'class' as an attribute" do
424
- haml = %q{%p(class='class1')}
425
- html = %q{<p class='class1'></p>}
426
- locals = {}
427
- options = {}
428
- assert_haml(haml, locals, options)
429
- end
430
-
431
- specify "HTML-style tag with a CSS class and 'class' as an attribute" do
432
- haml = %q{%p.class2(class='class1')}
433
- html = %q{<p class='class1 class2'></p>}
434
- locals = {}
435
- options = {}
436
- assert_haml(haml, locals, options)
437
- end
438
-
439
- specify "HTML-style tag with 'id' as an attribute" do
440
- haml = %q{%p(id='1')}
441
- html = %q{<p id='1'></p>}
442
- locals = {}
443
- options = {}
444
- assert_haml(haml, locals, options)
445
- end
446
-
447
- specify "HTML-style tag with a CSS id and 'id' as an attribute" do
448
- haml = %q{%p#id(id='1')}
449
- html = %q{<p id='id_1'></p>}
450
- locals = {}
451
- options = {}
452
- assert_haml(haml, locals, options)
453
- end
454
-
455
- specify "HTML-style tag with a variable attribute" do
456
- haml = %q{%p(class=var)}
457
- html = %q{<p class='hello'></p>}
458
- locals = {:var=>"hello"}
459
- options = {}
460
- assert_haml(haml, locals, options)
461
- end
462
-
463
- specify "HTML-style tag with a CSS class and 'class' as a variable attribute" do
464
- haml = %q{.hello(class=var)}
465
- html = %q{<div class='hello world'></div>}
466
- locals = {:var=>"world"}
467
- options = {}
468
- assert_haml(haml, locals, options)
469
- end
470
-
471
- specify "HTML-style tag multiple CSS classes (sorted correctly)" do
472
- haml = %q{.z(class=var)}
473
- html = %q{<div class='a z'></div>}
474
- locals = {:var=>"a"}
475
- options = {}
476
- assert_haml(haml, locals, options)
477
- end
478
-
479
- specify "HTML-style tag with an atomic attribute" do
480
- haml = %q{%a(flag)}
481
- html = %q{<a flag></a>}
482
- locals = {}
483
- options = {}
484
- assert_haml(haml, locals, options)
485
- end
486
- end
487
-
488
- context "tags with Ruby-style attributes" do
489
- specify "Ruby-style one attribute" do
490
- haml = %q{%p{:a => 'b'}}
491
- html = %q{<p a='b'></p>}
492
- locals = {}
493
- options = {}
494
- assert_haml(haml, locals, options)
495
- end
496
-
497
- specify "Ruby-style attributes hash with whitespace" do
498
- haml = %q{%p{ :a => 'b' }}
499
- html = %q{<p a='b'></p>}
500
- locals = {}
501
- options = {}
502
- assert_haml(haml, locals, options)
503
- end
504
-
505
- specify "Ruby-style interpolated attribute" do
506
- haml = %q{%p{:a =>"#{var}"}}
507
- html = %q{<p a='value'></p>}
508
- locals = {:var=>"value"}
509
- options = {}
510
- assert_haml(haml, locals, options)
511
- end
512
-
513
- specify "Ruby-style multiple attributes" do
514
- haml = %q{%p{ :a => 'b', 'c' => 'd' }}
515
- html = %q{<p a='b' c='d'></p>}
516
- locals = {}
517
- options = {}
518
- assert_haml(haml, locals, options)
519
- end
520
-
521
- specify "Ruby-style attributes separated with newlines" do
522
- haml = %q{%p{ :a => 'b',
523
- 'c' => 'd' }}
524
- html = %q{<p a='b' c='d'></p>}
525
- locals = {}
526
- options = {}
527
- assert_haml(haml, locals, options)
528
- end
529
-
530
- specify "Ruby-style 'class' as an attribute" do
531
- haml = %q{%p{:class => 'class1'}}
532
- html = %q{<p class='class1'></p>}
533
- locals = {}
534
- options = {}
535
- assert_haml(haml, locals, options)
536
- end
537
-
538
- specify "Ruby-style tag with a CSS class and 'class' as an attribute" do
539
- haml = %q{%p.class2{:class => 'class1'}}
540
- html = %q{<p class='class1 class2'></p>}
541
- locals = {}
542
- options = {}
543
- assert_haml(haml, locals, options)
544
- end
545
-
546
- specify "Ruby-style tag with 'id' as an attribute" do
547
- haml = %q{%p{:id => '1'}}
548
- html = %q{<p id='1'></p>}
549
- locals = {}
550
- options = {}
551
- assert_haml(haml, locals, options)
552
- end
553
-
554
- specify "Ruby-style tag with a CSS id and 'id' as an attribute" do
555
- haml = %q{%p#id{:id => '1'}}
556
- html = %q{<p id='id_1'></p>}
557
- locals = {}
558
- options = {}
559
- assert_haml(haml, locals, options)
560
- end
561
-
562
- specify "Ruby-style tag with a CSS id and a numeric 'id' as an attribute" do
563
- haml = %q{%p#id{:id => 1}}
564
- html = %q{<p id='id_1'></p>}
565
- locals = {}
566
- options = {}
567
- assert_haml(haml, locals, options)
568
- end
569
-
570
- specify "Ruby-style tag with a variable attribute" do
571
- haml = %q{%p{:class => var}}
572
- html = %q{<p class='hello'></p>}
573
- locals = {:var=>"hello"}
574
- options = {}
575
- assert_haml(haml, locals, options)
576
- end
577
-
578
- specify "Ruby-style tag with a CSS class and 'class' as a variable attribute" do
579
- haml = %q{.hello{:class => var}}
580
- html = %q{<div class='hello world'></div>}
581
- locals = {:var=>"world"}
582
- options = {}
583
- assert_haml(haml, locals, options)
584
- end
585
-
586
- specify "Ruby-style tag multiple CSS classes (sorted correctly)" do
587
- haml = %q{.z{:class => var}}
588
- html = %q{<div class='a z'></div>}
589
- locals = {:var=>"a"}
590
- options = {}
591
- assert_haml(haml, locals, options)
592
- end
593
- end
594
-
595
- context "silent comments" do
596
- specify "an inline silent comment" do
597
- haml = %q{-# hello}
598
- html = %q{}
599
- locals = {}
600
- options = {}
601
- assert_haml(haml, locals, options)
602
- end
603
-
604
- specify "a nested silent comment" do
605
- haml = %q{-#
606
- hello}
607
- html = %q{}
608
- locals = {}
609
- options = {}
610
- assert_haml(haml, locals, options)
611
- end
612
-
613
- specify "a multiply nested silent comment" do
614
- haml = %q{-#
615
- %div
616
- foo}
617
- html = %q{}
618
- locals = {}
619
- options = {}
620
- assert_haml(haml, locals, options)
621
- end
622
-
623
- specify "a multiply nested silent comment with inconsistent indents" do
624
- haml = %q{-#
625
- %div
626
- foo}
627
- html = %q{}
628
- locals = {}
629
- options = {}
630
- assert_haml(haml, locals, options)
631
- end
632
- end
633
-
634
- context "markup comments" do
635
- specify "an inline markup comment" do
636
- haml = %q{/ comment}
637
- html = %q{<!-- comment -->}
638
- locals = {}
639
- options = {}
640
- assert_haml(haml, locals, options)
641
- end
642
-
643
- specify "a nested markup comment" do
644
- haml = %q{/
645
- comment
646
- comment2}
647
- html = %q{<!--
648
- comment
649
- comment2
650
- -->}
651
- locals = {}
652
- options = {}
653
- assert_haml(haml, locals, options)
654
- end
655
- end
656
-
657
- context "conditional comments" do
658
- specify "a conditional comment" do
659
- haml = %q{/[if IE]
660
- %p a}
661
- html = %q{<!--[if IE]>
662
- <p>a</p>
663
- <![endif]-->}
664
- locals = {}
665
- options = {}
666
- assert_haml(haml, locals, options)
667
- end
668
- end
669
-
670
- context "internal filters" do
671
- specify "content in an 'escaped' filter" do
672
- haml = %q{:escaped
673
- <&">}
674
- html = %q{&lt;&amp;&quot;&gt;}
675
- locals = {}
676
- options = {}
677
- assert_haml(haml, locals, options)
678
- end
679
-
680
- specify "content in a 'preserve' filter" do
681
- haml = %q{:preserve
682
- hello
683
-
684
- %p}
685
- html = %q{hello&#x000A;
686
- <p></p>}
687
- locals = {}
688
- options = {}
689
- assert_haml(haml, locals, options)
690
- end
691
-
692
- specify "content in a 'plain' filter" do
693
- haml = %q{:plain
694
- hello
695
-
696
- %p}
697
- html = %q{hello
698
- <p></p>}
699
- locals = {}
700
- options = {}
701
- assert_haml(haml, locals, options)
702
- end
703
-
704
- specify "content in a 'css' filter (XHTML)" do
705
- haml = %q{:css
706
- hello
707
-
708
- %p}
709
- html = %q{<style type='text/css'>
710
- /*<![CDATA[*/
711
- hello
712
- /*]]>*/
713
- </style>
714
- <p></p>}
715
- locals = {}
716
- options = {:format=>:xhtml}
717
- assert_haml(haml, locals, options)
718
- end
719
-
720
- specify "content in a 'javascript' filter (XHTML)" do
721
- haml = %q{:javascript
722
- a();
723
- %p}
724
- html = %q{<script type='text/javascript'>
725
- //<![CDATA[
726
- a();
727
- //]]>
728
- </script>
729
- <p></p>}
730
- locals = {}
731
- options = {:format=>:xhtml}
732
- assert_haml(haml, locals, options)
733
- end
734
-
735
- specify "content in a 'css' filter (HTML)" do
736
- haml = %q{:css
737
- hello
738
-
739
- %p}
740
- html = %q{<style>
741
- hello
742
- </style>
743
- <p></p>}
744
- locals = {}
745
- options = {:format=>:html5}
746
- assert_haml(haml, locals, options)
747
- end
748
-
749
- specify "content in a 'javascript' filter (HTML)" do
750
- haml = %q{:javascript
751
- a();
752
- %p}
753
- html = %q{<script>
754
- a();
755
- </script>
756
- <p></p>}
757
- locals = {}
758
- options = {:format=>:html5}
759
- assert_haml(haml, locals, options)
760
- end
761
- end
762
-
763
- context "Ruby-style interpolation" do
764
- specify "interpolation inside inline content" do
765
- haml = %q{%p #{var}}
766
- html = %q{<p>value</p>}
767
- locals = {:var=>"value"}
768
- options = {}
769
- assert_haml(haml, locals, options)
770
- end
771
-
772
- specify "no interpolation when escaped" do
773
- haml = %q{%p \#{var}}
774
- html = %q{<p>#{var}</p>}
775
- locals = {:var=>"value"}
776
- options = {}
777
- assert_haml(haml, locals, options)
778
- end
779
-
780
- specify "interpolation when the escape character is escaped" do
781
- haml = %q{%p \\#{var}}
782
- html = %q{<p>\value</p>}
783
- locals = {:var=>"value"}
784
- options = {}
785
- assert_haml(haml, locals, options)
786
- end
787
-
788
- specify "interpolation inside filtered content" do
789
- haml = %q{:plain
790
- #{var} interpolated: #{var}}
791
- html = %q{value interpolated: value}
792
- locals = {:var=>"value"}
793
- options = {}
794
- assert_haml(haml, locals, options)
795
- end
796
- end
797
-
798
- context "HTML escaping" do
799
- specify "code following '&='" do
800
- haml = %q{&= '<"&>'}
801
- html = %q{&lt;&quot;&amp;&gt;}
802
- locals = {}
803
- options = {}
804
- assert_haml(haml, locals, options)
805
- end
806
-
807
- specify "code following '=' when escape_haml is set to true" do
808
- haml = %q{= '<"&>'}
809
- html = %q{&lt;&quot;&amp;&gt;}
810
- locals = {}
811
- options = {:escape_html=>"true"}
812
- assert_haml(haml, locals, options)
813
- end
814
-
815
- specify "code following '!=' when escape_haml is set to true" do
816
- haml = %q{!= '<"&>'}
817
- html = %q{<"&>}
818
- locals = {}
819
- options = {:escape_html=>"true"}
820
- assert_haml(haml, locals, options)
821
- end
822
- end
823
-
824
- context "boolean attributes" do
825
- specify "boolean attribute with XHTML" do
826
- haml = %q{%input(checked=true)}
827
- html = %q{<input checked='checked' />}
828
- locals = {}
829
- options = {:format=>:xhtml}
830
- assert_haml(haml, locals, options)
831
- end
832
-
833
- specify "boolean attribute with HTML" do
834
- haml = %q{%input(checked=true)}
835
- html = %q{<input checked>}
836
- locals = {}
837
- options = {:format=>:html5}
838
- assert_haml(haml, locals, options)
839
- end
840
- end
841
-
842
- context "whitespace preservation" do
843
- specify "following the '~' operator" do
844
- haml = %q{~ "Foo\n<pre>Bar\nBaz</pre>"}
845
- html = %q{Foo
846
- <pre>Bar&#x000A;Baz</pre>}
847
- locals = {}
848
- options = {}
849
- assert_haml(haml, locals, options)
850
- end
851
-
852
- specify "inside a textarea tag" do
853
- haml = %q{%textarea
854
- hello
855
- hello}
856
- html = %q{<textarea>hello
857
- hello</textarea>}
858
- locals = {}
859
- options = {}
860
- assert_haml(haml, locals, options)
861
- end
862
-
863
- specify "inside a pre tag" do
864
- haml = %q{%pre
865
- hello
866
- hello}
867
- html = %q{<pre>hello
868
- hello</pre>}
869
- locals = {}
870
- options = {}
871
- assert_haml(haml, locals, options)
872
- end
873
- end
874
-
875
- context "whitespace removal" do
876
- specify "a tag with '>' appended and inline content" do
877
- haml = %q{%li hello
878
- %li> world
879
- %li again}
880
- html = %q{<li>hello</li><li>world</li><li>again</li>}
881
- locals = {}
882
- options = {}
883
- assert_haml(haml, locals, options)
884
- end
885
-
886
- specify "a tag with '>' appended and nested content" do
887
- haml = %q{%li hello
888
- %li>
889
- world
890
- %li again}
891
- html = %q{<li>hello</li><li>
892
- world
893
- </li><li>again</li>}
894
- locals = {}
895
- options = {}
896
- assert_haml(haml, locals, options)
897
- end
898
-
899
- specify "a tag with '<' appended" do
900
- haml = %q{%p<
901
- hello
902
- world}
903
- html = %q{<p>hello
904
- world</p>}
905
- locals = {}
906
- options = {}
907
- assert_haml(haml, locals, options)
908
- end
909
- end
910
- end