1 require 'abstract_unit'
3 class AssetTagHelperTest
< ActionView
::TestCase
4 tests ActionView
::Helpers::AssetTagHelper
8 ActionView
::Helpers::AssetTagHelper.send(
11 File
.dirname(__FILE__
) + "/../fixtures/public/javascripts"
14 ActionView
::Helpers::AssetTagHelper.send(
17 File
.dirname(__FILE__
) + "/../fixtures/public/stylesheets"
20 ActionView
::Helpers::AssetTagHelper.send(
23 File
.dirname(__FILE__
) + "/../fixtures/public"
27 @controller = Class
.new
do
28 attr_accessor
:request
29 def url_for(*args
) "http://www.example.com" end
32 @request = Class
.new
do
33 def protocol() 'http://' end
35 def host_with_port() 'localhost' end
38 @controller.request
= @request
40 ActionView
::Helpers::AssetTagHelper::reset_javascript_include_default
44 ActionController
::Base.perform_caching
= false
45 ActionController
::Base.asset_host
= nil
46 ENV.delete('RAILS_ASSET_ID')
49 AutoDiscoveryToTag
= {
50 %(auto_discovery_link_tag) => %(<link href="http://www.example.com" rel="alternate" title="RSS" type="application/rss+xml" />),
51 %(auto_discovery_link_tag(:rss)) => %(<link href="http://www.example.com" rel="alternate" title="RSS" type="application/rss+xml" />),
52 %(auto_discovery_link_tag(:atom)) => %(<link href="http://www.example.com" rel="alternate" title="ATOM" type="application/atom+xml" />),
53 %(auto_discovery_link_tag(:xml)) => %(<link href="http://www.example.com" rel="alternate" title="XML" type="application/xml" />),
54 %(auto_discovery_link_tag(:rss, :action => "feed")) => %(<link href="http://www.example.com" rel="alternate" title="RSS" type="application/rss+xml" />),
55 %(auto_discovery_link_tag(:rss, "http://localhost/feed")) => %(<link href="http://localhost/feed" rel="alternate" title="RSS" type="application/rss+xml" />),
56 %(auto_discovery_link_tag(:rss, {:action => "feed"}, {:title => "My RSS"})) => %(<link href="http://www.example.com" rel="alternate" title="My RSS" type="application/rss+xml" />),
57 %(auto_discovery_link_tag(:rss, {}, {:title => "My RSS"})) => %(<link href="http://www.example.com" rel="alternate" title="My RSS" type="application/rss+xml" />),
58 %(auto_discovery_link_tag(nil, {}, {:type => "text/html"})) => %(<link href="http://www.example.com" rel="alternate" title="" type="text/html" />),
59 %(auto_discovery_link_tag(nil, {}, {:title => "No stream.. really", :type => "text/html"})) => %(<link href="http://www.example.com" rel="alternate" title="No stream.. really" type="text/html" />),
60 %(auto_discovery_link_tag(:rss, {}, {:title => "My RSS", :type => "text/html"})) => %(<link href="http://www.example.com" rel="alternate" title="My RSS" type="text/html" />),
61 %(auto_discovery_link_tag(:atom, {}, {:rel => "Not so alternate"})) => %(<link href="http://www.example.com" rel="Not so alternate" title="ATOM" type="application/atom+xml" />),
64 JavascriptPathToTag = {
65 %(javascript_path("xmlhr")) => %(/javascripts/xmlhr.js),
66 %(javascript_path("super/xmlhr")) => %(/javascripts/super/xmlhr.js),
67 %(javascript_path("/super/xmlhr.js")) => %(/super/xmlhr.js)
70 PathToJavascriptToTag = {
71 %(path_to_javascript("xmlhr")) => %(/javascripts/xmlhr.js),
72 %(path_to_javascript("super/xmlhr")) => %(/javascripts/super/xmlhr.js),
73 %(path_to_javascript("/super/xmlhr.js")) => %(/super/xmlhr.js)
76 JavascriptIncludeToTag = {
77 %(javascript_include_tag("xmlhr")) => %(<script src="/javascripts/xmlhr.js" type="text/javascript"></script>),
78 %(javascript_include_tag("xmlhr.js")) => %(<script src="/javascripts/xmlhr.js" type="text/javascript"></script>),
79 %(javascript_include_tag("xmlhr", :lang => "vbscript")) => %(<script lang="vbscript" src="/javascripts/xmlhr.js" type="text/javascript"></script>),
80 %(javascript_include_tag("common.javascript", "/elsewhere/cools")) => %(<script src="/javascripts/common.javascript" type="text/javascript"></script>\n<script src="/elsewhere/cools.js" type="text/javascript"></script>),
81 %(javascript_include_tag(:defaults)) => %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>),
82 %(javascript_include_tag(:all)) => %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>\n<script src="/javascripts/bank.js" type="text/javascript"></script>\n<script src="/javascripts/robber.js" type="text/javascript"></script>\n<script src="/javascripts/version.1.0.js" type="text/javascript"></script>),
83 %(javascript_include_tag(:all, :recursive => true)) => %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>\n<script src="/javascripts/bank.js" type="text/javascript"></script>\n<script src="/javascripts/robber.js" type="text/javascript"></script>\n<script src="/javascripts/subdir/subdir.js" type="text/javascript"></script>\n<script src="/javascripts/version.1.0.js" type="text/javascript"></script>),
84 %(javascript_include_tag(:defaults, "test")) => %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/test.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>),
85 %(javascript_include_tag("test", :defaults)) => %(<script src="/javascripts/test.js" type="text/javascript"></script>\n<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>)
89 %(stylesheet_path("style")) => %(/stylesheets/style.css),
90 %(stylesheet_path("style.css")) => %(/stylesheets/style.css),
91 %(stylesheet_path('dir/file')) => %(/stylesheets/dir/file.css),
92 %(stylesheet_path('/dir/file.rcss')) => %(/dir/file.rcss)
96 %(path_to_stylesheet("style")) => %(/stylesheets/style.css),
97 %(path_to_stylesheet("style.css")) => %(/stylesheets/style.css),
98 %(path_to_stylesheet('dir/file')) => %(/stylesheets/dir/file.css),
99 %(path_to_stylesheet('/dir/file.rcss')) => %(/dir/file.rcss)
103 %(stylesheet_link_tag("style")) => %(<link href="/stylesheets/style.css" media="screen" rel="stylesheet" type="text/css" />),
104 %(stylesheet_link_tag("style.css")) => %(<link href="/stylesheets/style.css" media="screen" rel="stylesheet" type="text/css" />),
105 %(stylesheet_link_tag("/dir/file")) => %(<link href="/dir/file.css" media="screen" rel="stylesheet" type="text/css" />),
106 %(stylesheet_link_tag("dir/file")) => %(<link href="/stylesheets/dir/file.css" media="screen" rel="stylesheet" type="text/css" />),
107 %(stylesheet_link_tag("style", :media => "all")) => %(<link href="/stylesheets/style.css" media="all" rel="stylesheet" type="text/css" />),
108 %(stylesheet_link_tag(:all)) => %(<link href="/stylesheets/bank.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/robber.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/version.1.0.css" media="screen" rel="stylesheet" type="text/css" />),
109 %(stylesheet_link_tag(:all, :recursive => true)) => %(<link href="/stylesheets/bank.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/robber.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/subdir/subdir.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/version.1.0.css" media="screen" rel="stylesheet" type="text/css" />),
110 %(stylesheet_link_tag(:all, :media => "all")) => %(<link href="/stylesheets/bank.css" media="all" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/robber.css" media="all" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/version.1.0.css" media="all" rel="stylesheet" type="text/css" />),
111 %(stylesheet_link_tag("random.styles", "/css/stylish")) => %(<link href="/stylesheets/random.styles" media="screen" rel="stylesheet" type="text/css" />\n<link href="/css/stylish.css" media="screen" rel="stylesheet" type="text/css" />),
112 %(stylesheet_link_tag("http://www.example.com/styles/style")) => %(<link href="http://www.example.com/styles/style.css" media="screen" rel="stylesheet" type="text/css" />)
116 %(image_path("xml")) => %(/images/xml),
117 %(image_path("xml.png")) => %(/images/xml.png),
118 %(image_path("dir/xml.png")) => %(/images/dir/xml.png),
119 %(image_path("/dir/xml.png")) => %(/dir/xml.png)
123 %(path_to_image("xml")) => %(/images/xml),
124 %(path_to_image("xml.png")) => %(/images/xml.png),
125 %(path_to_image("dir/xml.png")) => %(/images/dir/xml.png),
126 %(path_to_image("/dir/xml.png")) => %(/dir/xml.png)
130 %(image_tag("xml.png")) => %(<img alt="Xml" src="/images/xml.png" />),
131 %(image_tag("..jpg")) => %(<img alt="" src="/images/..jpg" />),
132 %(image_tag("rss.gif", :alt => "rss syndication")) => %(<img alt="rss syndication" src="/images/rss.gif" />),
133 %(image_tag("gold.png", :size => "45x70")) => %(<img alt="Gold" height="70" src="/images/gold.png" width="45" />),
134 %(image_tag("gold.png", "size" => "45x70")) => %(<img alt="Gold" height="70" src="/images/gold.png" width="45" />),
135 %(image_tag("error.png", "size" => "45")) => %(<img alt="Error" src="/images/error.png" />),
136 %(image_tag("error.png", "size" => "45 x 70")) => %(<img alt="Error" src="/images/error.png" />),
137 %(image_tag("error.png", "size" => "x")) => %(<img alt="Error" src="/images/error.png" />),
138 %(image_tag("http://www.rubyonrails.com/images/rails.png")) => %(<img alt="Rails" src="http://www.rubyonrails.com/images/rails.png" />),
139 %(image_tag("http://www.rubyonrails.com/images/rails.png")) => %(<img alt="Rails" src="http://www.rubyonrails.com/images/rails.png" />),
140 %(image_tag("mouse.png", :mouseover => "/images/mouse_over.png")) => %(<img alt="Mouse" onmouseover="this.src='/images/mouse_over.png'" onmouseout="this.src='/images/mouse.png'" src="/images/mouse.png" />),
141 %(image_tag("mouse.png", :mouseover => image_path("mouse_over.png"))) => %(<img alt="Mouse" onmouseover="this.src='/images/mouse_over.png'" onmouseout="this.src='/images/mouse.png'" src="/images/mouse.png" />)
145 def test_auto_discovery_link_tag
146 AutoDiscoveryToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
149 def test_javascript_path
150 JavascriptPathToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
153 def test_path_to_javascript_alias_for_javascript_path
154 PathToJavascriptToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
157 def test_javascript_include_tag_with_blank_asset_id
158 ENV["RAILS_ASSET_ID"] = ""
159 JavascriptIncludeToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
162 def test_javascript_include_tag_with_given_asset_id
163 ENV["RAILS_ASSET_ID"] = "1"
164 assert_dom_equal(%(<script src="/javascripts/prototype.js?1" type="text/javascript"></script>\n<script src="/javascripts/effects.js?1" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js?1" type="text/javascript"></script>\n<script src="/javascripts/controls.js?1" type="text/javascript"></script>\n<script src="/javascripts/application.js?1" type="text/javascript"></script>), javascript_include_tag(:defaults))
167 def test_register_javascript_include_default
168 ENV["RAILS_ASSET_ID"] = ""
169 ActionView::Helpers::AssetTagHelper::register_javascript_include_default 'slider'
170 assert_dom_equal %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/slider.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>), javascript_include_tag(:defaults)
173 def test_register_javascript_include_default_mixed_defaults
174 ENV["RAILS_ASSET_ID"] = ""
175 ActionView::Helpers::AssetTagHelper::register_javascript_include_default 'slider'
176 ActionView::Helpers::AssetTagHelper::register_javascript_include_default 'lib1', '/elsewhere/blub/lib2'
177 assert_dom_equal %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/slider.js" type="text/javascript"></script>\n<script src="/javascripts/lib1.js" type="text/javascript"></script>\n<script src="/elsewhere/blub/lib2.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>), javascript_include_tag(:defaults)
180 def test_custom_javascript_expansions
181 ActionView::Helpers::AssetTagHelper::register_javascript_expansion :monkey => ["head", "body", "tail"]
182 assert_dom_equal %(<script src="/javascripts/first.js" type="text/javascript"></script>\n<script src="/javascripts/head.js" type="text/javascript"></script>\n<script src="/javascripts/body.js" type="text/javascript"></script>\n<script src="/javascripts/tail.js" type="text/javascript"></script>\n<script src="/javascripts/last.js" type="text/javascript"></script>), javascript_include_tag('first', :monkey, 'last')
185 def test_custom_javascript_expansions_and_defaults_puts_application_js_at_the_end
186 ENV["RAILS_ASSET_ID"] = ""
187 ActionView::Helpers::AssetTagHelper::register_javascript_expansion :monkey => ["head", "body", "tail"]
188 assert_dom_equal %(<script src="/javascripts/first.js" type="text/javascript"></script>\n<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/head.js" type="text/javascript"></script>\n<script src="/javascripts/body.js" type="text/javascript"></script>\n<script src="/javascripts/tail.js" type="text/javascript"></script>\n<script src="/javascripts/last.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>), javascript_include_tag('first', :defaults, :monkey, 'last')
191 def test_custom_javascript_expansions_with_undefined_symbol
192 ActionView::Helpers::AssetTagHelper::register_javascript_expansion :monkey => nil
193 assert_raise(ArgumentError) { javascript_include_tag('first', :monkey, 'last') }
196 def test_stylesheet_path
197 StylePathToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
200 def test_path_to_stylesheet_alias_for_stylesheet_path
201 PathToStyleToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
204 def test_stylesheet_link_tag
205 ENV["RAILS_ASSET_ID"] = ""
206 StyleLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
209 def test_custom_stylesheet_expansions
210 ActionView::Helpers::AssetTagHelper::register_stylesheet_expansion :monkey => ["head", "body", "tail"]
211 assert_dom_equal %(<link href="/stylesheets/first.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/head.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/body.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/tail.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/last.css" media="screen" rel="stylesheet" type="text/css" />), stylesheet_link_tag('first', :monkey, 'last')
214 def test_custom_stylesheet_expansions_with_undefined_symbol
215 ActionView::Helpers::AssetTagHelper::register_stylesheet_expansion :monkey => nil
216 assert_raise(ArgumentError) { stylesheet_link_tag('first', :monkey, 'last') }
220 ImagePathToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
223 def test_path_to_image_alias_for_image_path
224 PathToImageToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
228 ImageLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
231 def test_image_tag_windows_behaviour
232 old_asset_id, ENV["RAILS_ASSET_ID"] = ENV["RAILS_ASSET_ID"], "1"
233 # This simulates the behaviour of File#exist? on windows when testing a file ending in "."
234 # If the file "rails.png" exists, windows will return true when asked if "rails.png." exists (notice trailing ".")
235 # OS X, linux etc will return false in this case.
236 File.stubs(:exist?).with('template/../fixtures/public/images/rails.png.').returns(true)
237 assert_equal '<img alt="Rails" src="/images/rails.png?1" />', image_tag('rails.png')
240 ENV["RAILS_ASSET_ID"] = old_asset_id
242 ENV.delete("RAILS_ASSET_ID")
246 def test_timebased_asset_id
247 expected_time = File.stat(File.expand_path(File.dirname(__FILE__) + "/../fixtures/public/images/rails.png")).mtime.to_i.to_s
248 assert_equal %(<img alt="Rails" src="/images/rails.png?#{expected_time}" />), image_tag("rails.png")
251 def test_timebased_asset_id_with_relative_url_root
252 ActionController::Base.relative_url_root = "/collaboration/hieraki"
253 expected_time = File.stat(File.expand_path(File.dirname(__FILE__) + "/../fixtures/public/images/rails.png")).mtime.to_i.to_s
254 assert_equal %(<img alt="Rails" src="#{ActionController::Base.relative_url_root}/images/rails.png?#{expected_time}" />), image_tag("rails.png")
256 ActionController::Base.relative_url_root = ""
259 def test_should_skip_asset_id_on_complete_url
260 assert_equal %(<img alt="Rails" src="http://www.example.com/rails.png" />), image_tag("http://www.example.com/rails.png")
263 def test_should_use_preset_asset_id
264 ENV["RAILS_ASSET_ID"] = "4500"
265 assert_equal %(<img alt="Rails" src="/images/rails.png?4500" />), image_tag("rails.png")
268 def test_preset_empty_asset_id
269 ENV["RAILS_ASSET_ID"] = ""
270 assert_equal %(<img alt="Rails" src="/images/rails.png" />), image_tag("rails.png")
273 def test_should_not_modify_source_string
274 source = '/images/rails.png'
277 assert_equal copy, source
280 def test_caching_image_path_with_caching_and_proc_asset_host_using_request
281 ENV['RAILS_ASSET_ID'] = ''
282 ActionController::Base.asset_host = Proc.new do |source, request|
284 "#{request.protocol}#{request.host_with_port}"
286 "#{request.protocol}assets#{source.length}.example.com"
290 ActionController::Base.perform_caching = true
293 @controller.request.stubs(:ssl?).returns(false)
294 assert_equal "http://assets15.example.com/images/xml.png", image_path("xml.png")
296 @controller.request.stubs(:ssl?).returns(true)
297 assert_equal "http://localhost/images/xml.png", image_path("xml.png")
300 def test_caching_javascript_include_tag_when_caching_on
301 ENV["RAILS_ASSET_ID"] = ""
302 ActionController::Base.asset_host = 'http://a0.example.com'
303 ActionController::Base.perform_caching = true
306 %(<script src="http://a0.example.com/javascripts/all.js" type="text/javascript"></script>),
307 javascript_include_tag(:all, :cache => true)
310 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'all.js'))
313 %(<script src="http://a0.example.com/javascripts/money.js" type="text/javascript"></script>),
314 javascript_include_tag(:all, :cache => "money")
317 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'money.js'))
320 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'all.js'))
321 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'money.js'))
324 def test_caching_javascript_include_tag_when_caching_on_with_proc_asset_host
325 ENV['RAILS_ASSET_ID'] = ''
326 ActionController::Base.asset_host = Proc.new { |source| "http://a#{source.length}.example.com" }
327 ActionController::Base.perform_caching = true
329 assert_equal '/javascripts/scripts.js'.length, 23
331 %(<script src="http://a23.example.com/javascripts/scripts.js" type="text/javascript"></script>),
332 javascript_include_tag(:all, :cache => 'scripts')
335 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'scripts.js'))
338 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'scripts.js'))
341 def test_caching_javascript_include_tag_when_caching_on_with_2_argument_proc_asset_host
342 ENV['RAILS_ASSET_ID'] = ''
343 ActionController::Base.asset_host = Proc.new { |source, request|
345 "#{request.protocol}#{request.host_with_port}"
347 "#{request.protocol}assets#{source.length}.example.com"
350 ActionController::Base.perform_caching = true
352 assert_equal '/javascripts/vanilla.js'.length, 23
354 %(<script src="http://assets23.example.com/javascripts/vanilla.js" type="text/javascript"></script>),
355 javascript_include_tag(:all, :cache => 'vanilla')
358 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'vanilla.js'))
360 class << @controller.request
361 def protocol() 'https://' end
365 assert_equal '/javascripts/secure.js'.length, 22
367 %(<script src="https://localhost/javascripts/secure.js" type="text/javascript"></script>),
368 javascript_include_tag(:all, :cache => 'secure')
371 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'secure.js'))
374 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'vanilla.js'))
375 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'secure.js'))
378 def test_caching_javascript_include_tag_when_caching_on_with_2_argument_object_asset_host
379 ENV['RAILS_ASSET_ID'] = ''
380 ActionController::Base.asset_host = Class.new do
381 def call(source, request)
383 "#{request.protocol}#{request.host_with_port}"
385 "#{request.protocol}assets#{source.length}.example.com"
390 ActionController::Base.perform_caching = true
392 assert_equal '/javascripts/vanilla.js'.length, 23
394 %(<script src="http://assets23.example.com/javascripts/vanilla.js" type="text/javascript"></script>),
395 javascript_include_tag(:all, :cache => 'vanilla')
398 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'vanilla.js'))
400 class << @controller.request
401 def protocol() 'https://' end
405 assert_equal '/javascripts/secure.js'.length, 22
407 %(<script src="https://localhost/javascripts/secure.js" type="text/javascript"></script>),
408 javascript_include_tag(:all, :cache => 'secure')
411 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'secure.js'))
414 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'vanilla.js'))
415 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'secure.js'))
418 def test_caching_javascript_include_tag_when_caching_on_and_using_subdirectory
419 ENV["RAILS_ASSET_ID"] = ""
420 ActionController::Base.asset_host = 'http://a%d.example.com'
421 ActionController::Base.perform_caching = true
423 hash = '/javascripts/cache/money.js'.hash % 4
425 %(<script src="http://a#{hash}.example.com/javascripts/cache/money.js" type="text/javascript"></script>),
426 javascript_include_tag(:all, :cache => "cache/money")
429 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'cache', 'money.js'))
431 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'cache', 'money.js'))
434 def test_caching_javascript_include_tag_with_all_and_recursive_puts_defaults_at_the_start_of_the_file
435 ENV["RAILS_ASSET_ID"] = ""
436 ActionController::Base.asset_host = 'http://a0.example.com'
437 ActionController::Base.perform_caching = true
440 %(<script src="http://a0.example.com/javascripts/combined.js" type="text/javascript"></script>),
441 javascript_include_tag(:all, :cache => "combined", :recursive => true)
444 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'combined.js'))
447 %(// prototype js\n\n// effects js\n\n// dragdrop js\n\n// controls js\n\n// application js\n\n// bank js\n\n// robber js\n\n// subdir js\n\n\n// version.1.0 js),
448 IO.read(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'combined.js'))
452 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'combined.js'))
455 def test_caching_javascript_include_tag_with_all_puts_defaults_at_the_start_of_the_file
456 ENV["RAILS_ASSET_ID"] = ""
457 ActionController::Base.asset_host = 'http://a0.example.com'
458 ActionController::Base.perform_caching = true
461 %(<script src="http://a0.example.com/javascripts/combined.js" type="text/javascript"></script>),
462 javascript_include_tag(:all, :cache => "combined")
465 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'combined.js'))
468 %(// prototype js\n\n// effects js\n\n// dragdrop js\n\n// controls js\n\n// application js\n\n// bank js\n\n// robber js\n\n// version.1.0 js),
469 IO.read(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'combined.js'))
473 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'combined.js'))
476 def test_caching_javascript_include_tag_with_relative_url_root
477 ENV["RAILS_ASSET_ID"] = ""
478 ActionController::Base.relative_url_root = "/collaboration/hieraki"
479 ActionController::Base.perform_caching = true
482 %(<script src="/collaboration/hieraki/javascripts/all.js" type="text/javascript"></script>),
483 javascript_include_tag(:all, :cache => true)
486 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'all.js'))
489 %(<script src="/collaboration/hieraki/javascripts/money.js" type="text/javascript"></script>),
490 javascript_include_tag(:all, :cache => "money")
493 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'money.js'))
496 ActionController::Base.relative_url_root = nil
497 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'all.js'))
498 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'money.js'))
501 def test_caching_javascript_include_tag_when_caching_off
502 ENV["RAILS_ASSET_ID"] = ""
503 ActionController::Base.perform_caching = false
506 %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>\n<script src="/javascripts/bank.js" type="text/javascript"></script>\n<script src="/javascripts/robber.js" type="text/javascript"></script>\n<script src="/javascripts/version.1.0.js" type="text/javascript"></script>),
507 javascript_include_tag(:all, :cache => true)
511 %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>\n<script src="/javascripts/bank.js" type="text/javascript"></script>\n<script src="/javascripts/robber.js" type="text/javascript"></script>\n<script src="/javascripts/subdir/subdir.js" type="text/javascript"></script>\n<script src="/javascripts/version.1.0.js" type="text/javascript"></script>),
512 javascript_include_tag(:all, :cache => true, :recursive => true)
515 assert !File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'all.js'))
518 %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>\n<script src="/javascripts/bank.js" type="text/javascript"></script>\n<script src="/javascripts/robber.js" type="text/javascript"></script>\n<script src="/javascripts/version.1.0.js" type="text/javascript"></script>),
519 javascript_include_tag(:all, :cache => "money")
523 %(<script src="/javascripts/prototype.js" type="text/javascript"></script>\n<script src="/javascripts/effects.js" type="text/javascript"></script>\n<script src="/javascripts/dragdrop.js" type="text/javascript"></script>\n<script src="/javascripts/controls.js" type="text/javascript"></script>\n<script src="/javascripts/application.js" type="text/javascript"></script>\n<script src="/javascripts/bank.js" type="text/javascript"></script>\n<script src="/javascripts/robber.js" type="text/javascript"></script>\n<script src="/javascripts/subdir/subdir.js" type="text/javascript"></script>\n<script src="/javascripts/version.1.0.js" type="text/javascript"></script>),
524 javascript_include_tag(:all, :cache => "money", :recursive => true)
527 assert !File.exist?(File.join(ActionView::Helpers::AssetTagHelper::JAVASCRIPTS_DIR, 'money.js'))
530 def test_caching_stylesheet_link_tag_when_caching_on
531 ENV["RAILS_ASSET_ID"] = ""
532 ActionController::Base.asset_host = 'http://a0.example.com'
533 ActionController::Base.perform_caching = true
536 %(<link href="http://a0.example.com/stylesheets/all.css" media="screen" rel="stylesheet" type="text/css" />),
537 stylesheet_link_tag(:all, :cache => true)
540 expected = Dir["#{ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR}/*.css"].map { |p| File.mtime(p) }.max
541 assert_equal expected, File.mtime(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'all.css'))
544 %(<link href="http://a0.example.com/stylesheets/money.css" media="screen" rel="stylesheet" type="text/css" />),
545 stylesheet_link_tag(:all, :cache => "money")
548 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'money.css'))
550 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'all.css'))
551 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'money.css'))
554 def test_caching_stylesheet_link_tag_when_caching_on_with_proc_asset_host
555 ENV["RAILS_ASSET_ID"] = ""
556 ActionController::Base.asset_host = Proc.new { |source| "http://a#{source.length}.example.com" }
557 ActionController::Base.perform_caching = true
559 assert_equal '/stylesheets/styles.css'.length, 23
561 %(<link href="http://a23.example.com/stylesheets/styles.css" media="screen" rel="stylesheet" type="text/css" />),
562 stylesheet_link_tag(:all, :cache => 'styles')
565 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'styles.css'))
568 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'styles.css'))
571 def test_caching_stylesheet_link_tag_with_relative_url_root
572 ENV["RAILS_ASSET_ID"] = ""
573 ActionController::Base.relative_url_root = "/collaboration/hieraki"
574 ActionController::Base.perform_caching = true
577 %(<link href="/collaboration/hieraki/stylesheets/all.css" media="screen" rel="stylesheet" type="text/css" />),
578 stylesheet_link_tag(:all, :cache => true)
581 expected = Dir["#{ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR}/*.css"].map { |p| File.mtime(p) }.max
582 assert_equal expected, File.mtime(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'all.css'))
585 %(<link href="/collaboration/hieraki/stylesheets/money.css" media="screen" rel="stylesheet" type="text/css" />),
586 stylesheet_link_tag(:all, :cache => "money")
589 assert File.exist?(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'money.css'))
591 ActionController::Base.relative_url_root = nil
592 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'all.css'))
593 FileUtils.rm_f(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'money.css'))
596 def test_caching_stylesheet_include_tag_when_caching_off
597 ENV["RAILS_ASSET_ID"] = ""
598 ActionController::Base.perform_caching = false
601 %(<link href="/stylesheets/bank.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/robber.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/version.1.0.css" media="screen" rel="stylesheet" type="text/css" />),
602 stylesheet_link_tag(:all, :cache => true)
606 %(<link href="/stylesheets/bank.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/robber.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/subdir/subdir.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/version.1.0.css" media="screen" rel="stylesheet" type="text/css" />),
607 stylesheet_link_tag(:all, :cache => true, :recursive => true)
610 assert !File.exist?(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'all.css'))
613 %(<link href="/stylesheets/bank.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/robber.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/version.1.0.css" media="screen" rel="stylesheet" type="text/css" />),
614 stylesheet_link_tag(:all, :cache => "money")
618 %(<link href="/stylesheets/bank.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/robber.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/subdir/subdir.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/stylesheets/version.1.0.css" media="screen" rel="stylesheet" type="text/css" />),
619 stylesheet_link_tag(:all, :cache => "money", :recursive => true)
622 assert !File.exist?(File.join(ActionView::Helpers::AssetTagHelper::STYLESHEETS_DIR, 'money.css'))
626 class AssetTagHelperNonVhostTest < ActionView::TestCase
627 tests ActionView::Helpers::AssetTagHelper
630 ActionController::Base.relative_url_root = "/collaboration/hieraki"
632 @controller = Class.new do
633 attr_accessor :request
636 "http://www.example.com/collaboration/hieraki"
640 @request = Class.new do
646 @controller.request = @request
648 ActionView::Helpers::AssetTagHelper::reset_javascript_include_default
652 ActionController::Base.relative_url_root = nil
655 def test_should_compute_proper_path
656 assert_dom_equal(%(<link href="http://www.example.com/collaboration/hieraki" rel="alternate" title="RSS" type="application/rss+xml" />), auto_discovery_link_tag)
657 assert_dom_equal(%(/collaboration/hieraki/javascripts/xmlhr.js), javascript_path("xmlhr"))
658 assert_dom_equal(%(/collaboration/hieraki/stylesheets/style.css), stylesheet_path("style"))
659 assert_dom_equal(%(/collaboration/hieraki/images/xml.png), image_path("xml.png"))
660 assert_dom_equal(%(<img alt="Mouse" onmouseover="this.src='/collaboration/hieraki/images/mouse_over.png'" onmouseout="this.src='/collaboration/hieraki/images/mouse.png'" src="/collaboration/hieraki/images/mouse.png" />), image_tag("mouse.png", :mouseover => "/images/mouse_over.png"))
661 assert_dom_equal(%(<img alt="Mouse2" onmouseover="this.src='/collaboration/hieraki/images/mouse_over2.png'" onmouseout="this.src='/collaboration/hieraki/images/mouse2.png'" src="/collaboration/hieraki/images/mouse2.png" />), image_tag("mouse2.png", :mouseover => image_path("mouse_over2.png")))
664 def test_should_ignore_relative_root_path_on_complete_url
665 assert_dom_equal(%(http://www.example.com/images/xml.png), image_path("http://www.example.com/images/xml.png"))
668 def test_should_compute_proper_path_with_asset_host
669 ActionController::Base.asset_host = "http://assets.example.com"
670 assert_dom_equal(%(<link href="http://www.example.com/collaboration/hieraki" rel="alternate" title="RSS" type="application/rss+xml" />), auto_discovery_link_tag)
671 assert_dom_equal(%(http://assets.example.com/collaboration/hieraki/javascripts/xmlhr.js), javascript_path("xmlhr"))
672 assert_dom_equal(%(http://assets.example.com/collaboration/hieraki/stylesheets/style.css), stylesheet_path("style"))
673 assert_dom_equal(%(http://assets.example.com/collaboration/hieraki/images/xml.png), image_path("xml.png"))
674 assert_dom_equal(%(<img alt="Mouse" onmouseover="this.src='http://assets.example.com/collaboration/hieraki/images/mouse_over.png'" onmouseout="this.src='http://assets.example.com/collaboration/hieraki/images/mouse.png'" src="http://assets.example.com/collaboration/hieraki/images/mouse.png" />), image_tag("mouse.png", :mouseover => "/images/mouse_over.png"))
675 assert_dom_equal(%(<img alt="Mouse2" onmouseover="this.src='http://assets.example.com/collaboration/hieraki/images/mouse_over2.png'" onmouseout="this.src='http://assets.example.com/collaboration/hieraki/images/mouse2.png'" src="http://assets.example.com/collaboration/hieraki/images/mouse2.png" />), image_tag("mouse2.png", :mouseover => image_path("mouse_over2.png")))
677 ActionController::Base.asset_host = ""
680 def test_should_ignore_asset_host_on_complete_url
681 ActionController::Base.asset_host = "http://assets.example.com"
682 assert_dom_equal(%(<link href="http://bar.example.com/stylesheets/style.css" media="screen" rel="stylesheet" type="text/css" />), stylesheet_link_tag("http://bar.example.com/stylesheets/style.css"))
684 ActionController::Base.asset_host = ""
687 def test_should_wildcard_asset_host_between_zero_and_four
688 ActionController::Base.asset_host = 'http://a%d.example.com'
689 assert_match %r(http://a[0123].example.com/collaboration/hieraki/images/xml.png), image_path('xml.png')
691 ActionController::Base.asset_host = nil
694 def test_asset_host_without_protocol_should_use_request_protocol
695 ActionController::Base.asset_host = 'a.example.com'
696 assert_equal 'gopher://a.example.com/collaboration/hieraki/images/xml.png', image_path('xml.png')
698 ActionController::Base.asset_host = nil
701 def test_asset_host_without_protocol_should_use_request_protocol_even_if_path_present
702 ActionController::Base.asset_host = 'a.example.com/files/go/here'
703 assert_equal 'gopher://a.example.com/files/go/here/collaboration/hieraki/images/xml.png', image_path('xml.png')
705 ActionController::Base.asset_host = nil
708 def test_assert_css_and_js_of_the_same_name_return_correct_extension
709 assert_dom_equal(%(/collaboration/hieraki/javascripts/foo.js), javascript_path("foo"))
710 assert_dom_equal(%(/collaboration/hieraki/stylesheets/foo.css), stylesheet_path("foo"))