require File.join(File.dirname(__FILE__), '../test_helper.rb')

class CSSBundleTest < Test::Unit::TestCase
  def test__rewrite_relative_path__should_rewrite
    assert_rewrites("/stylesheets/active_scaffold/default/stylesheet.css", 
      "../../../images/spinner.gif" => "/images/spinner.gif",
      "../../../images/./../images/goober/../spinner.gif" => "/images/spinner.gif"
    )
    
    assert_rewrites("stylesheets/active_scaffold/default/./stylesheet.css", 
      "../../../images/spinner.gif" => "/images/spinner.gif")
      
    assert_rewrites("stylesheets/main.css", 
      "image.gif" => "/stylesheets/image.gif")
      
    assert_rewrites("/stylesheets////default/main.css", 
      "..//image.gif" => "/stylesheets/image.gif")
      
    assert_rewrites("/stylesheets/default/main.css", 
      "/images/image.gif" => "/images/image.gif")
  end
  
  def test__rewrite_relative_path__should_strip_spaces_and_quotes
    assert_rewrites("stylesheets/main.css", 
      "'image.gif'" => "/stylesheets/image.gif",
      " image.gif " => "/stylesheets/image.gif"
    )
  end
  
  def test__rewrite_relative_path__shouldnt_rewrite_if_absolute_url
    assert_rewrites("stylesheets/main.css", 
      " 'http://www.url.com/images/image.gif' " => "http://www.url.com/images/image.gif",
      "http://www.url.com/images/image.gif" => "http://www.url.com/images/image.gif",
      "ftp://www.url.com/images/image.gif" => "ftp://www.url.com/images/image.gif"
    )
  end
  
  def test__bundle_css_file__should_rewrite_relatiave_path
    bundled_css = BundleFu.bundle_css_files(["/stylesheets/css_3.css"])
    assert_match("background-image: url(/images/background.gif)", bundled_css)
    assert_match("background-image: url(/images/groovy/background_2.gif)", bundled_css)
  end
  
  def test__bundle_css_files__no_images__should_return_content
    bundled_css = BundleFu.bundle_css_files(["/stylesheets/css_1.css"])
    assert_match("css_1 { }", bundled_css)
  end
  
  
  def assert_rewrites(source_filename, rewrite_map)
    rewrite_map.each_pair{|source, dest|
      assert_equal(dest, BundleFu::CSSUrlRewriter.rewrite_relative_path(source_filename, source))
    }
  end
end
