slidefield 0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +674 -0
- data/README.md +254 -0
- data/Rakefile +7 -0
- data/bin/slidefield +89 -0
- data/examples/complete/assets/K2.jpg +0 -0
- data/examples/complete/assets/gobi.jpg +0 -0
- data/examples/complete/assets/mount_everest.jpg +0 -0
- data/examples/complete/assets/sahara.jpg +0 -0
- data/examples/complete/main.sfp +7 -0
- data/examples/complete/slides/deserts.sfi +19 -0
- data/examples/complete/slides/mountains.sfi +25 -0
- data/examples/complete/templates.sfi +95 -0
- data/examples/complete/variables.sfi +6 -0
- data/examples/minimal/main.sfp +43 -0
- data/examples/minimal/ruby-logo.png +0 -0
- data/lib/slidefield/animator.rb +104 -0
- data/lib/slidefield/errors.rb +6 -0
- data/lib/slidefield/interpreter.rb +414 -0
- data/lib/slidefield/object_data.rb +78 -0
- data/lib/slidefield/object_manager.rb +29 -0
- data/lib/slidefield/object_rules.rb +79 -0
- data/lib/slidefield/objects/_base.rb +29 -0
- data/lib/slidefield/objects/_root.rb +10 -0
- data/lib/slidefield/objects/animation.rb +10 -0
- data/lib/slidefield/objects/debug.rb +18 -0
- data/lib/slidefield/objects/image.rb +47 -0
- data/lib/slidefield/objects/include.rb +9 -0
- data/lib/slidefield/objects/layout.rb +10 -0
- data/lib/slidefield/objects/rect.rb +44 -0
- data/lib/slidefield/objects/slide.rb +43 -0
- data/lib/slidefield/objects/song.rb +31 -0
- data/lib/slidefield/objects/text.rb +57 -0
- data/lib/slidefield/parser.rb +99 -0
- data/lib/slidefield/version.rb +3 -0
- data/lib/slidefield/viewer.rb +89 -0
- data/lib/slidefield.rb +27 -0
- data/slidefield.gemspec +27 -0
- data/test/helper.rb +11 -0
- data/test/resources/include_sub.sfp +1 -0
- data/test/resources/parse_error.sfp +1 -0
- data/test/resources/recursive_include.sfp +1 -0
- data/test/resources/sub/include_parent.sfp +1 -0
- data/test/resources/unclosed_object.sfp +2 -0
- data/test/resources/unknown_object.sfp +1 -0
- data/test/resources/wrong_template.sfp +4 -0
- data/test/test_animator.rb +244 -0
- data/test/test_examples.rb +29 -0
- data/test/test_interpreter.rb +1766 -0
- data/test/test_object_data.rb +108 -0
- data/test/test_object_manager.rb +48 -0
- data/test/test_object_rules.rb +87 -0
- data/test/test_parser.rb +408 -0
- metadata +199 -0
@@ -0,0 +1,244 @@
|
|
1
|
+
require File.expand_path '../helper', __FILE__
|
2
|
+
|
3
|
+
class TestAnimator < MiniTest::Test
|
4
|
+
def setup
|
5
|
+
@animator = SlideField::Animator.new [1000,500]
|
6
|
+
@assert_number = 0
|
7
|
+
end
|
8
|
+
|
9
|
+
def get_object(anim_name, duration)
|
10
|
+
|
11
|
+
a = SlideField::ObjectData.new :animation, 'animation loc'
|
12
|
+
a.set :name, anim_name, 'name loc', :string
|
13
|
+
a.set :duration, duration, 'duration loc', :integer
|
14
|
+
|
15
|
+
obj = SlideField::ObjectData.new :object, 'object loc'
|
16
|
+
a << obj
|
17
|
+
obj
|
18
|
+
end
|
19
|
+
|
20
|
+
def assert_animation(anim_name, duration, tests)
|
21
|
+
obj = get_object anim_name, duration
|
22
|
+
tests.each_with_index {|test, index|
|
23
|
+
time, current, forward, assertions = test
|
24
|
+
|
25
|
+
@animator.frame time, current, forward do
|
26
|
+
tr = @animator.transform obj
|
27
|
+
|
28
|
+
assertions.each {|k,v|
|
29
|
+
assert_same v, tr[k], "tr.#{k} in test #{index + 1}"
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
assert @animator.need_redraw?,
|
34
|
+
"animator.need_redraw? in test #{index + 1}"
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_need_redraw
|
39
|
+
obj = get_object 'fade', 50
|
40
|
+
|
41
|
+
# initial value
|
42
|
+
assert @animator.need_redraw?
|
43
|
+
|
44
|
+
# start animation
|
45
|
+
@animator.frame 0, true, false do
|
46
|
+
@animator.transform obj
|
47
|
+
end
|
48
|
+
assert @animator.need_redraw?
|
49
|
+
|
50
|
+
# end animation
|
51
|
+
@animator.frame 50, true, false do
|
52
|
+
@animator.transform obj
|
53
|
+
end
|
54
|
+
assert @animator.need_redraw?
|
55
|
+
|
56
|
+
# finish the job
|
57
|
+
@animator.frame 100, true, false do
|
58
|
+
@animator.transform obj
|
59
|
+
end
|
60
|
+
refute @animator.need_redraw?
|
61
|
+
|
62
|
+
# prepare to restart over
|
63
|
+
@animator.reset
|
64
|
+
assert @animator.need_redraw?
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_outside_frame
|
68
|
+
@animator.frame(nil, nil, nil) {}
|
69
|
+
|
70
|
+
error = assert_raises RuntimeError do
|
71
|
+
@animator.transform nil
|
72
|
+
end
|
73
|
+
|
74
|
+
assert_equal "Can not animate outside a frame", error.message
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_unsupported
|
78
|
+
error = assert_raises SlideField::RuntimeError do
|
79
|
+
assert_animation 'aaaa', 0, [0, true, false, {}]
|
80
|
+
end
|
81
|
+
|
82
|
+
assert_equal "Unsupported animation 'aaaa'", error.message
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_fade_in
|
86
|
+
assert_animation 'fade', 100, [
|
87
|
+
[0, true, nil, {:opacity=>0.0}],
|
88
|
+
[50, true, nil, {:opacity=>0.5}],
|
89
|
+
[100, true, nil, {:opacity=>1.0}],
|
90
|
+
]
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_fade_out
|
94
|
+
assert_animation 'fade', 100, [
|
95
|
+
[0, false, nil, {:opacity=>1.0}],
|
96
|
+
[50, false, nil, {:opacity=>0.5}],
|
97
|
+
[100, false, nil, {:opacity=>0.0}],
|
98
|
+
]
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_slide_right_current_forward
|
102
|
+
assert_animation 'slide right', 100, [
|
103
|
+
[0, true, true, {:x_offset=>-1000.0}],
|
104
|
+
[50, true, true, {:x_offset=>-500.0}],
|
105
|
+
[100, true, true, {:x_offset=>0.0}],
|
106
|
+
]
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_slide_right_current_backward
|
110
|
+
assert_animation 'slide right', 100, [
|
111
|
+
[0, true, false, {:x_offset=>1000.0}],
|
112
|
+
[50, true, false, {:x_offset=>500.0}],
|
113
|
+
[100, true, false, {:x_offset=>0.0}],
|
114
|
+
]
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_slide_right_previous_forward
|
118
|
+
assert_animation 'slide right', 100, [
|
119
|
+
[0, false, true, {:x_offset=>0.0}],
|
120
|
+
[50, false, true, {:x_offset=>500.0}],
|
121
|
+
[100, false, true, {:x_offset=>1000.0}],
|
122
|
+
]
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_slide_right_previous_backward
|
126
|
+
assert_animation 'slide right', 100, [
|
127
|
+
[0, false, false, {:x_offset=>0.0}],
|
128
|
+
[50, false, false, {:x_offset=>-500.0}],
|
129
|
+
[100, false, false, {:x_offset=>-1000.0}],
|
130
|
+
]
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_slide_left_current_forward
|
134
|
+
assert_animation 'slide left', 100, [
|
135
|
+
[0, true, true, {:x_offset=>1000.0}],
|
136
|
+
[50, true, true, {:x_offset=>500.0}],
|
137
|
+
[100, true, true, {:x_offset=>0.0}],
|
138
|
+
]
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_slide_left_current_backward
|
142
|
+
assert_animation 'slide left', 100, [
|
143
|
+
[0, true, false, {:x_offset=>-1000.0}],
|
144
|
+
[50, true, false, {:x_offset=>-500.0}],
|
145
|
+
[100, true, false, {:x_offset=>0.0}],
|
146
|
+
]
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_slide_left_previous_forward
|
150
|
+
assert_animation 'slide left', 100, [
|
151
|
+
[0, false, true, {:x_offset=>0.0}],
|
152
|
+
[50, false, true, {:x_offset=>-500.0}],
|
153
|
+
[100, false, true, {:x_offset=>-1000.0}],
|
154
|
+
]
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_slide_left_previous_backward
|
158
|
+
assert_animation 'slide left', 100, [
|
159
|
+
[0, false, false, {:x_offset=>0.0}],
|
160
|
+
[50, false, false, {:x_offset=>500.0}],
|
161
|
+
[100, false, false, {:x_offset=>1000.0}],
|
162
|
+
]
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_slide_down_current_forward
|
166
|
+
assert_animation 'slide down', 100, [
|
167
|
+
[0, true, true, {:y_offset=>-500.0}],
|
168
|
+
[50, true, true, {:y_offset=>-250.0}],
|
169
|
+
[100, true, true, {:y_offset=>0.0}],
|
170
|
+
]
|
171
|
+
end
|
172
|
+
|
173
|
+
def test_slide_down_current_backward
|
174
|
+
assert_animation 'slide down', 100, [
|
175
|
+
[0, true, false, {:y_offset=>500.0}],
|
176
|
+
[50, true, false, {:y_offset=>250.0}],
|
177
|
+
[100, true, false, {:y_offset=>0.0}],
|
178
|
+
]
|
179
|
+
end
|
180
|
+
|
181
|
+
def test_slide_down_previous_forward
|
182
|
+
assert_animation 'slide down', 100, [
|
183
|
+
[0, false, true, {:y_offset=>0.0}],
|
184
|
+
[50, false, true, {:y_offset=>250.0}],
|
185
|
+
[100, false, true, {:y_offset=>500.0}],
|
186
|
+
]
|
187
|
+
end
|
188
|
+
|
189
|
+
def test_slide_down_previous_backward
|
190
|
+
assert_animation 'slide down', 100, [
|
191
|
+
[0, false, false, {:y_offset=>0.0}],
|
192
|
+
[50, false, false, {:y_offset=>-250.0}],
|
193
|
+
[100, false, false, {:y_offset=>-500.0}],
|
194
|
+
]
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_slide_up_current_forward
|
198
|
+
assert_animation 'slide up', 100, [
|
199
|
+
[0, true, true, {:y_offset=>500.0}],
|
200
|
+
[50, true, true, {:y_offset=>250.0}],
|
201
|
+
[100, true, true, {:y_offset=>0.0}],
|
202
|
+
]
|
203
|
+
end
|
204
|
+
|
205
|
+
def test_slide_up_current_backward
|
206
|
+
assert_animation 'slide up', 100, [
|
207
|
+
[0, true, false, {:y_offset=>-500.0}],
|
208
|
+
[50, true, false, {:y_offset=>-250.0}],
|
209
|
+
[100, true, false, {:y_offset=>0.0}],
|
210
|
+
]
|
211
|
+
end
|
212
|
+
|
213
|
+
def test_slide_up_previous_forward
|
214
|
+
assert_animation 'slide up', 100, [
|
215
|
+
[0, false, true, {:y_offset=>0.0}],
|
216
|
+
[50, false, true, {:y_offset=>-250.0}],
|
217
|
+
[100, false, true, {:y_offset=>-500.0}],
|
218
|
+
]
|
219
|
+
end
|
220
|
+
|
221
|
+
def test_slide_up_previous_backward
|
222
|
+
assert_animation 'slide up', 100, [
|
223
|
+
[0, false, false, {:y_offset=>0.0}],
|
224
|
+
[50, false, false, {:y_offset=>250.0}],
|
225
|
+
[100, false, false, {:y_offset=>500.0}],
|
226
|
+
]
|
227
|
+
end
|
228
|
+
|
229
|
+
def test_zoom_in
|
230
|
+
assert_animation 'zoom', 100, [
|
231
|
+
[0, true, nil, {:scale=>0.0}],
|
232
|
+
[50, true, nil, {:scale=>0.5}],
|
233
|
+
[100, true, nil, {:scale=>1.0}],
|
234
|
+
]
|
235
|
+
end
|
236
|
+
|
237
|
+
def test_zoom_out
|
238
|
+
assert_animation 'zoom', 100, [
|
239
|
+
[0, false, nil, {:scale=>1.0}],
|
240
|
+
[50, false, nil, {:scale=>0.5}],
|
241
|
+
[100, false, nil, {:scale=>0.0}],
|
242
|
+
]
|
243
|
+
end
|
244
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.expand_path '../helper', __FILE__
|
2
|
+
|
3
|
+
class TestExamples < MiniTest::Test
|
4
|
+
def setup
|
5
|
+
@interpreter = SlideField::Interpreter.new
|
6
|
+
@path = File.expand_path '../examples', __dir__
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_minimal
|
10
|
+
@interpreter.run_file @path + '/minimal/main.sfp'
|
11
|
+
|
12
|
+
assert_equal @path + '/minimal/', @interpreter.root.include_path
|
13
|
+
assert_equal 'main.sfp', @interpreter.root.context
|
14
|
+
assert_equal @path + '/minimal/', @interpreter.root[:layout].first.include_path
|
15
|
+
assert_equal 'main.sfp', @interpreter.root[:layout].first.context
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_complete
|
19
|
+
@interpreter.run_file @path + '/complete/main.sfp'
|
20
|
+
|
21
|
+
assert_equal @path + '/complete/slides/', @interpreter.root[:slide].first.include_path
|
22
|
+
assert_equal @path + '/complete/slides/', @interpreter.root[:slide].first.children.first.include_path
|
23
|
+
assert_equal 'slides/mountains.sfi', @interpreter.root[:slide].first.context
|
24
|
+
assert_equal 'slides/mountains.sfi', @interpreter.root[:slide].first.children.first.context
|
25
|
+
|
26
|
+
assert_equal @path + '/complete/', @interpreter.root.include_path
|
27
|
+
assert_equal 'main.sfp', @interpreter.root.context
|
28
|
+
end
|
29
|
+
end
|