diff --git a/test/hamlit/engine/old_attribute_test.rb b/test/hamlit/engine/old_attribute_test.rb new file mode 100644 index 00000000..1aa0e8ad --- /dev/null +++ b/test/hamlit/engine/old_attribute_test.rb @@ -0,0 +1,399 @@ +describe Hamlit::Engine do + include RenderAssertion + + describe 'old attributes' do + it 'renders attributes' do + assert_render(<<-HAML, <<-HTML) + %span{class: 'foo'} bar + HAML + bar + HTML + end + + it 'renders attributes' do + assert_render(<<-HAML, <<-HTML) + %span{ data: 2 } bar + HAML + bar + HTML + end + + it 'renders attributes' do + assert_render(<<-'HAML', <<-HTML) + %span{ :class => 'foo' } bar + HAML + bar + HTML + end + + it 'renders attributes' do + assert_render(<<-'HAML', <<-HTML) + %span{ :class => 'foo', id: 'bar' } bar + HAML + bar + HTML + end + + it 'renders attributes' do + assert_render(<<-'HAML', <<-HTML) + %span{ :'data-disable' => true } bar + HAML + bar + HTML + end + + it 'accepts method call including comma' do + assert_render(<<-'HAML', <<-HTML) + %body{ class: "#{"ab".gsub(/a/, 'b')}", data: { confirm: 'really?', disable: true }, id: 'c'.gsub(/c/, 'a') } + HAML +
+ HTML + end + + it 'accepts tag content' do + assert_render(<<-'HAML', <<-HTML) + %span{ class: 'foo' } bar + HAML + bar + HTML + end + + it 'renders multi-byte chars as static attribute value' do + assert_render(<<-'HAML', <<-HTML) + %img{ alt: 'こんにちは' } + HAML +hello\nworld
"
+ HAML
+ <code>hello
+ world</code>
+ HTML
+ end
+ end
+end
diff --git a/test/hamlit/engine/silent_script_test.rb b/test/hamlit/engine/silent_script_test.rb
new file mode 100644
index 00000000..1086b16b
--- /dev/null
+++ b/test/hamlit/engine/silent_script_test.rb
@@ -0,0 +1,216 @@
+describe Hamlit::Engine do
+ include RenderAssertion
+
+ describe 'silent script' do
+ it 'renders nothing' do
+ assert_render(<<-HAML, <<-HTML)
+ - nil
+ - 3
+ - 'foo'
+ HAML
+ HTML
+ end
+
+ it 'renders silent script' do
+ assert_render(<<-HAML, <<-HTML)
+ - foo = 3
+ - bar = 2
+ = foo + bar
+ HAML
+ 5
+ HTML
+ end
+
+ it 'renders nested block' do
+ assert_render(<<-HAML, <<-HTML)
+ - 2.times do |i|
+ = i
+ 2
+ - 3.upto(4).each do |i|
+ = i
+ HAML
+ 0
+ 1
+ 2
+ 3
+ 4
+ HTML
+ end
+
+ it 'renders if' do
+ assert_render(<<-HAML, <<-HTML)
+ - if true
+ ok
+ HAML
+ ok
+ HTML
+ end
+
+ it 'renders if-else' do
+ assert_render(<<-HAML, <<-HTML)
+ - if true
+ ok
+ - else
+ ng
+
+ - if false
+ ng
+
+ - else
+ ok
+ HAML
+ ok
+ ok
+ HTML
+ end
+
+ it 'renders nested if-else' do
+ assert_render(<<-'HAML', <<-HTML)
+ %span
+ - if false
+ ng
+ - else
+ ok
+ HAML
+
+ ok
+
+ HTML
+ end
+
+ it 'renders empty elsif statement' do
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :haml, error_with: :faml)
+ %span
+ - if false
+ - elsif false
+ HAML
+
+
+ HTML
+ end
+
+ it 'renders empty else statement' do
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :haml, error_with: :faml)
+ %span
+ - if false
+ ng
+ - else
+ HAML
+
+
+ HTML
+ end
+
+ it 'renders empty when statement' do
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :haml, error_with: :faml)
+ %span
+ - case
+ - when false
+ HAML
+
+
+ HTML
+ end
+
+ it 'accept if inside if-else' do
+ assert_render(<<-'HAML', <<-HTML)
+ - if false
+ - if true
+ ng
+ - else
+ ok
+ HAML
+ ok
+ HTML
+ end
+
+ it 'renders if-elsif' do
+ assert_render(<<-HAML, <<-HTML)
+ - if false
+ - elsif true
+ ok
+
+ - if false
+ - elsif false
+ - else
+ ok
+ HAML
+ ok
+ ok
+ HTML
+ end
+
+ it 'renders case-when' do
+ assert_render(<<-'HAML', <<-HTML)
+ - case 'foo'
+ - when /\Ao/
+ ng
+ - when /\Af/
+ ok
+ - else
+ ng
+ HAML
+ ok
+ HTML
+ end
+
+ it 'renders case-when with multiple candidates' do
+ assert_render(<<-'HAML', <<-HTML)
+ - case 'a'
+ - when 'a', 'b'
+ ok
+ HAML
+ ok
+ HTML
+ end
+
+ it 'renders begin-rescue' do
+ assert_render(<<-'HAML', <<-HTML)
+ - begin
+ - raise 'error'
+ - rescue
+ hello
+ - ensure
+ world
+ HAML
+ hello
+ world
+ HTML
+ end
+
+ it 'renders rescue with error' do
+ assert_render(<<-'HAML', <<-HTML)
+ - begin
+ - raise 'error'
+ - rescue RuntimeError => e
+ hello
+ HAML
+ hello
+ HTML
+ end
+
+ it 'joins a next line if a current line ends with ","' do
+ skip
+ assert_render("- foo = [', \n ']\n= foo", <<-HTML, compatible_only: :haml)
+ [", "]
+ HTML
+ end
+
+ it 'accepts illegal indent in continuing code' do
+ assert_render(<<-HAML, <<-HTML)
+ %span
+ %div
+ - def foo(a, b); a + b; end
+ - num = foo(1,
+ 2)
+ = num
+ HAML
+
+ '}
+ HAML
+ =
+ =
+ <p>
+ HTML
+ end
+
+ it 'renders ~ operator' do
+ assert_render(<<-HAML, <<-HTML, escape_html: false)
+ %span~ 1
+ HAML
+ 1
+ HTML
+ end
+ end
+
+ describe 'string interpolation' do
+ specify { assert_render('#{}', "\n") }
+ specify { assert_render('1#{}', "1\n") }
+ specify { assert_render('1#{2}', "12\n") }
+ specify { assert_render('}#{1}', "}1\n") }
+ specify { assert_render('#{1}2', "12\n") }
+ specify { assert_render('1#{ "2#{3}4" }5', "12345\n") }
+ specify { assert_render('#{1}2#{3}4#{5}6#{7}8#{9}', "123456789\n") }
+ specify { assert_render(%q{'"!@$%^&*|=#{1}1#{1}2}, %Q{'"!@$%^&*|=1112\n}) }
+ specify { assert_render('あ#{1}', "あ1\n") }
+ specify { assert_render('あ#{"い"}う', "あいう\n") }
+ specify { skip; assert_render('a#{""}c', "a<b>c\n") }
+ end
+
+ describe 'illegal inputs' do
+ it 'rejects an invalid tag' do
+ skip
+ expect { render_string(<<-HAML.unindent) }.
+ % a
+ HAML
+ to raise_error(Hamlit::SyntaxError, 'Invalid tag: "% a".')
+ end
+
+ it 'rejects an invalid tag' do
+ skip
+ expect { render_string(<<-HAML.unindent) }.
+ %.foo
+ HAML
+ to raise_error(Hamlit::SyntaxError, 'Invalid tag: "%.foo".')
+ end
+ end
+ end
+end
diff --git a/test/hamlit/filters/coffee_test.rb b/test/hamlit/filters/coffee_test.rb
new file mode 100644
index 00000000..97b294bb
--- /dev/null
+++ b/test/hamlit/filters/coffee_test.rb
@@ -0,0 +1,65 @@
+describe Hamlit::Filters do
+ include RenderAssertion
+
+ describe '#compile' do
+ it 'renders coffee filter' do
+ skip
+ assert_render(<<-HAML, <<-HTML)
+ :coffee
+ foo = ->
+ alert('hello')
+ HAML
+
+ HTML
+ end
+
+ it 'renders coffeescript filter' do
+ skip
+ assert_render(<<-HAML, <<-HTML)
+ :coffee
+ foo = ->
+ alert('hello')
+ HAML
+
+ HTML
+ end
+
+ it 'renders coffeescript filter' do
+ skip
+ assert_render(<<-'HAML', <<-HTML)
+ :coffee
+ foo = ->
+ alert("#{'<&>'}")
+ HAML
+
+ HTML
+ end
+ end
+end
diff --git a/test/hamlit/filters/css_test.rb b/test/hamlit/filters/css_test.rb
new file mode 100644
index 00000000..595abc1b
--- /dev/null
+++ b/test/hamlit/filters/css_test.rb
@@ -0,0 +1,37 @@
+describe Hamlit::Filters do
+ include RenderAssertion
+
+ describe '#compile' do
+ it 'renders css' do
+ skip
+ assert_render(<<-HAML, <<-HTML)
+ :css
+ .foo {
+ width: 100px;
+ }
+ HAML
+
+ HTML
+ end
+
+ it 'parses string interpolation' do
+ skip
+ assert_render(<<-'HAML', <<-HTML)
+ :css
+ .foo {
+ content: "#{'<&>'}";
+ }
+ HAML
+
+ HTML
+ end
+ end
+end
diff --git a/test/hamlit/filters/erb_test.rb b/test/hamlit/filters/erb_test.rb
new file mode 100644
index 00000000..ae5335ae
--- /dev/null
+++ b/test/hamlit/filters/erb_test.rb
@@ -0,0 +1,19 @@
+describe Hamlit::Filters do
+ include RenderAssertion
+
+ describe '#compile' do
+ it 'renders erb filter' do
+ skip
+ assert_render(<<-HAML, <<-HTML, compatible_only: [], error_with: :faml)
+ :erb
+ <% if true %>
+ ok
+ <% else %>
+ ng
+ <% end %>
+ HAML
+ ok
+ HTML
+ end
+ end
+end
diff --git a/test/hamlit/filters/javascript_test.rb b/test/hamlit/filters/javascript_test.rb
new file mode 100644
index 00000000..5dcc08ed
--- /dev/null
+++ b/test/hamlit/filters/javascript_test.rb
@@ -0,0 +1,88 @@
+describe Hamlit::Filters do
+ include RenderAssertion
+
+ describe '#compile' do
+ it 'just renders script tag for empty filter' do
+ skip
+ assert_render(<<-HAML, <<-HTML, compatible_only: [])
+ before
+ :javascript
+ after
+ HAML
+ before
+
+ after
+ HTML
+ end
+
+ it 'compiles javascript filter' do
+ assert_render(<<-HAML, <<-HTML)
+ before
+ :javascript
+ alert('hello');
+ after
+ HAML
+ before
+
+ after
+ HTML
+ end
+
+ it 'accepts illegal indentation' do
+ skip
+ assert_render(<<-HAML, <<-HTML, compatible_only: :faml)
+ :javascript
+ if {
+ alert('hello');
+ }
+ :javascript
+ if {
+ alert('hello');
+ }
+ HAML
+
+
+ HTML
+ end
+
+ it 'accepts illegal indentation' do
+ skip
+ assert_render(<<-HAML, <<-HTML)
+ :javascript
+ if {
+ alert('a');
+ }
+ HAML
+
+ HTML
+ end
+
+ it 'parses string interpolation' do
+ skip
+ assert_render(<<-'HAML', <<-HTML)
+ :javascript
+ var a = "#{'<&>'}";
+ HAML
+
+ HTML
+ end
+ end
+end
diff --git a/test/hamlit/filters/less_test.rb b/test/hamlit/filters/less_test.rb
new file mode 100644
index 00000000..8171c298
--- /dev/null
+++ b/test/hamlit/filters/less_test.rb
@@ -0,0 +1,41 @@
+describe Hamlit::Filters do
+ include RenderAssertion
+
+ describe '#compile' do
+ it 'renders less filter' do
+ skip
+ assert_render(<<-HAML, <<-HTML, compatible_only: :haml, error_with: :faml)
+ :less
+ .users_controller {
+ .show_action {
+ margin: 10px;
+ padding: 20px;
+ }
+ }
+ HAML
+
+ HTML
+ end
+
+ it 'parses string interpolation' do
+ skip
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :haml, error_with: :faml)
+ :less
+ .foo {
+ content: "#{'<&>'}";
+ }
+ HAML
+
+ HTML
+ end
+ end
+end
diff --git a/test/hamlit/filters/markdown_test.rb b/test/hamlit/filters/markdown_test.rb
new file mode 100644
index 00000000..7b922003
--- /dev/null
+++ b/test/hamlit/filters/markdown_test.rb
@@ -0,0 +1,34 @@
+describe Hamlit::Filters do
+ include RenderAssertion
+
+ describe '#compile' do
+ it 'renders markdown filter' do
+ skip
+ assert_render(<<-HAML, <<-HTML)
+ :markdown
+ # Hamlit
+ Yet another haml implementation
+ HAML
+ Hamlit
+
+
Yet another haml implementation
+ HTML + end + + it 'renders markdown filter with string interpolation' do + skip + assert_render(<<-'HAML', <<-HTML, compatible_only: :faml) + - project = '<&> + Yet another haml implementation
+ HTML + end + end +end diff --git a/test/hamlit/filters/plain_test.rb b/test/hamlit/filters/plain_test.rb new file mode 100644 index 00000000..8df5f4c6 --- /dev/null +++ b/test/hamlit/filters/plain_test.rb @@ -0,0 +1,17 @@ +describe Hamlit::Filters do + include RenderAssertion + + describe '#compile' do + it 'renders plain filter' do + assert_render(<<-'HAML', <<-HTML, compatible_only: :haml) + :plain + あ + #{'い'} + HAML + あ + い + + HTML + end + end +end diff --git a/test/hamlit/filters/ruby_test.rb b/test/hamlit/filters/ruby_test.rb new file mode 100644 index 00000000..8ec8ba85 --- /dev/null +++ b/test/hamlit/filters/ruby_test.rb @@ -0,0 +1,26 @@ +describe Hamlit::Filters do + include RenderAssertion + + it 'renders ruby filter' do + skip + assert_render(<<-HAML, <<-HTML) + :ruby + hello + HAML + hello + HTML + end + + it 'renders ruby filter' do + skip + assert_render(<<-'HAML', <<-HTML) + :ruby + hash = { + a: "#{'<&>'}", + } + = hash[:a] + HAML + <&> + HTML + end +end diff --git a/test/hamlit/filters/sass_test.rb b/test/hamlit/filters/sass_test.rb new file mode 100644 index 00000000..c82bc401 --- /dev/null +++ b/test/hamlit/filters/sass_test.rb @@ -0,0 +1,37 @@ +describe Hamlit::Filters do + include RenderAssertion + + describe '#compile' do + it 'renders sass filter' do + skip + assert_render(<<-HAML, <<-HTML) + :sass + .users_controller + .show_action + margin: 10px + padding: 20px + HAML + + HTML + end + + it 'renders sass filter with string interpolation' do + skip + assert_render(<<-'HAML', <<-HTML) + :sass + .users_controller + .show_action + content: "#{'<&>'}" + HAML + + HTML + end + end +end diff --git a/test/hamlit/filters/scss_test.rb b/test/hamlit/filters/scss_test.rb new file mode 100644 index 00000000..b6253fae --- /dev/null +++ b/test/hamlit/filters/scss_test.rb @@ -0,0 +1,41 @@ +describe Hamlit::Filters do + include RenderAssertion + + describe '#compile' do + it 'renders scss filter' do + skip + assert_render(<<-HAML, <<-HTML) + :scss + .users_controller { + .show_action { + margin: 10px; + padding: 20px; + } + } + HAML + + HTML + end + + it 'parses string interpolation' do + skip + assert_render(<<-'HAML', <<-HTML) + :scss + .users_controller { + .show_action { + content: "#{'<&>'}"; + } + } + HAML + + HTML + end + end +end