require_relative "../spec_helper"

begin
  require 'tilt'
  require 'tilt/string'
  require 'tilt/rdoc'
  require_relative '../../lib/roda/plugins/render'
rescue LoadError
  warn "tilt not installed, skipping render_each plugin test"  
else
describe "render_each plugin" do 
  [true, false].each do |cache|
    it "calls render with each argument, returning joined string with all results in cache: #{cache} mode" do
      app(:bare) do
        plugin :render, :views=>'spec/views', :engine=>'str', :cache=>cache
        plugin :render_each

        o = Object.new
        def o.to_s; 'each' end

        route do |r|
          r.root do
            render_each([1,2,3], :each)
          end

          r.is 'a' do
            render_each([1,2,3], :each, :local=>:foo, :bar=>4)
          end

          r.is 'b' do
            render_each([1,2,3], :each, :local=>nil)
          end

          r.is 'c' do
            render_each([1,2,3], :each, :locals=>{:foo=>4})
          end

          r.is 'd' do
            render_each([1,2,3], {:template=>:each}, :local=>:each)
          end

          r.is 'e' do
            render_each([1,2,3], o)
          end
        end
      end

      3.times do
        body.must_equal "r-1-\nr-2-\nr-3-\n"
        body("/a").must_equal "r--1\nr--2\nr--3\n"
        body("/b").must_equal "r--\nr--\nr--\n"
        body("/c").must_equal "r-1-4\nr-2-4\nr-3-4\n"
        body("/d").must_equal "r-1-\nr-2-\nr-3-\n"
        body("/e").must_equal "r-1-\nr-2-\nr-3-\n"
      end
    end

    if Roda::RodaPlugins::Render::COMPILED_METHOD_SUPPORT
      it "calls render with each argument, handling template engines that don't support compilation in cache: #{cache} mode" do
        app(:bare) do
          plugin :render, :views=>'spec/views', :engine=>'rdoc', :cache=>cache
          plugin :render_each

          route do |r|
            r.root do
              render_each([1], :a)
            end
            r.is 'a' do
              render_each([1], :a, :local=>:b)
            end
          end
        end

        3.times do
          body.strip.must_equal "<p># a # * b</p>"
          body('/a').strip.must_equal "<p># a # * b</p>"
        end
      end
    end
  end
end
end