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.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +674 -0
  5. data/README.md +254 -0
  6. data/Rakefile +7 -0
  7. data/bin/slidefield +89 -0
  8. data/examples/complete/assets/K2.jpg +0 -0
  9. data/examples/complete/assets/gobi.jpg +0 -0
  10. data/examples/complete/assets/mount_everest.jpg +0 -0
  11. data/examples/complete/assets/sahara.jpg +0 -0
  12. data/examples/complete/main.sfp +7 -0
  13. data/examples/complete/slides/deserts.sfi +19 -0
  14. data/examples/complete/slides/mountains.sfi +25 -0
  15. data/examples/complete/templates.sfi +95 -0
  16. data/examples/complete/variables.sfi +6 -0
  17. data/examples/minimal/main.sfp +43 -0
  18. data/examples/minimal/ruby-logo.png +0 -0
  19. data/lib/slidefield/animator.rb +104 -0
  20. data/lib/slidefield/errors.rb +6 -0
  21. data/lib/slidefield/interpreter.rb +414 -0
  22. data/lib/slidefield/object_data.rb +78 -0
  23. data/lib/slidefield/object_manager.rb +29 -0
  24. data/lib/slidefield/object_rules.rb +79 -0
  25. data/lib/slidefield/objects/_base.rb +29 -0
  26. data/lib/slidefield/objects/_root.rb +10 -0
  27. data/lib/slidefield/objects/animation.rb +10 -0
  28. data/lib/slidefield/objects/debug.rb +18 -0
  29. data/lib/slidefield/objects/image.rb +47 -0
  30. data/lib/slidefield/objects/include.rb +9 -0
  31. data/lib/slidefield/objects/layout.rb +10 -0
  32. data/lib/slidefield/objects/rect.rb +44 -0
  33. data/lib/slidefield/objects/slide.rb +43 -0
  34. data/lib/slidefield/objects/song.rb +31 -0
  35. data/lib/slidefield/objects/text.rb +57 -0
  36. data/lib/slidefield/parser.rb +99 -0
  37. data/lib/slidefield/version.rb +3 -0
  38. data/lib/slidefield/viewer.rb +89 -0
  39. data/lib/slidefield.rb +27 -0
  40. data/slidefield.gemspec +27 -0
  41. data/test/helper.rb +11 -0
  42. data/test/resources/include_sub.sfp +1 -0
  43. data/test/resources/parse_error.sfp +1 -0
  44. data/test/resources/recursive_include.sfp +1 -0
  45. data/test/resources/sub/include_parent.sfp +1 -0
  46. data/test/resources/unclosed_object.sfp +2 -0
  47. data/test/resources/unknown_object.sfp +1 -0
  48. data/test/resources/wrong_template.sfp +4 -0
  49. data/test/test_animator.rb +244 -0
  50. data/test/test_examples.rb +29 -0
  51. data/test/test_interpreter.rb +1766 -0
  52. data/test/test_object_data.rb +108 -0
  53. data/test/test_object_manager.rb +48 -0
  54. data/test/test_object_rules.rb +87 -0
  55. data/test/test_parser.rb +408 -0
  56. 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