sprite-factory 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +10 -0
- data/README.md +39 -31
- data/Rakefile +2 -0
- data/bin/sf +3 -2
- data/lib/sprite_factory.rb +25 -3
- data/lib/sprite_factory/layout/horizontal.rb +42 -0
- data/lib/sprite_factory/layout/packed.rb +107 -0
- data/lib/sprite_factory/layout/vertical.rb +42 -0
- data/lib/sprite_factory/runner.rb +20 -1
- data/sprite_factory.gemspec +5 -1
- data/test/images/reference/index.html +16 -0
- data/test/images/reference/irregular.packed.css +24 -0
- data/test/images/reference/irregular.packed.png +0 -0
- data/test/images/reference/regular.packed.css +24 -0
- data/test/images/reference/regular.packed.png +0 -0
- data/test/integration_test.rb +12 -0
- data/test/layout/horizontal_test.rb +100 -0
- data/test/layout/packed_test.rb +221 -0
- data/test/layout/test_case.rb +56 -0
- data/test/layout/vertical_test.rb +100 -0
- data/test/test_case.rb +7 -0
- metadata +19 -9
- data/lib/sprite_factory/layout.rb +0 -89
- data/test/layout_test.rb +0 -228
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.expand_path('../test_case', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
module SpriteFactory
|
4
|
+
module Layout
|
5
|
+
class TestCase < SpriteFactory::TestCase
|
6
|
+
|
7
|
+
#==========================================================================
|
8
|
+
# layout test helpers
|
9
|
+
#==========================================================================
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def get_regular_images
|
14
|
+
return [
|
15
|
+
{:width => 20, :height => 10},
|
16
|
+
{:width => 20, :height => 10},
|
17
|
+
{:width => 20, :height => 10},
|
18
|
+
{:width => 20, :height => 10},
|
19
|
+
{:width => 20, :height => 10}
|
20
|
+
]
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_irregular_images
|
24
|
+
return [
|
25
|
+
{:width => 20, :height => 50},
|
26
|
+
{:width => 40, :height => 40},
|
27
|
+
{:width => 60, :height => 30},
|
28
|
+
{:width => 80, :height => 20},
|
29
|
+
{:width => 100, :height => 10}
|
30
|
+
]
|
31
|
+
end
|
32
|
+
|
33
|
+
#--------------------------------------------------------------------------
|
34
|
+
|
35
|
+
def verify_layout(expected_width, expected_height, expected_images, images, options = {})
|
36
|
+
max = Layout.send(options[:layout] || :horizontal).layout(images, options)
|
37
|
+
assert_equal(expected_width, max[:width])
|
38
|
+
assert_equal(expected_height, max[:height])
|
39
|
+
assert_equal(expected_images.length, images.length)
|
40
|
+
images.length.times.each do |n|
|
41
|
+
expected = expected_images[n]
|
42
|
+
actual = images[n]
|
43
|
+
assert_equal(expected[:x], actual[:x], "image #{n} - unexpected x")
|
44
|
+
assert_equal(expected[:y], actual[:y], "image #{n} - unexpected y")
|
45
|
+
assert_equal(expected[:cssx] || expected[:x], actual[:cssx], "image #{n} - unexpected cssx")
|
46
|
+
assert_equal(expected[:cssy] || expected[:y], actual[:cssy], "image #{n} - unexpected cssy")
|
47
|
+
assert_equal(expected[:cssw] || actual[:width], actual[:cssw], "image #{n} - unexpected cssw")
|
48
|
+
assert_equal(expected[:cssh] || actual[:height], actual[:cssh], "image #{n} - unexpected cssh")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
#--------------------------------------------------------------------------
|
53
|
+
|
54
|
+
end # class TestCase
|
55
|
+
end # module Layout
|
56
|
+
end # module SpriteFactory
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require File.expand_path('test_case', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
module SpriteFactory
|
4
|
+
module Layout
|
5
|
+
class VerticalTest < SpriteFactory::Layout::TestCase
|
6
|
+
|
7
|
+
#==========================================================================
|
8
|
+
# test REGULAR images
|
9
|
+
#==========================================================================
|
10
|
+
|
11
|
+
def test_vertical_layout_of_regular_images
|
12
|
+
images = get_regular_images
|
13
|
+
expected = [
|
14
|
+
{ :x => 0, :y => 0 },
|
15
|
+
{ :x => 0, :y => 10 },
|
16
|
+
{ :x => 0, :y => 20 },
|
17
|
+
{ :x => 0, :y => 30 },
|
18
|
+
{ :x => 0, :y => 40 }
|
19
|
+
]
|
20
|
+
verify_layout(20, 50, expected, images, :layout => :vertical)
|
21
|
+
end
|
22
|
+
|
23
|
+
#--------------------------------------------------------------------------
|
24
|
+
|
25
|
+
def test_padded_vertical_layout_of_regular_images
|
26
|
+
images = get_regular_images
|
27
|
+
expected = [
|
28
|
+
{ :cssx => 0, :cssy => 0, :cssw => 40, :cssh => 50, :x => 10, :y => 20 },
|
29
|
+
{ :cssx => 0, :cssy => 50, :cssw => 40, :cssh => 50, :x => 10, :y => 70 },
|
30
|
+
{ :cssx => 0, :cssy => 100, :cssw => 40, :cssh => 50, :x => 10, :y => 120 },
|
31
|
+
{ :cssx => 0, :cssy => 150, :cssw => 40, :cssh => 50, :x => 10, :y => 170 },
|
32
|
+
{ :cssx => 0, :cssy => 200, :cssw => 40, :cssh => 50, :x => 10, :y => 220 }
|
33
|
+
]
|
34
|
+
verify_layout(40, 250, expected, images, :layout => :vertical, :hpadding => 10, :vpadding => 20)
|
35
|
+
end
|
36
|
+
|
37
|
+
#--------------------------------------------------------------------------
|
38
|
+
|
39
|
+
def test_fixed_vertical_layout_of_regular_images
|
40
|
+
images = get_regular_images
|
41
|
+
expected = [
|
42
|
+
{ :cssx => 0, :cssy => 0, :cssw => 50, :cssh => 50, :x => 15, :y => 20 },
|
43
|
+
{ :cssx => 0, :cssy => 50, :cssw => 50, :cssh => 50, :x => 15, :y => 70 },
|
44
|
+
{ :cssx => 0, :cssy => 100, :cssw => 50, :cssh => 50, :x => 15, :y => 120 },
|
45
|
+
{ :cssx => 0, :cssy => 150, :cssw => 50, :cssh => 50, :x => 15, :y => 170 },
|
46
|
+
{ :cssx => 0, :cssy => 200, :cssw => 50, :cssh => 50, :x => 15, :y => 220 }
|
47
|
+
]
|
48
|
+
verify_layout(50, 250, expected, images, :layout => :vertical, :width => 50, :height => 50)
|
49
|
+
end
|
50
|
+
|
51
|
+
#==========================================================================
|
52
|
+
# test IRREGULAR images
|
53
|
+
#==========================================================================
|
54
|
+
|
55
|
+
def test_vertical_layout_of_irregular_images
|
56
|
+
images = get_irregular_images
|
57
|
+
expected = [
|
58
|
+
{ :x => 40, :y => 0 },
|
59
|
+
{ :x => 30, :y => 50 },
|
60
|
+
{ :x => 20, :y => 90 },
|
61
|
+
{ :x => 10, :y => 120 },
|
62
|
+
{ :x => 0, :y => 140 }
|
63
|
+
]
|
64
|
+
verify_layout(100, 150, expected, images, :layout => :vertical)
|
65
|
+
end
|
66
|
+
|
67
|
+
#--------------------------------------------------------------------------
|
68
|
+
|
69
|
+
def test_padded_vertical_layout_of_irregular_images
|
70
|
+
images = get_irregular_images
|
71
|
+
expected = [
|
72
|
+
{ :cssx => 40, :cssy => 0, :cssw => 40, :cssh => 90, :x => 50, :y => 20 },
|
73
|
+
{ :cssx => 30, :cssy => 90, :cssw => 60, :cssh => 80, :x => 40, :y => 110 },
|
74
|
+
{ :cssx => 20, :cssy => 170, :cssw => 80, :cssh => 70, :x => 30, :y => 190 },
|
75
|
+
{ :cssx => 10, :cssy => 240, :cssw => 100, :cssh => 60, :x => 20, :y => 260 },
|
76
|
+
{ :cssx => 0, :cssy => 300, :cssw => 120, :cssh => 50, :x => 10, :y => 320 }
|
77
|
+
]
|
78
|
+
verify_layout(120, 350, expected, images, :layout => :vertical, :hpadding => 10, :vpadding => 20)
|
79
|
+
end
|
80
|
+
|
81
|
+
#--------------------------------------------------------------------------
|
82
|
+
|
83
|
+
def test_fixed_vertical_layout_of_irregular_images
|
84
|
+
images = get_irregular_images
|
85
|
+
expected = [
|
86
|
+
{ :cssx => 0, :cssy => 0, :cssw => 100, :cssh => 100, :x => 40, :y => 25 },
|
87
|
+
{ :cssx => 0, :cssy => 100, :cssw => 100, :cssh => 100, :x => 30, :y => 130 },
|
88
|
+
{ :cssx => 0, :cssy => 200, :cssw => 100, :cssh => 100, :x => 20, :y => 235 },
|
89
|
+
{ :cssx => 0, :cssy => 300, :cssw => 100, :cssh => 100, :x => 10, :y => 340 },
|
90
|
+
{ :cssx => 0, :cssy => 400, :cssw => 100, :cssh => 100, :x => 0, :y => 445 }
|
91
|
+
]
|
92
|
+
verify_layout(100, 500, expected, images, :layout => :vertical, :width => 100, :height => 100)
|
93
|
+
end
|
94
|
+
|
95
|
+
#--------------------------------------------------------------------------
|
96
|
+
|
97
|
+
end # class VerticalTest
|
98
|
+
end # module Layout
|
99
|
+
end # module SpriteFactory
|
100
|
+
|
data/test/test_case.rb
CHANGED
@@ -80,6 +80,13 @@ module SpriteFactory
|
|
80
80
|
assert_match(msg, e.message) if msg
|
81
81
|
end
|
82
82
|
|
83
|
+
def assert_not_implemented(msg = nil)
|
84
|
+
e = assert_raise NotImplementedError do
|
85
|
+
yield
|
86
|
+
end
|
87
|
+
assert_match(msg, e.message) if msg
|
88
|
+
end
|
89
|
+
|
83
90
|
#----------------------------------------------------------------------------
|
84
91
|
|
85
92
|
def assert_reference_image(name)
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
+
- 2
|
7
8
|
- 0
|
8
|
-
|
9
|
-
version: 1.0.0
|
9
|
+
version: 1.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jake Gordon
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-05-08 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -50,15 +50,18 @@ executables:
|
|
50
50
|
- sf
|
51
51
|
extensions: []
|
52
52
|
|
53
|
-
extra_rdoc_files:
|
54
|
-
|
53
|
+
extra_rdoc_files:
|
54
|
+
- README.md
|
55
55
|
files:
|
56
|
+
- .gitignore
|
56
57
|
- LICENSE
|
57
58
|
- README.md
|
58
59
|
- Rakefile
|
59
60
|
- bin/sf
|
60
61
|
- lib/sprite_factory.rb
|
61
|
-
- lib/sprite_factory/layout.rb
|
62
|
+
- lib/sprite_factory/layout/horizontal.rb
|
63
|
+
- lib/sprite_factory/layout/packed.rb
|
64
|
+
- lib/sprite_factory/layout/vertical.rb
|
62
65
|
- lib/sprite_factory/library/chunky_png.rb
|
63
66
|
- lib/sprite_factory/library/rmagick.rb
|
64
67
|
- lib/sprite_factory/runner.rb
|
@@ -88,6 +91,8 @@ files:
|
|
88
91
|
- test/images/reference/irregular.fixed.png
|
89
92
|
- test/images/reference/irregular.horizontal.css
|
90
93
|
- test/images/reference/irregular.horizontal.png
|
94
|
+
- test/images/reference/irregular.packed.css
|
95
|
+
- test/images/reference/irregular.packed.png
|
91
96
|
- test/images/reference/irregular.padded.css
|
92
97
|
- test/images/reference/irregular.padded.png
|
93
98
|
- test/images/reference/irregular.png
|
@@ -103,6 +108,8 @@ files:
|
|
103
108
|
- test/images/reference/regular.fixed.png
|
104
109
|
- test/images/reference/regular.horizontal.css
|
105
110
|
- test/images/reference/regular.horizontal.png
|
111
|
+
- test/images/reference/regular.packed.css
|
112
|
+
- test/images/reference/regular.packed.png
|
106
113
|
- test/images/reference/regular.padded.css
|
107
114
|
- test/images/reference/regular.padded.png
|
108
115
|
- test/images/reference/regular.png
|
@@ -118,7 +125,10 @@ files:
|
|
118
125
|
- test/images/regular/regular4.png
|
119
126
|
- test/images/regular/regular5.png
|
120
127
|
- test/integration_test.rb
|
121
|
-
- test/
|
128
|
+
- test/layout/horizontal_test.rb
|
129
|
+
- test/layout/packed_test.rb
|
130
|
+
- test/layout/test_case.rb
|
131
|
+
- test/layout/vertical_test.rb
|
122
132
|
- test/library_test.rb
|
123
133
|
- test/runner_test.rb
|
124
134
|
- test/style_test.rb
|
@@ -128,8 +138,8 @@ homepage: https://github.com/jakesgordon/sprite-factory
|
|
128
138
|
licenses: []
|
129
139
|
|
130
140
|
post_install_message:
|
131
|
-
rdoc_options:
|
132
|
-
|
141
|
+
rdoc_options:
|
142
|
+
- --charset=UTF-8
|
133
143
|
require_paths:
|
134
144
|
- lib
|
135
145
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -1,89 +0,0 @@
|
|
1
|
-
module SpriteFactory
|
2
|
-
module Layout
|
3
|
-
|
4
|
-
#--------------------------------------------------------------------------
|
5
|
-
|
6
|
-
def self.horizontal(images, options = {})
|
7
|
-
width = options[:width]
|
8
|
-
height = options[:height]
|
9
|
-
hpadding = options[:hpadding] || 0
|
10
|
-
vpadding = options[:vpadding] || 0
|
11
|
-
max_height = height || ((2 * vpadding) + images.map{|i| i[:height]}.max)
|
12
|
-
x = 0
|
13
|
-
images.each do |i|
|
14
|
-
|
15
|
-
if width
|
16
|
-
i[:cssw] = width
|
17
|
-
i[:cssx] = x
|
18
|
-
i[:x] = x + (width - i[:width]) / 2
|
19
|
-
else
|
20
|
-
i[:cssw] = i[:width] + (2 * hpadding) # image width plus padding
|
21
|
-
i[:cssx] = x # anchored at x
|
22
|
-
i[:x] = i[:cssx] + hpadding # image drawn offset to account for padding
|
23
|
-
end
|
24
|
-
|
25
|
-
if height
|
26
|
-
i[:cssh] = height
|
27
|
-
i[:cssy] = 0
|
28
|
-
i[:y] = 0 + (height - i[:height]) / 2
|
29
|
-
else
|
30
|
-
i[:cssh] = i[:height] + (2 * vpadding) # image height plus padding
|
31
|
-
i[:cssy] = (max_height - i[:cssh]) / 2 # centered vertically
|
32
|
-
i[:y] = i[:cssy] + vpadding # image drawn offset to account for padding
|
33
|
-
end
|
34
|
-
|
35
|
-
x = x + i[:cssw]
|
36
|
-
|
37
|
-
end
|
38
|
-
{ :width => x, :height => max_height }
|
39
|
-
end
|
40
|
-
|
41
|
-
#--------------------------------------------------------------------------
|
42
|
-
|
43
|
-
def self.vertical(images, options = {})
|
44
|
-
width = options[:width]
|
45
|
-
height = options[:height]
|
46
|
-
hpadding = options[:hpadding] || 0
|
47
|
-
vpadding = options[:vpadding] || 0
|
48
|
-
max_width = width || ((2 * hpadding) + images.map{|i| i[:width]}.max)
|
49
|
-
y = 0
|
50
|
-
images.each do |i|
|
51
|
-
|
52
|
-
if width
|
53
|
-
i[:cssw] = width
|
54
|
-
i[:cssx] = 0
|
55
|
-
i[:x] = 0 + (width - i[:width]) / 2
|
56
|
-
else
|
57
|
-
i[:cssw] = i[:width] + (2 * hpadding) # image width plus padding
|
58
|
-
i[:cssx] = (max_width - i[:cssw]) / 2 # centered horizontally
|
59
|
-
i[:x] = i[:cssx] + hpadding # image drawn offset to account for padding
|
60
|
-
end
|
61
|
-
|
62
|
-
if height
|
63
|
-
i[:cssh] = height
|
64
|
-
i[:cssy] = y
|
65
|
-
i[:y] = y + (height - i[:height]) / 2
|
66
|
-
else
|
67
|
-
i[:cssh] = i[:height] + (2 * vpadding) # image height plus padding
|
68
|
-
i[:cssy] = y # anchored at y
|
69
|
-
i[:y] = i[:cssy] + vpadding # image drawn offset to account for padding
|
70
|
-
end
|
71
|
-
|
72
|
-
y = y + i[:cssh]
|
73
|
-
|
74
|
-
end
|
75
|
-
{ :width => max_width, :height => y }
|
76
|
-
end
|
77
|
-
|
78
|
-
#--------------------------------------------------------------------------
|
79
|
-
|
80
|
-
def self.knapsack(images)
|
81
|
-
|
82
|
-
raise NotImplementedError, "one day, when I have time, I'll do some kind of 'best-fit' algorithm"
|
83
|
-
|
84
|
-
end
|
85
|
-
|
86
|
-
#--------------------------------------------------------------------------
|
87
|
-
|
88
|
-
end
|
89
|
-
end
|
data/test/layout_test.rb
DELETED
@@ -1,228 +0,0 @@
|
|
1
|
-
require File.expand_path('test_case', File.dirname(__FILE__))
|
2
|
-
|
3
|
-
module SpriteFactory
|
4
|
-
class LayoutTest < SpriteFactory::TestCase
|
5
|
-
|
6
|
-
#==========================================================================
|
7
|
-
# test REGULAR images
|
8
|
-
#==========================================================================
|
9
|
-
|
10
|
-
def test_horizontal_layout_of_regular_images
|
11
|
-
images = get_regular_images
|
12
|
-
expected = [
|
13
|
-
{ :x => 0, :y => 0 },
|
14
|
-
{ :x => 20, :y => 0 },
|
15
|
-
{ :x => 40, :y => 0 },
|
16
|
-
{ :x => 60, :y => 0 },
|
17
|
-
{ :x => 80, :y => 0 }
|
18
|
-
]
|
19
|
-
verify_layout(100, 10, expected, images, :layout => :horizontal)
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
#--------------------------------------------------------------------------
|
24
|
-
|
25
|
-
def test_vertical_layout_of_regular_images
|
26
|
-
images = get_regular_images
|
27
|
-
expected = [
|
28
|
-
{ :x => 0, :y => 0 },
|
29
|
-
{ :x => 0, :y => 10 },
|
30
|
-
{ :x => 0, :y => 20 },
|
31
|
-
{ :x => 0, :y => 30 },
|
32
|
-
{ :x => 0, :y => 40 }
|
33
|
-
]
|
34
|
-
verify_layout(20, 50, expected, images, :layout => :vertical)
|
35
|
-
end
|
36
|
-
|
37
|
-
#--------------------------------------------------------------------------
|
38
|
-
|
39
|
-
def test_padded_horizontal_layout_of_regular_images
|
40
|
-
images = get_regular_images
|
41
|
-
expected = [
|
42
|
-
{ :cssx => 0, :cssy => 0, :cssw => 40, :cssh => 50, :x => 10, :y => 20 },
|
43
|
-
{ :cssx => 40, :cssy => 0, :cssw => 40, :cssh => 50, :x => 50, :y => 20 },
|
44
|
-
{ :cssx => 80, :cssy => 0, :cssw => 40, :cssh => 50, :x => 90, :y => 20 },
|
45
|
-
{ :cssx => 120, :cssy => 0, :cssw => 40, :cssh => 50, :x => 130, :y => 20 },
|
46
|
-
{ :cssx => 160, :cssy => 0, :cssw => 40, :cssh => 50, :x => 170, :y => 20 }
|
47
|
-
]
|
48
|
-
verify_layout(200, 50, expected, images, :layout => :horizontal, :hpadding => 10, :vpadding => 20)
|
49
|
-
end
|
50
|
-
|
51
|
-
#--------------------------------------------------------------------------
|
52
|
-
|
53
|
-
def test_padded_vertical_layout_of_regular_images
|
54
|
-
images = get_regular_images
|
55
|
-
expected = [
|
56
|
-
{ :cssx => 0, :cssy => 0, :cssw => 40, :cssh => 50, :x => 10, :y => 20 },
|
57
|
-
{ :cssx => 0, :cssy => 50, :cssw => 40, :cssh => 50, :x => 10, :y => 70 },
|
58
|
-
{ :cssx => 0, :cssy => 100, :cssw => 40, :cssh => 50, :x => 10, :y => 120 },
|
59
|
-
{ :cssx => 0, :cssy => 150, :cssw => 40, :cssh => 50, :x => 10, :y => 170 },
|
60
|
-
{ :cssx => 0, :cssy => 200, :cssw => 40, :cssh => 50, :x => 10, :y => 220 }
|
61
|
-
]
|
62
|
-
verify_layout(40, 250, expected, images, :layout => :vertical, :hpadding => 10, :vpadding => 20)
|
63
|
-
end
|
64
|
-
|
65
|
-
#--------------------------------------------------------------------------
|
66
|
-
|
67
|
-
def test_fixed_horizontal_layout_of_regular_images
|
68
|
-
images = get_regular_images
|
69
|
-
expected = [
|
70
|
-
{ :cssx => 0, :cssy => 0, :cssw => 50, :cssh => 50, :x => 15, :y => 20 },
|
71
|
-
{ :cssx => 50, :cssy => 0, :cssw => 50, :cssh => 50, :x => 65, :y => 20 },
|
72
|
-
{ :cssx => 100, :cssy => 0, :cssw => 50, :cssh => 50, :x => 115, :y => 20 },
|
73
|
-
{ :cssx => 150, :cssy => 0, :cssw => 50, :cssh => 50, :x => 165, :y => 20 },
|
74
|
-
{ :cssx => 200, :cssy => 0, :cssw => 50, :cssh => 50, :x => 215, :y => 20 }
|
75
|
-
]
|
76
|
-
verify_layout(250, 50, expected, images, :layout => :horizontal, :width => 50, :height => 50)
|
77
|
-
end
|
78
|
-
|
79
|
-
#--------------------------------------------------------------------------
|
80
|
-
|
81
|
-
def test_fixed_vertical_layout_of_regular_images
|
82
|
-
images = get_regular_images
|
83
|
-
expected = [
|
84
|
-
{ :cssx => 0, :cssy => 0, :cssw => 50, :cssh => 50, :x => 15, :y => 20 },
|
85
|
-
{ :cssx => 0, :cssy => 50, :cssw => 50, :cssh => 50, :x => 15, :y => 70 },
|
86
|
-
{ :cssx => 0, :cssy => 100, :cssw => 50, :cssh => 50, :x => 15, :y => 120 },
|
87
|
-
{ :cssx => 0, :cssy => 150, :cssw => 50, :cssh => 50, :x => 15, :y => 170 },
|
88
|
-
{ :cssx => 0, :cssy => 200, :cssw => 50, :cssh => 50, :x => 15, :y => 220 }
|
89
|
-
]
|
90
|
-
verify_layout(50, 250, expected, images, :layout => :vertical, :width => 50, :height => 50)
|
91
|
-
end
|
92
|
-
|
93
|
-
#==========================================================================
|
94
|
-
# test IRREGULAR images
|
95
|
-
#==========================================================================
|
96
|
-
|
97
|
-
def test_horizontal_layout_of_irregular_images
|
98
|
-
images = get_irregular_images
|
99
|
-
expected = [
|
100
|
-
{ :x => 0, :y => 0 },
|
101
|
-
{ :x => 20, :y => 5 },
|
102
|
-
{ :x => 60, :y => 10 },
|
103
|
-
{ :x => 120, :y => 15 },
|
104
|
-
{ :x => 200, :y => 20 }
|
105
|
-
]
|
106
|
-
verify_layout(300, 50, expected, images, :layout => :horizontal)
|
107
|
-
end
|
108
|
-
|
109
|
-
#--------------------------------------------------------------------------
|
110
|
-
|
111
|
-
def test_vertical_layout_of_irregular_images
|
112
|
-
images = get_irregular_images
|
113
|
-
expected = [
|
114
|
-
{ :x => 40, :y => 0 },
|
115
|
-
{ :x => 30, :y => 50 },
|
116
|
-
{ :x => 20, :y => 90 },
|
117
|
-
{ :x => 10, :y => 120 },
|
118
|
-
{ :x => 0, :y => 140 }
|
119
|
-
]
|
120
|
-
verify_layout(100, 150, expected, images, :layout => :vertical)
|
121
|
-
end
|
122
|
-
|
123
|
-
#--------------------------------------------------------------------------
|
124
|
-
|
125
|
-
def test_padded_horizontal_layout_of_irregular_images
|
126
|
-
images = get_irregular_images
|
127
|
-
expected = [
|
128
|
-
{ :cssx => 0, :cssy => 0, :cssw => 40, :cssh => 90, :x => 10, :y => 20 },
|
129
|
-
{ :cssx => 40, :cssy => 5, :cssw => 60, :cssh => 80, :x => 50, :y => 25 },
|
130
|
-
{ :cssx => 100, :cssy => 10, :cssw => 80, :cssh => 70, :x => 110, :y => 30 },
|
131
|
-
{ :cssx => 180, :cssy => 15, :cssw => 100, :cssh => 60, :x => 190, :y => 35 },
|
132
|
-
{ :cssx => 280, :cssy => 20, :cssw => 120, :cssh => 50, :x => 290, :y => 40 }
|
133
|
-
]
|
134
|
-
verify_layout(400, 90, expected, images, :layout => :horizontal, :hpadding => 10, :vpadding => 20)
|
135
|
-
end
|
136
|
-
|
137
|
-
#--------------------------------------------------------------------------
|
138
|
-
|
139
|
-
def test_padded_vertical_layout_of_irregular_images
|
140
|
-
images = get_irregular_images
|
141
|
-
expected = [
|
142
|
-
{ :cssx => 40, :cssy => 0, :cssw => 40, :cssh => 90, :x => 50, :y => 20 },
|
143
|
-
{ :cssx => 30, :cssy => 90, :cssw => 60, :cssh => 80, :x => 40, :y => 110 },
|
144
|
-
{ :cssx => 20, :cssy => 170, :cssw => 80, :cssh => 70, :x => 30, :y => 190 },
|
145
|
-
{ :cssx => 10, :cssy => 240, :cssw => 100, :cssh => 60, :x => 20, :y => 260 },
|
146
|
-
{ :cssx => 0, :cssy => 300, :cssw => 120, :cssh => 50, :x => 10, :y => 320 }
|
147
|
-
]
|
148
|
-
verify_layout(120, 350, expected, images, :layout => :vertical, :hpadding => 10, :vpadding => 20)
|
149
|
-
end
|
150
|
-
|
151
|
-
#--------------------------------------------------------------------------
|
152
|
-
|
153
|
-
def test_fixed_horizontal_layout_of_irregular_images
|
154
|
-
images = get_irregular_images
|
155
|
-
expected = [
|
156
|
-
{ :cssx => 0, :cssy => 0, :cssw => 100, :cssh => 100, :x => 40, :y => 25 },
|
157
|
-
{ :cssx => 100, :cssy => 0, :cssw => 100, :cssh => 100, :x => 130, :y => 30 },
|
158
|
-
{ :cssx => 200, :cssy => 0, :cssw => 100, :cssh => 100, :x => 220, :y => 35 },
|
159
|
-
{ :cssx => 300, :cssy => 0, :cssw => 100, :cssh => 100, :x => 310, :y => 40 },
|
160
|
-
{ :cssx => 400, :cssy => 0, :cssw => 100, :cssh => 100, :x => 400, :y => 45 }
|
161
|
-
]
|
162
|
-
verify_layout(500, 100, expected, images, :layout => :horizontal, :width => 100, :height => 100)
|
163
|
-
end
|
164
|
-
|
165
|
-
#--------------------------------------------------------------------------
|
166
|
-
|
167
|
-
def test_fixed_vertical_layout_of_irregular_images
|
168
|
-
images = get_irregular_images
|
169
|
-
expected = [
|
170
|
-
{ :cssx => 0, :cssy => 0, :cssw => 100, :cssh => 100, :x => 40, :y => 25 },
|
171
|
-
{ :cssx => 0, :cssy => 100, :cssw => 100, :cssh => 100, :x => 30, :y => 130 },
|
172
|
-
{ :cssx => 0, :cssy => 200, :cssw => 100, :cssh => 100, :x => 20, :y => 235 },
|
173
|
-
{ :cssx => 0, :cssy => 300, :cssw => 100, :cssh => 100, :x => 10, :y => 340 },
|
174
|
-
{ :cssx => 0, :cssy => 400, :cssw => 100, :cssh => 100, :x => 0, :y => 445 }
|
175
|
-
]
|
176
|
-
verify_layout(100, 500, expected, images, :layout => :vertical, :width => 100, :height => 100)
|
177
|
-
end
|
178
|
-
|
179
|
-
#==========================================================================
|
180
|
-
# private test helpers
|
181
|
-
#==========================================================================
|
182
|
-
|
183
|
-
private
|
184
|
-
|
185
|
-
def get_regular_images
|
186
|
-
return [
|
187
|
-
{:width => 20, :height => 10},
|
188
|
-
{:width => 20, :height => 10},
|
189
|
-
{:width => 20, :height => 10},
|
190
|
-
{:width => 20, :height => 10},
|
191
|
-
{:width => 20, :height => 10}
|
192
|
-
]
|
193
|
-
end
|
194
|
-
|
195
|
-
def get_irregular_images
|
196
|
-
return [
|
197
|
-
{:width => 20, :height => 50},
|
198
|
-
{:width => 40, :height => 40},
|
199
|
-
{:width => 60, :height => 30},
|
200
|
-
{:width => 80, :height => 20},
|
201
|
-
{:width => 100, :height => 10}
|
202
|
-
]
|
203
|
-
end
|
204
|
-
|
205
|
-
#--------------------------------------------------------------------------
|
206
|
-
|
207
|
-
def verify_layout(expected_width, expected_height, expected_images, images, options = {})
|
208
|
-
max = Layout.send(options[:layout] || :horizontal, images, options)
|
209
|
-
assert_equal(expected_width, max[:width])
|
210
|
-
assert_equal(expected_height, max[:height])
|
211
|
-
assert_equal(expected_images.length, images.length)
|
212
|
-
images.length.times.each do |n|
|
213
|
-
expected = expected_images[n]
|
214
|
-
actual = images[n]
|
215
|
-
assert_equal(expected[:x], actual[:x], "image #{n} - unexpected x")
|
216
|
-
assert_equal(expected[:y], actual[:y], "image #{n} - unexpected y")
|
217
|
-
assert_equal(expected[:cssx] || expected[:x], actual[:cssx], "image #{n} - unexpected cssx")
|
218
|
-
assert_equal(expected[:cssy] || expected[:y], actual[:cssy], "image #{n} - unexpected cssy")
|
219
|
-
assert_equal(expected[:cssw] || actual[:width], actual[:cssw], "image #{n} - unexpected cssw")
|
220
|
-
assert_equal(expected[:cssh] || actual[:height], actual[:cssh], "image #{n} - unexpected cssh")
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
#--------------------------------------------------------------------------
|
225
|
-
|
226
|
-
end # class LayoutTest
|
227
|
-
end # module SpriteFactory
|
228
|
-
|