require "test_helper" class TestStylesheetMerger < Test::Unit::TestCase def setup @file_merger = Juicer::Merger::StylesheetMerger.new Juicer::Test::FileSetup.new.create @cwd = Dir.pwd Dir.chdir path("") end def teardown file = path('test_out.css') File.delete(file) if File.exists?(file) Dir.chdir(@cwd) end def test_init Juicer::Merger::StylesheetMerger.publicize_methods do assert_equal Juicer::CssDependencyResolver, @file_merger.dependency_resolver.class end end def test_merge Juicer::Merger::StylesheetMerger.publicize_methods do a_content = "\n\n/* Dette er a.css */\n" content = @file_merger.merge(path('a.css')) assert_equal a_content + "\n", content end end def test_constructor file_merger = Juicer::Merger::StylesheetMerger.new(path('a.css')) assert_equal 2, file_merger.files.length end def test_append @file_merger << path('a.css') assert_equal 2, @file_merger.files.length end def test_save a_css = path('a.css') b_css = path('b.css') merged = < true Juicer::Merger::StylesheetMerger.publicize_methods do assert_raise ArgumentError do merger.resolve_path("/some/url", nil) end end end def test_resolve_path_should_make_absolute_urls_relative merger = Juicer::Merger::StylesheetMerger.new [], :relative_urls => true, :document_root => "/home/usr" Juicer::Merger::StylesheetMerger.publicize_methods do merger.instance_eval { @root = Pathname.new "/home/usr/design" } assert_equal "../some/url", merger.resolve_path("/some/url", nil) end end def test_resolve_path_should_leave_full_urls merger = Juicer::Merger::StylesheetMerger.new [] url = "http://test.com" Juicer::Merger::StylesheetMerger.publicize_methods do merger.instance_eval { @root = Pathname.new "/home/usr/design" } assert_equal url, merger.resolve_path(url, nil) end end def test_resolve_path_error_when_missing_absolute_document_root merger = Juicer::Merger::StylesheetMerger.new [], :absolute_urls => true Juicer::Merger::StylesheetMerger.publicize_methods do assert_raise ArgumentError do merger.resolve_path("../some/url", nil) end end end def test_resolve_path_should_make_relative_urls_absolute merger = Juicer::Merger::StylesheetMerger.new [], :absolute_urls => true, :document_root => "/home/usr" Juicer::Merger::StylesheetMerger.publicize_methods do merger.instance_eval { @root = Pathname.new "/home/usr/design" } assert_equal "/design/images/1.png", merger.resolve_path("../images/1.png", "/home/usr/design/css") end end def test_resolve_path_should_redefine_relative_urls merger = Juicer::Merger::StylesheetMerger.new [], :relative_urls => true Juicer::Merger::StylesheetMerger.publicize_methods do merger.instance_eval { @root = Pathname.new "/home/usr/design2/css" } assert_equal "../../design/images/1.png", merger.resolve_path("../images/1.png", "/home/usr/design/css") end end def test_resolve_path_should_redefine_absolute_urls merger = Juicer::Merger::StylesheetMerger.new [], :relative_urls => true, :document_root => "/home/usr" Juicer::Merger::StylesheetMerger.publicize_methods do merger.instance_eval { @root = Pathname.new "/home/usr/design2/css" } assert_equal "../../images/1.png", merger.resolve_path("/images/1.png", "/home/usr/design/css") end end def test_resolve_path_with_hosts_should_cycle_asset_hosts merger = Juicer::Merger::StylesheetMerger.new [], :hosts => ["http://assets1", "http://assets2", "http://assets3"] Juicer::Merger::StylesheetMerger.publicize_methods do merger.instance_eval { @root = Pathname.new "/home/usr/design2/css" } assert_equal "http://assets1/images/1.png", merger.resolve_path("/images/1.png", nil) assert_equal "http://assets2/images/1.png", merger.resolve_path("/images/1.png", nil) assert_equal "http://assets3/images/1.png", merger.resolve_path("/images/1.png", nil) assert_equal "http://assets1/images/1.png", merger.resolve_path("/images/1.png", nil) end end def test_resolve_paths_should_handle_relative_document_roots merger = Juicer::Merger::StylesheetMerger.new [], :document_root => "test/data", :relative_urls => true merger << File.expand_path("css/test2.css") Juicer::Merger::StylesheetMerger.publicize_methods do merger.instance_eval { @root = Pathname.new File.expand_path("test/data/css") } assert_equal "../images/1.png", merger.resolve_path("/images/1.png", nil) end end def test_cycle_asset_hosts_should_use_same_host_for_same_url @file_merger = Juicer::Merger::StylesheetMerger.new nil, :hosts => ["http://assets1", "http://assets2", "http://assets3"] @file_merger << path("path_test2.css") ios = StringIO.new @file_merger.save(ios) files = ios.string.scan(/url\(([^\)]*)\)/).collect { |f| f.first } assert_equal "1/images/1.png::2/css/2.gif::3/a1.css::2/css/2.gif::1/a2.css".gsub(/(\d\/)/, 'http://assets\1'), files.join("::") end end