require 'erb' require File.expand_path('../../../spec_helper', __FILE__) describe "ERB.new" do before :all do @eruby_str = <<'END' END @eruby_str2 = <<'END' %%% END end it "compiles eRuby script into ruby code when trim mode is 0 or not specified" do expected = "\n" [0, '', nil].each do |trim_mode| if RUBY_VERSION >= '2.6' ERB.new(@eruby_str, trim_mode: trim_mode).result.should == expected else ERB.new(@eruby_str, nil, trim_mode).result.should == expected end end end it "removes '\n' when trim_mode is 1 or '>'" do expected = "\n" [1, '>'].each do |trim_mode| if RUBY_VERSION >= '2.6' ERB.new(@eruby_str, trim_mode: trim_mode).result.should == expected else ERB.new(@eruby_str, nil, trim_mode).result.should == expected end end end it "removes spaces at beginning of line and '\n' when trim_mode is 2 or '<>'" do expected = "\n" [2, '<>'].each do |trim_mode| if RUBY_VERSION >= '2.6' ERB.new(@eruby_str, trim_mode: trim_mode).result.should == expected else ERB.new(@eruby_str, nil, trim_mode).result.should == expected end end end it "removes spaces around '<%- -%>' when trim_mode is '-'" do expected = "\n" input = <<'END' END if RUBY_VERSION >= '2.6' ERB.new(input, trim_mode: '-').result.should == expected else ERB.new(input, nil, '-').result.should == expected end end it "does not support '<%-= expr %> even when trim_mode is '-'" do input = <<'END'

<%= expr -%> <%-= expr -%>

END lambda { if RUBY_VERSION >= '2.6' ERB.new(input, trim_mode: '-').result else ERB.new(input, nil, '-').result end }.should raise_error(SyntaxError) end it "regards lines starting with '%' as '<% ... %>' when trim_mode is '%'" do expected = "\n%%\n" if RUBY_VERSION >= '2.6' ERB.new(@eruby_str2, trim_mode: "%").result.should == expected else ERB.new(@eruby_str2, nil, "%").result.should == expected end end it "regards lines starting with '%' as '<% ... %>' and remove \"\\n\" when trim_mode is '%>'" do expected = "\n%%\n" if RUBY_VERSION >= '2.6' ERB.new(@eruby_str2, trim_mode: '%>').result.should == expected else ERB.new(@eruby_str2, nil, '%>').result.should == expected end end it "regard lines starting with '%' as '<% ... %>' and remove \"\\n\" when trim_mode is '%<>'" do expected = "\n%%\n" if RUBY_VERSION >= '2.6' ERB.new(@eruby_str2, trim_mode: '%<>').result.should == expected else ERB.new(@eruby_str2, nil, '%<>').result.should == expected end end it "regard lines starting with '%' as '<% ... %>' and spaces around '<%- -%>' when trim_mode is '%-'" do expected = "\n%%\n" input = <<'END' %%% END if RUBY_VERSION >= '2.6' ERB.new(input, trim_mode: '%-').result.should == expected else ERB.new(input, nil, '%-').result.should == expected end end it "changes '_erbout' variable name in the produced source" do input = @eruby_str if RUBY_VERSION >= '2.6' match_erbout = ERB.new(input, trim_mode: nil).src match_buf = ERB.new(input, trim_mode: nil, eoutvar: 'buf').src else match_erbout = ERB.new(input, nil, nil).src match_buf = ERB.new(input, nil, nil, 'buf').src end match_erbout.gsub("_erbout", "buf").should == match_buf end it "ignores '<%# ... %>'" do input = <<'END' <%# for item in list %> <%#= item %> <%# end %> END ERB.new(input).result.should == "\n\n\n" if RUBY_VERSION >= '2.6' ERB.new(input, trim_mode: '<>').result.should == "\n" else ERB.new(input, nil, '<>').result.should == "\n" end end it "forget local variables defined previous one" do ERB.new(@eruby_str).result lambda{ ERB.new("<%= list %>").result }.should raise_error(NameError) end end