spec/lib/hotcell/template_spec.rb in hotcell-0.1.0 vs spec/lib/hotcell/template_spec.rb in hotcell-0.2.0
- old
+ new
@@ -6,11 +6,12 @@
Hotcell.stub(:commands) { { 'include' => Class.new } }
Hotcell.stub(:blocks) { { 'for' => Class.new } }
end
specify { described_class.parse('').should be_a described_class }
- specify { described_class.parse('').options.values.map(&:keys).should == [['include'], ['for']] }
+ specify { described_class.parse(''
+ ).options.slice(:commands, :blocks).values.map(&:keys).should == [['include'], ['for']] }
end
describe '#syntax' do
specify { described_class.new('').syntax.should be_a Hotcell::Joiner }
specify { described_class.new('hello').syntax.should be_a Hotcell::Joiner }
@@ -78,7 +79,56 @@
{{ i * j }}
{{ end for }}
{{ end for }}
SOURCE
).render.gsub(/[\s\n]+/, ' ').strip.should == '4 3 2 1 8 6 4 2 12 9 6 3 16 12 8 4' }
+
+ context 'method invokation' do
+ specify { described_class.parse("{{ [1, 2, 3][1] }}").render.should == '2' }
+ specify { described_class.parse("{{ [1, 2, 3][1..2] }}").render.should == '[2, 3]' }
+ specify { described_class.parse("{{ [1, 2, 3].last }}").render.should == '3' }
+ specify { described_class.parse("{{ [1, 2, 3]['last'] }}").render.should =~ /TypeError/ }
+ specify { described_class.parse("{{ { a: 1, b: 2 }['b'] }}").render.should == '2' }
+ specify { described_class.parse("{{ { count: 5, b: 7 }.count }}").render.should == '2' }
+ specify { described_class.parse("{{ { count: 5, b: 7 }.b }}").render.should == '7' }
+ specify { described_class.parse("{{ { count: 5, b: 7 }['count'] }}").render.should == '5' }
+ specify { described_class.parse("{{ { count: 5, b: 7 }['b'] }}").render.should == '7' }
+ specify { described_class.parse("{{ { count: 5, b: 7 }['size'] }}").render.should == '' }
+ specify { described_class.parse("{{ 'string'[1] }}").render.should == 't' }
+ specify { described_class.parse("{{ 'string'[1, 3] }}").render.should == 'tri' }
+ specify { described_class.parse("{{ 'string'.size }}").render.should == '6' }
+ specify { described_class.parse("{{ 'string'['size'] }}").render.should == '' }
+ end
+ end
+
+ context 'escaping' do
+ specify { described_class.parse('{{ title }}').render(
+ title: '<h1>Title</h1>'
+ ).should == '<h1>Title</h1>' }
+ specify { described_class.parse('{{~ title }}').render(
+ title: '<h1>Title</h1>'
+ ).should == '<h1>Title</h1>' }
+ specify { described_class.parse('{{ if true }}<h1>Title</h1>{{ end }}').render(
+ title: '<h1>Title</h1>'
+ ).should == '<h1>Title</h1>' }
+ specify { described_class.parse('{{^ if true }}<h1>Title</h1>{{ end }}').render(
+ title: '<h1>Title</h1>'
+ ).should == '<h1>Title</h1>' }
+ specify { described_class.parse('{{ if true }}{{ title }}{{ end }}').render(
+ title: '<h1>Title</h1>'
+ ).should == '<h1>Title</h1>' }
+
+ context 'escape_tags' do
+ before { Hotcell.stub(:escape_tags) { true } }
+
+ specify { described_class.parse('{{ title }}').render(
+ title: '<h1>Title</h1>'
+ ).should == '<h1>Title</h1>' }
+ specify { described_class.parse('{{ if true }}{{ title }}{{ end }}').render(
+ title: '<h1>Title</h1>'
+ ).should == '<h1>Title</h1>' }
+ specify { described_class.parse('{{ if true }}<h1>Title</h1>{{ end }}').render(
+ title: '<h1>Title</h1>'
+ ).should == '<h1>Title</h1>' }
+ end
end
end