require '../test/helper.rb'
require 'benchmark'

str_template = <<-EOF
<%
i = 1
%>
<table>
    <tr><th>Name</th><th>Email</th></tr>
    <% for user in users %>
        <tr>
            <td><%=i%>: <%= user.name %></td><td><%= user.email %></td>
        </tr>
        <% i += 1 %>
        <% end %>
</table>
EOF


class User
  
  attr_accessor :name
  attr_accessor :email
  
  sandboxed_methods :name, :email
  
  def initialize()
    @name = 'xxxxx'
    @email = 'yyyyy'    
  end
  
  

end

users = []
for i in 0...100
  users << User.new
end





erb_compiled_template = SandboxedErb::Template.new.compile_erb_template(str_template)


sandbox_compiled_template = SandboxedErb::Template.new

#$DEBUG=true
if !sandbox_compiled_template.compile(str_template)
  puts sandbox_compiled_template.get_error
  exit
end

#$DEBUG=false


erb_result = eval(erb_compiled_template)

sb_result = sandbox_compiled_template.run(nil, {:users=>users})


if sb_result.nil?
  puts sandbox_compiled_template.get_error
  exit
end
      
if erb_result != sb_result
  puts erb_result
  puts sb_result
end

Benchmark.bmbm do |x|
  x.report("eval template") { 100.times do eval(erb_compiled_template); end }
  x.report("sandboxed template")  { 100.times do sandbox_compiled_template.run(nil, {:users=>users}); end }
end