2011-03-29 16:42:31 -04:00
|
|
|
require 'abstract_unit'
|
|
|
|
require 'sprockets'
|
2011-05-23 19:07:16 -04:00
|
|
|
require 'sprockets/helpers/rails_helper'
|
2011-04-19 15:14:55 -04:00
|
|
|
require 'mocha'
|
|
|
|
|
2011-03-29 16:42:31 -04:00
|
|
|
class SprocketsHelperTest < ActionView::TestCase
|
2011-07-23 23:59:54 -04:00
|
|
|
include Sprockets::Helpers::RailsHelper
|
2011-03-29 16:42:31 -04:00
|
|
|
|
|
|
|
attr_accessor :assets
|
|
|
|
|
2011-07-23 23:59:54 -04:00
|
|
|
class MockRequest
|
|
|
|
def protocol() 'http://' end
|
|
|
|
def ssl?() false end
|
|
|
|
def host_with_port() 'localhost' end
|
|
|
|
end
|
|
|
|
|
2011-03-29 16:42:31 -04:00
|
|
|
def setup
|
|
|
|
super
|
|
|
|
|
2011-07-23 23:59:54 -04:00
|
|
|
@controller = BasicController.new
|
|
|
|
@controller.request = MockRequest.new
|
2011-03-29 16:42:31 -04:00
|
|
|
|
|
|
|
@assets = Sprockets::Environment.new
|
2011-07-26 10:58:24 -04:00
|
|
|
@assets.append_path(FIXTURES.join("sprockets/app/javascripts"))
|
|
|
|
@assets.append_path(FIXTURES.join("sprockets/app/stylesheets"))
|
|
|
|
@assets.append_path(FIXTURES.join("sprockets/app/images"))
|
2011-03-29 22:40:24 -04:00
|
|
|
|
2011-07-23 23:55:22 -04:00
|
|
|
application = Struct.new(:config, :assets).new(config, @assets)
|
2011-04-19 15:14:55 -04:00
|
|
|
Rails.stubs(:application).returns(application)
|
2011-06-27 16:48:36 -04:00
|
|
|
@config = config
|
|
|
|
@config.action_controller ||= ActiveSupport::InheritableOptions.new
|
|
|
|
@config.perform_caching = true
|
2011-03-29 16:42:31 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def url_for(*args)
|
|
|
|
"http://www.example.com"
|
|
|
|
end
|
|
|
|
|
2011-06-27 16:48:36 -04:00
|
|
|
test "asset_path" do
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{/assets/logo-[0-9a-f]+.png},
|
2011-04-19 13:05:07 -04:00
|
|
|
asset_path("logo.png")
|
2011-06-27 16:48:36 -04:00
|
|
|
end
|
2011-04-19 12:07:14 -04:00
|
|
|
|
2011-06-27 16:48:36 -04:00
|
|
|
test "asset_path with root relative assets" do
|
2011-04-19 12:07:14 -04:00
|
|
|
assert_equal "/images/logo",
|
2011-04-19 13:05:07 -04:00
|
|
|
asset_path("/images/logo")
|
2011-04-19 12:07:14 -04:00
|
|
|
assert_equal "/images/logo.gif",
|
2011-04-19 13:05:07 -04:00
|
|
|
asset_path("/images/logo.gif")
|
2011-04-19 12:07:14 -04:00
|
|
|
|
|
|
|
assert_equal "/dir/audio",
|
2011-04-19 13:05:07 -04:00
|
|
|
asset_path("/dir/audio")
|
2011-06-27 16:48:36 -04:00
|
|
|
end
|
2011-07-23 23:55:22 -04:00
|
|
|
|
2011-06-27 16:48:36 -04:00
|
|
|
test "asset_path with absolute urls" do
|
2011-04-19 12:07:14 -04:00
|
|
|
assert_equal "http://www.example.com/video/play",
|
2011-04-19 13:05:07 -04:00
|
|
|
asset_path("http://www.example.com/video/play")
|
2011-04-19 12:07:14 -04:00
|
|
|
assert_equal "http://www.example.com/video/play.mp4",
|
2011-04-19 13:05:07 -04:00
|
|
|
asset_path("http://www.example.com/video/play.mp4")
|
2011-04-19 12:07:14 -04:00
|
|
|
end
|
|
|
|
|
2011-06-27 16:58:51 -04:00
|
|
|
test "with a simple asset host the url should default to protocol relative" do
|
2011-06-27 16:48:36 -04:00
|
|
|
@controller.config.asset_host = "assets-%d.example.com"
|
|
|
|
assert_match %r{//assets-\d.example.com/assets/logo-[0-9a-f]+.png},
|
|
|
|
asset_path("logo.png")
|
|
|
|
end
|
2011-06-27 16:58:51 -04:00
|
|
|
|
|
|
|
test "with a simple asset host the url can be changed to use the request protocol" do
|
|
|
|
@controller.config.asset_host = "assets-%d.example.com"
|
|
|
|
@controller.config.default_asset_host_protocol = :request
|
|
|
|
assert_match %r{http://assets-\d.example.com/assets/logo-[0-9a-f]+.png},
|
|
|
|
asset_path("logo.png")
|
|
|
|
end
|
2011-07-23 23:55:22 -04:00
|
|
|
|
2011-06-27 16:48:36 -04:00
|
|
|
test "With a proc asset host that returns no protocol the url should be protocol relative" do
|
|
|
|
@controller.config.asset_host = Proc.new do |asset|
|
|
|
|
"assets-999.example.com"
|
|
|
|
end
|
|
|
|
assert_match %r{//assets-999.example.com/assets/logo-[0-9a-f]+.png},
|
|
|
|
asset_path("logo.png")
|
|
|
|
end
|
|
|
|
|
|
|
|
test "with a proc asset host that returns a protocol the url use it" do
|
|
|
|
@controller.config.asset_host = Proc.new do |asset|
|
|
|
|
"http://assets-999.example.com"
|
|
|
|
end
|
|
|
|
assert_match %r{http://assets-999.example.com/assets/logo-[0-9a-f]+.png},
|
|
|
|
asset_path("logo.png")
|
|
|
|
end
|
|
|
|
|
|
|
|
test "stylesheets served with a controller in scope can access the request" do
|
|
|
|
config.asset_host = Proc.new do |asset, request|
|
|
|
|
assert_not_nil request
|
|
|
|
"http://assets-666.example.com"
|
|
|
|
end
|
|
|
|
assert_match %r{http://assets-666.example.com/assets/logo-[0-9a-f]+.png},
|
|
|
|
asset_path("logo.png")
|
|
|
|
end
|
|
|
|
|
|
|
|
test "stylesheets served without a controller in scope cannot access the request" do
|
2011-07-29 12:08:35 -04:00
|
|
|
@controller = nil
|
2011-06-27 16:48:36 -04:00
|
|
|
@config.action_controller.asset_host = Proc.new do |asset, request|
|
|
|
|
fail "This should not have been called."
|
|
|
|
end
|
|
|
|
assert_raises ActionController::RoutingError do
|
|
|
|
asset_path("logo.png")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2011-06-27 16:58:51 -04:00
|
|
|
test "stylesheets served without a controller in do not use asset hosts when the default protocol is :request" do
|
2011-07-29 12:08:35 -04:00
|
|
|
@controller = nil
|
2011-06-27 16:58:51 -04:00
|
|
|
@config.action_controller.asset_host = "assets-%d.example.com"
|
|
|
|
@config.action_controller.default_asset_host_protocol = :request
|
|
|
|
@config.action_controller.perform_caching = true
|
|
|
|
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{/assets/logo-[0-9a-f]+.png},
|
2011-06-27 16:58:51 -04:00
|
|
|
asset_path("logo.png")
|
|
|
|
end
|
|
|
|
|
2011-05-28 03:51:00 -04:00
|
|
|
test "asset path with relative url root" do
|
2011-05-28 02:19:11 -04:00
|
|
|
@controller.config.relative_url_root = "/collaboration/hieraki"
|
|
|
|
assert_equal "/collaboration/hieraki/images/logo.gif",
|
|
|
|
asset_path("/images/logo.gif")
|
|
|
|
end
|
|
|
|
|
2011-03-29 16:42:31 -04:00
|
|
|
test "javascript path" do
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{/assets/application-[0-9a-f]+.js},
|
2011-04-19 13:05:07 -04:00
|
|
|
asset_path(:application, "js")
|
2011-03-29 16:42:31 -04:00
|
|
|
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{/assets/xmlhr-[0-9a-f]+.js},
|
2011-04-19 13:05:07 -04:00
|
|
|
asset_path("xmlhr", "js")
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{/assets/dir/xmlhr-[0-9a-f]+.js},
|
2011-04-19 13:05:07 -04:00
|
|
|
asset_path("dir/xmlhr.js", "js")
|
2011-03-29 16:42:31 -04:00
|
|
|
|
|
|
|
assert_equal "/dir/xmlhr.js",
|
2011-04-19 13:05:07 -04:00
|
|
|
asset_path("/dir/xmlhr", "js")
|
2011-03-29 16:42:31 -04:00
|
|
|
|
2011-04-21 10:32:02 -04:00
|
|
|
assert_equal "http://www.example.com/js/xmlhr",
|
|
|
|
asset_path("http://www.example.com/js/xmlhr", "js")
|
|
|
|
assert_equal "http://www.example.com/js/xmlhr.js",
|
|
|
|
asset_path("http://www.example.com/js/xmlhr.js", "js")
|
2011-03-29 16:42:31 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
test "javascript include tag" do
|
2011-08-18 15:59:27 -04:00
|
|
|
Rails.env.stubs(:test?).returns(false)
|
|
|
|
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{<script src="/assets/application-[0-9a-f]+.js" type="text/javascript"></script>},
|
2011-05-23 19:29:20 -04:00
|
|
|
javascript_include_tag(:application)
|
2011-03-29 16:42:31 -04:00
|
|
|
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{<script src="/assets/xmlhr-[0-9a-f]+.js" type="text/javascript"></script>},
|
2011-05-23 19:29:20 -04:00
|
|
|
javascript_include_tag("xmlhr")
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{<script src="/assets/xmlhr-[0-9a-f]+.js" type="text/javascript"></script>},
|
2011-05-23 19:29:20 -04:00
|
|
|
javascript_include_tag("xmlhr.js")
|
2011-04-21 10:32:02 -04:00
|
|
|
assert_equal '<script src="http://www.example.com/xmlhr" type="text/javascript"></script>',
|
2011-05-23 19:29:20 -04:00
|
|
|
javascript_include_tag("http://www.example.com/xmlhr")
|
2011-05-22 16:10:53 -04:00
|
|
|
|
2011-08-18 15:59:27 -04:00
|
|
|
assert_match %r{<script src=\"/assets/xmlhr-[0-9a-f]+.js" type=\"text/javascript\"></script>\n<script src=\"/assets/extra-[0-9a-f]+.js" type=\"text/javascript\"></script>},
|
|
|
|
javascript_include_tag("xmlhr", "extra")
|
|
|
|
|
|
|
|
Rails.env.stubs(:test?).returns(true)
|
|
|
|
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{<script src="/assets/xmlhr-[0-9a-f]+.js\?body=1" type="text/javascript"></script>\n<script src="/assets/application-[0-9a-f]+.js\?body=1" type="text/javascript"></script>},
|
2011-08-18 15:59:27 -04:00
|
|
|
javascript_include_tag(:application)
|
|
|
|
|
|
|
|
assert_match %r{<script src="/assets/application-[0-9a-f]+.js\" type="text/javascript"></script>},
|
|
|
|
javascript_include_tag(:application, :debug => false)
|
2011-06-05 01:58:37 -04:00
|
|
|
|
2011-03-29 16:42:31 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
test "stylesheet path" do
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{/assets/application-[0-9a-f]+.css}, asset_path(:application, "css")
|
2011-03-29 16:42:31 -04:00
|
|
|
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{/assets/style-[0-9a-f]+.css}, asset_path("style", "css")
|
|
|
|
assert_match %r{/assets/dir/style-[0-9a-f]+.css}, asset_path("dir/style.css", "css")
|
2011-04-19 13:05:07 -04:00
|
|
|
assert_equal "/dir/style.css", asset_path("/dir/style.css", "css")
|
2011-03-29 16:42:31 -04:00
|
|
|
|
2011-04-21 10:32:02 -04:00
|
|
|
assert_equal "http://www.example.com/css/style",
|
|
|
|
asset_path("http://www.example.com/css/style", "css")
|
|
|
|
assert_equal "http://www.example.com/css/style.css",
|
|
|
|
asset_path("http://www.example.com/css/style.css", "css")
|
2011-03-29 16:42:31 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
test "stylesheet link tag" do
|
2011-08-18 15:59:27 -04:00
|
|
|
Rails.env.stubs(:test?).returns(false)
|
|
|
|
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{<link href="/assets/application-[0-9a-f]+.css" media="screen" rel="stylesheet" type="text/css" />},
|
2011-05-23 19:29:20 -04:00
|
|
|
stylesheet_link_tag(:application)
|
2011-03-29 16:42:31 -04:00
|
|
|
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{<link href="/assets/style-[0-9a-f]+.css" media="screen" rel="stylesheet" type="text/css" />},
|
2011-05-23 19:29:20 -04:00
|
|
|
stylesheet_link_tag("style")
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{<link href="/assets/style-[0-9a-f]+.css" media="screen" rel="stylesheet" type="text/css" />},
|
2011-05-23 19:29:20 -04:00
|
|
|
stylesheet_link_tag("style.css")
|
2011-03-29 16:42:31 -04:00
|
|
|
|
2011-04-21 10:32:02 -04:00
|
|
|
assert_equal '<link href="http://www.example.com/style.css" media="screen" rel="stylesheet" type="text/css" />',
|
2011-05-23 19:29:20 -04:00
|
|
|
stylesheet_link_tag("http://www.example.com/style.css")
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{<link href="/assets/style-[0-9a-f]+.css" media="all" rel="stylesheet" type="text/css" />},
|
2011-05-23 19:29:20 -04:00
|
|
|
stylesheet_link_tag("style", :media => "all")
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{<link href="/assets/style-[0-9a-f]+.css" media="print" rel="stylesheet" type="text/css" />},
|
2011-05-23 19:29:20 -04:00
|
|
|
stylesheet_link_tag("style", :media => "print")
|
2011-05-22 16:10:53 -04:00
|
|
|
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{<link href="/assets/style-[0-9a-f]+.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/assets/extra-[0-9a-f]+.css" media="screen" rel="stylesheet" type="text/css" />},
|
2011-06-05 01:58:37 -04:00
|
|
|
stylesheet_link_tag("style", "extra")
|
2011-08-18 15:59:27 -04:00
|
|
|
|
|
|
|
Rails.env.stubs(:test?).returns(true)
|
|
|
|
|
|
|
|
assert_match %r{<link href="/assets/style-[0-9a-f]+.css\?body=1" media="screen" rel="stylesheet" type="text/css" />\n<link href="/assets/application-[0-9a-f]+.css\?body=1" media="screen" rel="stylesheet" type="text/css" />},
|
|
|
|
stylesheet_link_tag(:application)
|
|
|
|
|
|
|
|
assert_match %r{<link href="/assets/application-[0-9a-f]+.css" media="screen" rel="stylesheet" type="text/css" />},
|
|
|
|
stylesheet_link_tag(:application, :debug => false)
|
|
|
|
|
2011-03-29 16:42:31 -04:00
|
|
|
end
|
2011-07-01 08:26:41 -04:00
|
|
|
|
|
|
|
test "alternate asset prefix" do
|
|
|
|
stubs(:asset_prefix).returns("/themes/test")
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{/themes/test/style-[0-9a-f]+.css}, asset_path("style", "css")
|
2011-07-01 08:26:41 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
test "alternate asset environment" do
|
|
|
|
assets = Sprockets::Environment.new
|
2011-07-26 10:58:24 -04:00
|
|
|
assets.append_path(FIXTURES.join("sprockets/alternate/stylesheets"))
|
2011-07-01 08:26:41 -04:00
|
|
|
stubs(:asset_environment).returns(assets)
|
2011-07-26 10:58:24 -04:00
|
|
|
assert_match %r{/assets/style-[0-9a-f]+.css}, asset_path("style", "css")
|
2011-07-01 08:26:41 -04:00
|
|
|
end
|
2011-08-04 23:48:40 -04:00
|
|
|
|
|
|
|
test "alternate hash based on environment" do
|
|
|
|
assets = Sprockets::Environment.new
|
|
|
|
assets.version = 'development'
|
|
|
|
assets.append_path(FIXTURES.join("sprockets/alternate/stylesheets"))
|
|
|
|
stubs(:asset_environment).returns(assets)
|
|
|
|
dev_path = asset_path("style", "css")
|
|
|
|
|
|
|
|
assets.version = 'production'
|
|
|
|
prod_path = asset_path("style", "css")
|
|
|
|
|
|
|
|
assert_not_equal prod_path, dev_path
|
|
|
|
end
|
2011-03-29 16:42:31 -04:00
|
|
|
end
|