#!/usr/bin/env ruby require 'rubygems' require 'active_support' require 'action_controller' require 'action_view' require 'test/unit' require File.dirname(__FILE__) + '/../../lib/haml' require 'haml/template' class HelperTest < Test::Unit::TestCase include Haml::Helpers def setup @base = ActionView::Base.new @base.controller = ActionController::Base.new end def render(text, options = {}) if options == :action_view @base.render :inline => text, :type => :haml else scope = options.delete :scope_object Haml::Engine.new(text, options).to_html(scope ? scope : Object.new) end end def test_flatten assert_equal(flatten("FooBar"), "FooBar") assert_equal(flatten("Foo\rBar"), "FooBar") assert_equal(flatten("Foo\nBar"), "Foo Bar") assert_equal(flatten("Hello\nWorld!\nYOU ARE \rFLAT?\n\rOMGZ!"), "Hello World! YOU ARE FLAT? OMGZ!") end def test_list_of_should_render_correctly assert_equal("
  • 1
  • \n
  • 2
  • \n", render("= list_of([1, 2]) do |i|\n = i")) assert_equal("
  • [1]
  • \n", render("= list_of([[1]]) do |i|\n = i.inspect")) assert_equal("
  • \n

    Fee

    \n

    A word!

    \n
  • \n
  • \n

    Fi

    \n

    A word!

    \n
  • \n
  • \n

    Fo

    \n

    A word!

    \n
  • \n
  • \n

    Fum

    \n

    A word!

    \n
  • \n", render("= list_of(['Fee', 'Fi', 'Fo', 'Fum']) do |title|\n %h1= title\n %p A word!")) end def test_buffer_access assert(render("= buffer") =~ /#/) assert_equal(render("= (buffer == _hamlout)"), "true\n") end def test_tabs assert_equal("foo\n bar\nbaz\n", render("foo\n- tab_up\nbar\n- tab_down\nbaz")) assert_equal("

    tabbed

    \n", render("- buffer.tabulation=5\n%p tabbed")) end def test_helpers_dont_leak # Haml helpers shouldn't be accessible from ERB render("foo") proper_behavior = false begin ActionView::Base.new.render(:inline => "<%= flatten('Foo\\nBar') %>") rescue NoMethodError proper_behavior = true end assert(proper_behavior) begin ActionView::Base.new.render(:inline => "<%= concat('foo') %>") rescue ArgumentError, NameError proper_behavior = true end assert(proper_behavior) end def test_action_view_included assert(Haml::Helpers.action_view?) end def test_form_tag # This is usually provided by ActionController::Base. def @base.protect_against_forgery?; false; end result = render("- form_tag 'foo' do\n %p bar\n %strong baz", :action_view) should_be = "
    \n

    bar

    \n baz\n
    \n" assert_equal(should_be, result) end def test_text_area_tag assert_equal("\n", render('= text_area_tag "body", "Foo\nBar\n Baz\n Boom"', :action_view)) end def test_capture_haml assert_equal("\"

    13

    \\n\"\n", render("- foo = capture_haml(13) do |a|\n %p= a\n= foo.dump")) end def test_is_haml assert(!ActionView::Base.new.is_haml?) assert_equal("true\n", render("= is_haml?")) assert_equal("true\n", render("= is_haml?", :action_view)) assert_equal("false", @base.render(:inline => '<%= is_haml? %>')) assert_equal("false\n", render("= render :inline => '<%= is_haml? %>'", :action_view)) end def test_page_class controller = Struct.new(:controller_name, :action_name).new('troller', 'tion') scope = Struct.new(:controller).new(controller) result = render("%div{:class => page_class} MyDiv", :scope_object => scope) expected = "
    MyDiv
    \n" assert_equal expected, result end def test_indented_capture assert_equal(" \n Foo\n ", @base.render(:inline => " <% res = capture do %>\n Foo\n <% end %><%= res %>")) end def test_capture_deals_properly_with_collections Haml::Helpers.module_eval do def trc(collection, &block) collection.each do |record| puts capture_haml(record, &block) end end end assert_equal("1\n\n2\n\n3\n\n", render("- trc([1, 2, 3]) do |i|\n = i.inspect")) end def test_find_and_preserve_with_block assert_equal("
      Foo
      Bar
    
    \nFoo\nBar\n", render("= find_and_preserve do\n %pre\n Foo\n Bar\n Foo\n Bar")) end def test_preserve_with_block assert_equal("
      Foo
      Bar
    
    Foo Bar \n", render("= preserve do\n %pre\n Foo\n Bar\n Foo\n Bar")) end def test_init_haml_helpers context = Object.new class << context include Haml::Helpers end context.init_haml_helpers result = context.capture_haml do context.haml_tag :p, :attr => "val" do context.puts "Blah" end end assert_equal("

    \n Blah\n

    \n", result) end end