2011-04-28 04:35:10 +00:00
|
|
|
require 'test_helper'
|
|
|
|
|
2011-06-07 01:52:22 +00:00
|
|
|
class SpriteMapTest < Test::Unit::TestCase
|
2011-06-16 03:37:23 +00:00
|
|
|
include SpriteHelper
|
2011-04-28 04:35:10 +00:00
|
|
|
|
|
|
|
def setup
|
2011-05-10 23:20:38 +00:00
|
|
|
Hash.send(:include, Compass::SassExtensions::Functions::Sprites::VariableReader)
|
2011-08-03 03:35:53 +00:00
|
|
|
create_sprite_temp
|
|
|
|
file = StringIO.new("images_path = #{@images_tmp_path.inspect}\n")
|
|
|
|
Compass.add_configuration(file, "sprite_config")
|
2011-04-28 04:35:10 +00:00
|
|
|
Compass.configure_sass_plugin!
|
2011-06-25 05:28:01 +00:00
|
|
|
@options = {'cleanup' => Sass::Script::Bool.new(true), 'layout' => Sass::Script::String.new('vertical')}
|
2011-06-19 16:26:38 +00:00
|
|
|
@base = sprite_map_test(@options)
|
2011-04-28 04:35:10 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def teardown
|
2011-08-03 03:35:53 +00:00
|
|
|
clean_up_sprites
|
2011-06-16 03:37:23 +00:00
|
|
|
@base = nil
|
2011-04-28 04:35:10 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it "should have the correct size" do
|
|
|
|
assert_equal [10,40], @base.size
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should have the sprite names" do
|
2011-06-16 03:37:23 +00:00
|
|
|
assert_equal Compass::SpriteImporter.sprite_names(URI), @base.sprite_names
|
2011-04-28 04:35:10 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'should have image filenames' do
|
|
|
|
assert_equal Dir["#{@images_tmp_path}/selectors/*.png"].sort, @base.image_filenames
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'should need generation' do
|
|
|
|
assert @base.generation_required?
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'uniqueness_hash' do
|
|
|
|
assert_equal 'ef52c5c63a', @base.uniqueness_hash
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'should be outdated' do
|
|
|
|
assert @base.outdated?
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'should have correct filename' do
|
2011-06-10 10:11:28 +00:00
|
|
|
assert_equal File.join(@images_tmp_path, "#{@base.path}-s#{@base.uniqueness_hash}.png"), @base.filename
|
2011-04-28 04:35:10 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it "should return the 'ten-by-ten' image" do
|
|
|
|
assert_equal 'ten-by-ten', @base.image_for('ten-by-ten').name
|
|
|
|
assert @base.image_for('ten-by-ten').is_a?(Compass::SassExtensions::Sprites::Image)
|
|
|
|
end
|
|
|
|
|
|
|
|
%w(target hover active).each do |selector|
|
|
|
|
it "should have a #{selector}" do
|
|
|
|
assert @base.send(:"has_#{selector}?", 'ten-by-ten')
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should return #{selector} image class" do
|
|
|
|
assert_equal "ten-by-ten_#{selector}", @base.image_for('ten-by-ten').send(:"#{selector}").name
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should generate sprite" do
|
|
|
|
@base.generate
|
|
|
|
assert File.exists?(@base.filename)
|
|
|
|
assert !@base.generation_required?
|
|
|
|
assert !@base.outdated?
|
|
|
|
end
|
|
|
|
|
2011-05-10 22:01:12 +00:00
|
|
|
it "should remove old sprite when generating new" do
|
|
|
|
@base.generate
|
|
|
|
file = @base.filename
|
|
|
|
assert File.exists?(file), "Original file does not exist"
|
|
|
|
file_to_remove = File.join(@images_tmp_path, 'selectors', 'ten-by-ten.png')
|
|
|
|
FileUtils.rm file_to_remove
|
|
|
|
assert !File.exists?(file_to_remove), "Failed to remove sprite file"
|
2011-06-19 16:26:38 +00:00
|
|
|
@base = sprite_map_test(@options)
|
2011-05-10 22:01:12 +00:00
|
|
|
@base.generate
|
|
|
|
assert !File.exists?(file), "Sprite file did not get removed"
|
|
|
|
end
|
2011-06-25 05:28:01 +00:00
|
|
|
|
|
|
|
it "should have a vertical layout" do
|
|
|
|
assert_equal [0, 10, 20, 30], @base.images.map(&:top)
|
|
|
|
assert_equal [0, 0, 0, 0], @base.images.map(&:left)
|
|
|
|
end
|
2011-08-03 02:08:05 +00:00
|
|
|
|
2011-08-12 19:12:31 +00:00
|
|
|
it "should have a vertical layout with spacing" do
|
|
|
|
base = sprite_map_test(@options.merge({"spacing" => Sass::Script::Number.new(10, ['px'])}))
|
|
|
|
assert_equal [0, 20, 40, 60], base.images.map(&:top)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should layout vertical with position" do
|
|
|
|
base = sprite_map_test("ten_by_ten_active_position" => Sass::Script::Number.new(10, ['px']))
|
|
|
|
assert_equal [0, 10, 0, 0], base.images.map(&:left)
|
|
|
|
end
|
|
|
|
|
2011-08-03 03:35:53 +00:00
|
|
|
def smart
|
|
|
|
options = @options.merge("layout" => Sass::Script::String.new('smart'))
|
|
|
|
importer = Compass::SpriteImporter.new
|
|
|
|
uri = "image_row/*.png"
|
|
|
|
path, name = Compass::SpriteImporter.path_and_name(uri)
|
|
|
|
sprite_names = Compass::SpriteImporter.sprite_names(uri)
|
|
|
|
sass_engine = Compass::SpriteImporter.sass_engine(uri, name, importer, options)
|
|
|
|
Compass::SassExtensions::Sprites::SpriteMap.new(sprite_names.map {|n| "image_row/#{n}.png"}, path, name, sass_engine, options)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should have a smart layout" do
|
|
|
|
base = smart
|
|
|
|
base.generate
|
|
|
|
assert_equal 400, base.width
|
|
|
|
assert_equal 60, base.height
|
|
|
|
assert_equal [[0, 0], [20, 120], [20, 20], [20, 0], [20, 160]], base.images.map {|i| [i.top, i.left]}
|
|
|
|
assert File.exists?(base.filename)
|
|
|
|
FileUtils.rm base.filename
|
|
|
|
end
|
2011-06-25 05:28:01 +00:00
|
|
|
|
2011-08-03 02:08:05 +00:00
|
|
|
def diagonal
|
|
|
|
opts = @options.merge("layout" => Sass::Script::String.new('diagonal'))
|
|
|
|
sprite_map_test(opts)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should generate a diagonal sprite" do
|
|
|
|
base = diagonal
|
|
|
|
base.generate
|
|
|
|
assert_equal 40, base.width
|
|
|
|
assert_equal 40, base.height
|
2011-09-03 19:56:57 +00:00
|
|
|
assert_equal [[30, 0], [20, 10], [10, 20], [0, 30]], base.images.map {|i| [i.top, i.left]}
|
2011-08-03 02:08:05 +00:00
|
|
|
assert File.exists?(base.filename)
|
|
|
|
FileUtils.rm base.filename
|
|
|
|
end
|
2011-06-25 05:28:01 +00:00
|
|
|
|
|
|
|
# Horizontal tests
|
2011-08-12 19:12:31 +00:00
|
|
|
def horizontal(options= {})
|
2011-06-25 05:28:01 +00:00
|
|
|
opts = @options.merge("layout" => Sass::Script::String.new('horizontal'))
|
2011-08-12 19:12:31 +00:00
|
|
|
opts.merge!(options)
|
2011-06-25 05:28:01 +00:00
|
|
|
sprite_map_test(opts)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should have a horizontal layout" do
|
|
|
|
base = horizontal
|
|
|
|
assert_equal 10, base.height
|
|
|
|
assert_equal 40, base.width
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should layout images horizontaly" do
|
|
|
|
base = horizontal
|
|
|
|
assert_equal [0, 10, 20, 30], base.images.map(&:left)
|
|
|
|
assert_equal [0, 0, 0, 0], base.images.map(&:top)
|
|
|
|
end
|
|
|
|
|
2011-08-12 19:12:31 +00:00
|
|
|
it "should layout horizontaly with spacing" do
|
|
|
|
base = horizontal("spacing" => Sass::Script::Number.new(10, ['px']))
|
|
|
|
assert_equal [0, 20, 40, 60], base.images.map(&:left)
|
|
|
|
assert_equal [0, 0, 0, 0], base.images.map(&:top)
|
2011-08-12 19:34:04 +00:00
|
|
|
assert_equal 80, base.width
|
2011-08-12 19:12:31 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it "should layout horizontaly with position" do
|
|
|
|
base = horizontal("ten_by_ten_active_position" => Sass::Script::Number.new(10, ['px']))
|
|
|
|
assert_equal [0, 10, 0, 0], base.images.map(&:top)
|
|
|
|
end
|
|
|
|
|
2011-06-25 05:28:01 +00:00
|
|
|
it "should generate a horrizontal sprite" do
|
|
|
|
base = horizontal
|
|
|
|
base.generate
|
|
|
|
assert File.exists?(base.filename)
|
|
|
|
FileUtils.rm base.filename
|
|
|
|
end
|
2011-08-03 02:08:05 +00:00
|
|
|
|
2011-07-26 06:03:38 +00:00
|
|
|
it "should generate vertical sprites in decending order" do
|
|
|
|
sizes = @base.images.map{|image| File.size(image.file) }
|
|
|
|
assert_equal sizes.min, File.size(@base.images.first.file)
|
|
|
|
assert_equal sizes.max, File.size(@base.images.last.file)
|
|
|
|
end
|
|
|
|
|
2011-07-27 06:39:24 +00:00
|
|
|
test "should get correct relative_name" do
|
|
|
|
Compass.reset_configuration!
|
|
|
|
uri = 'foo/*.png'
|
|
|
|
other_folder = File.join(@images_tmp_path, '../other-temp')
|
|
|
|
FileUtils.mkdir_p other_folder
|
|
|
|
FileUtils.mkdir_p File.join(other_folder, 'foo')
|
|
|
|
%w(my bar).each do |file|
|
|
|
|
FileUtils.touch(File.join(other_folder, "foo/#{file}.png"))
|
|
|
|
end
|
|
|
|
config = Compass::Configuration::Data.new('config')
|
|
|
|
config.images_path = @images_tmp_path
|
|
|
|
config.sprite_load_path = [@images_tmp_path, other_folder]
|
|
|
|
Compass.add_configuration(config, "sprite_config")
|
|
|
|
assert_equal 'foo/my.png', Compass::SassExtensions::Sprites::SpriteMap.relative_name(File.join(other_folder, 'foo/my.png'))
|
|
|
|
FileUtils.rm_rf other_folder
|
|
|
|
end
|
|
|
|
|
2011-05-10 22:01:12 +00:00
|
|
|
|
2011-04-28 04:35:10 +00:00
|
|
|
end
|