$:.unshift(File.dirname(__FILE__) + '/../lib') require File.dirname(__FILE__) + '/../../../../config/environment' require 'test/unit' require 'rubygems' require 'mocha' require 'action_controller/test_process' ActionController::Base.logger = nil ActionController::Routing::Routes.reload rescue nil class AssetPackageHelperProductionTest < Test::Unit::TestCase include ActionController::Assertions::DomAssertions include ActionController::TestCase::Assertions include ActionView::Helpers::TagHelper include ActionView::Helpers::AssetTagHelper include RailsAssetPackager::AssetPackageHelper cattr_accessor :packages_built def setup RailsAssetPackager::AssetPackage.asset_base_path = "#{Rails.root}/vendor/plugins/asset_packager/test/assets" RailsAssetPackager::AssetPackage.asset_packages_yml = YAML.load_file("#{Rails.root}/vendor/plugins/asset_packager/test/asset_packages.yml") RailsAssetPackager::AssetPackage.any_instance.stubs(:log) self.stubs(:should_merge?).returns(true) @controller = Class.new do def request @request ||= ActionController::TestRequest.new end end.new build_packages_once end def build_packages_once unless @@packages_built RailsAssetPackager::AssetPackage.build_all @@packages_built = true end end def build_js_expected_string(*sources) sources.map {|s| javascript_include_tag(s) }.join("\n") end def build_css_expected_string(*sources) sources.map {|s| stylesheet_link_tag(s) }.join("\n") end def test_js_basic current_file = RailsAssetPackager::AssetPackage.find_by_source("javascripts", "prototype").current_file assert_dom_equal build_js_expected_string(current_file), javascript_include_merged("prototype") end def test_js_multiple_packages current_file1 = RailsAssetPackager::AssetPackage.find_by_source("javascripts", "prototype").current_file current_file2 = RailsAssetPackager::AssetPackage.find_by_source("javascripts", "foo").current_file assert_dom_equal build_js_expected_string(current_file1, current_file2), javascript_include_merged("prototype", "foo") end def test_js_unpackaged_file current_file1 = RailsAssetPackager::AssetPackage.find_by_source("javascripts", "prototype").current_file current_file2 = RailsAssetPackager::AssetPackage.find_by_source("javascripts", "foo").current_file assert_dom_equal build_js_expected_string(current_file1, current_file2, "not_part_of_a_package"), javascript_include_merged("prototype", "foo", "not_part_of_a_package") end def test_js_multiple_from_same_package current_file1 = RailsAssetPackager::AssetPackage.find_by_source("javascripts", "prototype").current_file current_file2 = RailsAssetPackager::AssetPackage.find_by_source("javascripts", "foo").current_file assert_dom_equal build_js_expected_string(current_file1, "not_part_of_a_package", current_file2), javascript_include_merged("prototype", "effects", "controls", "not_part_of_a_package", "foo") end def test_js_by_package_name package_name = RailsAssetPackager::AssetPackage.find_by_target("javascripts", "base").current_file assert_dom_equal build_js_expected_string(package_name), javascript_include_merged(:base) end def test_js_multiple_package_names package_name1 = RailsAssetPackager::AssetPackage.find_by_target("javascripts", "base").current_file package_name2 = RailsAssetPackager::AssetPackage.find_by_target("javascripts", "secondary").current_file assert_dom_equal build_js_expected_string(package_name1, package_name2), javascript_include_merged(:base, :secondary) end def test_css_basic current_file = RailsAssetPackager::AssetPackage.find_by_source("stylesheets", "screen").current_file assert_dom_equal build_css_expected_string(current_file), stylesheet_link_merged("screen") end def test_css_multiple_packages current_file1 = RailsAssetPackager::AssetPackage.find_by_source("stylesheets", "screen").current_file current_file2 = RailsAssetPackager::AssetPackage.find_by_source("stylesheets", "foo").current_file current_file3 = RailsAssetPackager::AssetPackage.find_by_source("stylesheets", "subdir/bar").current_file assert_dom_equal build_css_expected_string(current_file1, current_file2, current_file3), stylesheet_link_merged("screen", "foo", "subdir/bar") end def test_css_unpackaged_file current_file1 = RailsAssetPackager::AssetPackage.find_by_source("stylesheets", "screen").current_file current_file2 = RailsAssetPackager::AssetPackage.find_by_source("stylesheets", "foo").current_file assert_dom_equal build_css_expected_string(current_file1, current_file2, "not_part_of_a_package"), stylesheet_link_merged("screen", "foo", "not_part_of_a_package") end def test_css_multiple_from_same_package current_file1 = RailsAssetPackager::AssetPackage.find_by_source("stylesheets", "screen").current_file current_file2 = RailsAssetPackager::AssetPackage.find_by_source("stylesheets", "foo").current_file current_file3 = RailsAssetPackager::AssetPackage.find_by_source("stylesheets", "subdir/bar").current_file assert_dom_equal build_css_expected_string(current_file1, "not_part_of_a_package", current_file2, current_file3), stylesheet_link_merged("screen", "header", "not_part_of_a_package", "foo", "bar", "subdir/foo", "subdir/bar") end def test_css_by_package_name package_name = RailsAssetPackager::AssetPackage.find_by_target("stylesheets", "base").current_file assert_dom_equal build_css_expected_string(package_name), stylesheet_link_merged(:base) end def test_css_multiple_package_names package_name1 = RailsAssetPackager::AssetPackage.find_by_target("stylesheets", "base").current_file package_name2 = RailsAssetPackager::AssetPackage.find_by_target("stylesheets", "secondary").current_file package_name3 = RailsAssetPackager::AssetPackage.find_by_target("stylesheets", "subdir/styles").current_file assert_dom_equal build_css_expected_string(package_name1, package_name2, package_name3), stylesheet_link_merged(:base, :secondary, "subdir/styles") end end