aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/template/template_finder_test.rb
blob: 3d6baff5fb6a924ef5d43d2b7fbc3e02996acd38 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
require 'abstract_unit'

class TemplateFinderTest < Test::Unit::TestCase

  LOAD_PATH_ROOT = File.join(File.dirname(__FILE__), '..', 'fixtures')

  def setup
    ActionView::TemplateFinder.process_view_paths(LOAD_PATH_ROOT)
    ActionView::Template::register_template_handler :mab, Class.new(ActionView::TemplateHandler)
    @template = ActionView::Base.new
    @finder = ActionView::TemplateFinder.new(@template, LOAD_PATH_ROOT)
  end

  def test_should_raise_exception_for_unprocessed_view_path
    assert_raises ActionView::TemplateFinder::InvalidViewPath do
      ActionView::TemplateFinder.new(@template, File.dirname(__FILE__))
    end
  end

  def test_should_cache_file_extension_properly
    assert_equal ["builder", "erb", "rhtml", "rjs", "rxml", "mab"].sort,
                 ActionView::TemplateFinder.file_extension_cache[LOAD_PATH_ROOT].values.flatten.uniq.sort

    assert_equal (Dir.glob("#{LOAD_PATH_ROOT}/**/*/*.{erb,rjs,rhtml,builder,rxml,mab}") |
                  Dir.glob("#{LOAD_PATH_ROOT}/**.{erb,rjs,rhtml,builder,rxml,mab}")).size,
                 ActionView::TemplateFinder.file_extension_cache[LOAD_PATH_ROOT].keys.size
  end

  def test_should_cache_dir_content_properly
    assert ActionView::TemplateFinder.processed_view_paths[LOAD_PATH_ROOT]
    assert_equal (Dir.glob("#{LOAD_PATH_ROOT}/**/*/**") | Dir.glob("#{LOAD_PATH_ROOT}/**")).find_all {|f| !File.directory?(f) }.size,
               ActionView::TemplateFinder.processed_view_paths[LOAD_PATH_ROOT].size
  end

  def test_find_template_extension_from_first_render
    assert_nil @finder.send(:find_template_extension_from_first_render)

    {
      nil => nil,
      '' => nil,
      'foo' => nil,
      '/foo' => nil,
      'foo.rb' => 'rb',
      'foo.bar.rb' => 'bar.rb',
      'baz/foo.rb' => 'rb',
      'baz/foo.bar.rb' => 'bar.rb',
      'baz/foo.o/foo.rb' => 'rb',
      'baz/foo.o/foo.bar.rb' => 'bar.rb',
    }.each do |input,expectation|
      @template.instance_variable_set('@first_render', input)
      assert_equal expectation, @finder.send(:find_template_extension_from_first_render)
    end
  end

  def test_should_report_file_exists_correctly
    assert_nil @finder.send(:find_template_extension_from_first_render)
    assert_equal false, @finder.send(:file_exists?, 'test.rhtml')
    assert_equal false, @finder.send(:file_exists?, 'test.rb')

    @template.instance_variable_set('@first_render', 'foo.rb')

    assert_equal 'rb', @finder.send(:find_template_extension_from_first_render)
    assert_equal false, @finder.send(:file_exists?, 'baz')
    assert_equal false, @finder.send(:file_exists?, 'baz.rb')
  end
  
  uses_mocha 'Template finder tests' do
    def test_should_update_extension_cache_when_template_handler_is_registered
      ActionView::TemplateFinder.expects(:update_extension_cache_for).with("funky")
      ActionView::Template::register_template_handler :funky, Class.new(ActionView::TemplateHandler)
    end
  end
end