Froze rails gems
[depot.git] / vendor / rails / actionpack / test / controller / view_paths_test.rb
1 require 'abstract_unit'
2
3 class ViewLoadPathsTest < Test::Unit::TestCase
4 class TestController < ActionController::Base
5 def self.controller_path() "test" end
6 def rescue_action(e) raise end
7
8 before_filter :add_view_path, :only => :hello_world_at_request_time
9
10 def hello_world() end
11 def hello_world_at_request_time() render(:action => 'hello_world') end
12
13 private
14 def add_view_path
15 prepend_view_path "#{FIXTURE_LOAD_PATH}/override"
16 end
17 end
18
19 class Test::SubController < ActionController::Base
20 layout 'test/sub'
21 def hello_world; render(:template => 'test/hello_world'); end
22 end
23
24 def setup
25 TestController.view_paths = nil
26
27 @request = ActionController::TestRequest.new
28 @response = ActionController::TestResponse.new
29
30 @controller = TestController.new
31 # Following is needed in order to setup @controller.template object properly
32 @controller.send :initialize_template_class, @response
33 @controller.send :assign_shortcuts, @request, @response
34
35 # Track the last warning.
36 @old_behavior = ActiveSupport::Deprecation.behavior
37 @last_message = nil
38 ActiveSupport::Deprecation.behavior = Proc.new { |message, callback| @last_message = message }
39 end
40
41 def teardown
42 ActiveSupport::Deprecation.behavior = @old_behavior
43 end
44
45 def test_template_load_path_was_set_correctly
46 assert_equal [FIXTURE_LOAD_PATH], @controller.view_paths
47 end
48
49 def test_controller_appends_view_path_correctly
50 @controller.append_view_path 'foo'
51 assert_equal [FIXTURE_LOAD_PATH, 'foo'], @controller.view_paths
52
53 @controller.append_view_path(%w(bar baz))
54 assert_equal [FIXTURE_LOAD_PATH, 'foo', 'bar', 'baz'], @controller.view_paths
55
56 @controller.append_view_path(FIXTURE_LOAD_PATH)
57 assert_equal [FIXTURE_LOAD_PATH, 'foo', 'bar', 'baz', FIXTURE_LOAD_PATH], @controller.view_paths
58 end
59
60 def test_controller_prepends_view_path_correctly
61 @controller.prepend_view_path 'baz'
62 assert_equal ['baz', FIXTURE_LOAD_PATH], @controller.view_paths
63
64 @controller.prepend_view_path(%w(foo bar))
65 assert_equal ['foo', 'bar', 'baz', FIXTURE_LOAD_PATH], @controller.view_paths
66
67 @controller.prepend_view_path(FIXTURE_LOAD_PATH)
68 assert_equal [FIXTURE_LOAD_PATH, 'foo', 'bar', 'baz', FIXTURE_LOAD_PATH], @controller.view_paths
69 end
70
71 def test_template_appends_view_path_correctly
72 @controller.instance_variable_set :@template, ActionView::Base.new(TestController.view_paths, {}, @controller)
73 class_view_paths = TestController.view_paths
74
75 @controller.append_view_path 'foo'
76 assert_equal [FIXTURE_LOAD_PATH, 'foo'], @controller.view_paths
77
78 @controller.append_view_path(%w(bar baz))
79 assert_equal [FIXTURE_LOAD_PATH, 'foo', 'bar', 'baz'], @controller.view_paths
80 assert_equal class_view_paths, TestController.view_paths
81 end
82
83 def test_template_prepends_view_path_correctly
84 @controller.instance_variable_set :@template, ActionView::Base.new(TestController.view_paths, {}, @controller)
85 class_view_paths = TestController.view_paths
86
87 @controller.prepend_view_path 'baz'
88 assert_equal ['baz', FIXTURE_LOAD_PATH], @controller.view_paths
89
90 @controller.prepend_view_path(%w(foo bar))
91 assert_equal ['foo', 'bar', 'baz', FIXTURE_LOAD_PATH], @controller.view_paths
92 assert_equal class_view_paths, TestController.view_paths
93 end
94
95 def test_view_paths
96 get :hello_world
97 assert_response :success
98 assert_equal "Hello world!", @response.body
99 end
100
101 def test_view_paths_override
102 TestController.prepend_view_path "#{FIXTURE_LOAD_PATH}/override"
103 get :hello_world
104 assert_response :success
105 assert_equal "Hello overridden world!", @response.body
106 end
107
108 def test_view_paths_override_for_layouts_in_controllers_with_a_module
109 @controller = Test::SubController.new
110 Test::SubController.view_paths = [ "#{FIXTURE_LOAD_PATH}/override", FIXTURE_LOAD_PATH, "#{FIXTURE_LOAD_PATH}/override2" ]
111 get :hello_world
112 assert_response :success
113 assert_equal "layout: Hello overridden world!", @response.body
114 end
115
116 def test_view_paths_override_at_request_time
117 get :hello_world_at_request_time
118 assert_response :success
119 assert_equal "Hello overridden world!", @response.body
120 end
121
122 def test_inheritance
123 original_load_paths = ActionController::Base.view_paths
124
125 self.class.class_eval %{
126 class A < ActionController::Base; end
127 class B < A; end
128 class C < ActionController::Base; end
129 }
130
131 A.view_paths = ['a/path']
132
133 assert_equal ['a/path'], A.view_paths
134 assert_equal A.view_paths, B.view_paths
135 assert_equal original_load_paths, C.view_paths
136
137 C.view_paths = []
138 assert_nothing_raised { C.view_paths << 'c/path' }
139 assert_equal ['c/path'], C.view_paths
140 end
141 end