smalruby-editor 0.1.6-x86-mingw32 → 0.1.7-x86-mingw32
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.
Potentially problematic release.
This version of smalruby-editor might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/assets/javascripts/blocks/hardware.js.coffee.erb +40 -3
- data/app/assets/stylesheets/toolbox.css.scss.erb +1 -6
- data/app/controllers/source_codes_controller.rb +5 -1
- data/app/models/concerns/ruby_to_block/block/base.rb +251 -0
- data/app/models/concerns/ruby_to_block/block/character.rb +42 -0
- data/app/models/concerns/ruby_to_block/block/character_event.rb +27 -0
- data/app/models/concerns/ruby_to_block/block/character_method_call.rb +29 -0
- data/app/models/concerns/ruby_to_block/block/character_new.rb +7 -0
- data/app/models/concerns/ruby_to_block/block/character_operation.rb +80 -0
- data/app/models/concerns/ruby_to_block/block/control_if.rb +45 -0
- data/app/models/concerns/ruby_to_block/block/control_loop.rb +19 -0
- data/app/models/concerns/ruby_to_block/block/control_sleep.rb +18 -0
- data/app/models/concerns/ruby_to_block/block/do.rb +24 -0
- data/app/models/concerns/ruby_to_block/block/else.rb +12 -0
- data/app/models/concerns/ruby_to_block/block/end.rb +26 -0
- data/app/models/concerns/ruby_to_block/block/events_on_click.rb +14 -0
- data/app/models/concerns/ruby_to_block/block/events_on_key_push_or_down.rb +17 -0
- data/app/models/concerns/ruby_to_block/block/events_on_start.rb +14 -0
- data/app/models/concerns/ruby_to_block/block/hardware_init_hardware.rb +14 -0
- data/app/models/concerns/ruby_to_block/block/hardware_led_off.rb +16 -0
- data/app/models/concerns/ruby_to_block/block/hardware_led_on.rb +16 -0
- data/app/models/concerns/ruby_to_block/block/hardware_on_sensor_change.rb +17 -0
- data/app/models/concerns/ruby_to_block/block/hardware_rgb_led_off.rb +18 -0
- data/app/models/concerns/ruby_to_block/block/hardware_rgb_led_on.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/hardware_sensor_value.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car.rb +26 -0
- data/app/models/concerns/ruby_to_block/block/looks_hide.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/looks_say.rb +20 -0
- data/app/models/concerns/ruby_to_block/block/looks_show.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/looks_vanish.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/math_number.rb +14 -0
- data/app/models/concerns/ruby_to_block/block/motion_change_x_by.rb +20 -0
- data/app/models/concerns/ruby_to_block/block/motion_change_y_by.rb +20 -0
- data/app/models/concerns/ruby_to_block/block/motion_move.rb +15 -0
- data/app/models/concerns/ruby_to_block/block/motion_point_towards_character.rb +24 -0
- data/app/models/concerns/ruby_to_block/block/motion_point_towards_mouse.rb +9 -0
- data/app/models/concerns/ruby_to_block/block/motion_reach_wall.rb +24 -0
- data/app/models/concerns/ruby_to_block/block/motion_rotate_left.rb +20 -0
- data/app/models/concerns/ruby_to_block/block/motion_rotate_right.rb +20 -0
- data/app/models/concerns/ruby_to_block/block/motion_self_angle.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/motion_self_x.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/motion_self_y.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/motion_set_angle.rb +15 -0
- data/app/models/concerns/ruby_to_block/block/motion_set_x.rb +38 -0
- data/app/models/concerns/ruby_to_block/block/motion_set_y.rb +15 -0
- data/app/models/concerns/ruby_to_block/block/motion_turn.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/motion_turn_if_reach_wall.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/null.rb +17 -0
- data/app/models/concerns/ruby_to_block/block/operators_compare.rb +36 -0
- data/app/models/concerns/ruby_to_block/block/operators_false.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/operators_true.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/require_smalruby.rb +7 -0
- data/app/models/concerns/ruby_to_block/block/ruby_comment.rb +16 -0
- data/app/models/concerns/ruby_to_block/block/ruby_expression.rb +14 -0
- data/app/models/concerns/ruby_to_block/block/ruby_statement.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/sensing_hit.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/sound_play.rb +15 -0
- data/app/models/concerns/ruby_to_block/block/sound_preset_sounds.rb +31 -0
- data/app/models/concerns/ruby_to_block/block/text.rb +15 -0
- data/app/models/concerns/ruby_to_block/block/value.rb +12 -0
- data/app/models/concerns/ruby_to_block/block.rb +97 -0
- data/app/models/concerns/ruby_to_block/context.rb +97 -0
- data/app/models/concerns/ruby_to_block/formatter.rb +26 -0
- data/app/models/concerns/ruby_to_block.rb +17 -360
- data/app/models/source_code.rb +3 -1
- data/app/views/editor/_toolbox.html.haml +16 -0
- data/lib/smalruby_editor/version.rb +3 -3
- data/public/assets/{application-64a390efe879c386a5950515064f062d.css → application-28b7bed56c5389dfa372e972c75b6676.css} +17 -10
- data/public/assets/application-28b7bed56c5389dfa372e972c75b6676.css.gz +0 -0
- data/public/assets/{application-8bfffad1222d4e198f3c7ccc1cbd774f.js → application-4f747690ebc8ec4815ae36021fdb2c44.js} +135 -0
- data/public/assets/{application-8bfffad1222d4e198f3c7ccc1cbd774f.js.gz → application-4f747690ebc8ec4815ae36021fdb2c44.js.gz} +0 -0
- data/public/assets/manifest-332a5a1668194028b55103e0ea45c054.json +1 -1
- data/smalruby-editor.gemspec +1 -1
- data/spec/acceptance/block_mode/blocks/hardware/two_wheel_drive_car.feature +69 -0
- data/spec/acceptance/ruby_mode/translate.feature +1 -1
- data/spec/controllers/source_codes_controller_spec.rb +14 -11
- data/spec/models/concerns/ruby_to_block/block/character_method_call_spec.rb +175 -0
- data/spec/models/concerns/ruby_to_block/block/control_if_spec.rb +75 -0
- data/spec/models/concerns/ruby_to_block/block/control_loop_spec.rb +68 -0
- data/spec/models/concerns/ruby_to_block/block/events_on_start_spec.rb +120 -0
- data/spec/models/concerns/ruby_to_block/block/hardware_spec.rb +120 -0
- data/spec/models/concerns/ruby_to_block/block/looks_say_spec.rb +79 -0
- data/spec/models/concerns/ruby_to_block/block/looks_spec.rb +74 -0
- data/spec/models/concerns/ruby_to_block/block/motion_move_spec.rb +63 -0
- data/spec/models/concerns/ruby_to_block/block/motion_reach_wall_spec.rb +67 -0
- data/spec/models/concerns/ruby_to_block/block/motion_spec.rb +392 -0
- data/spec/models/concerns/ruby_to_block/block/motion_turn_spec.rb +54 -0
- data/spec/models/concerns/ruby_to_block/block/require_smalruby_spec.rb +39 -0
- data/spec/models/concerns/ruby_to_block/block/ruby_comment_spec.rb +55 -0
- data/spec/models/concerns/ruby_to_block/block/ruby_statement_spec.rb +113 -0
- data/spec/models/concerns/ruby_to_block/block/shared/block_examples.rb +44 -0
- data/spec/models/concerns/ruby_to_block/block/sound_spec.rb +46 -0
- data/spec/models/concerns/ruby_to_block/block_spec.rb +49 -0
- data/spec/models/concerns/ruby_to_block_spec.rb +421 -217
- data/spec/support/ruby_to_block.rb +10 -0
- metadata +108 -10
- data/public/assets/application-64a390efe879c386a5950515064f062d.css.gz +0 -0
@@ -1,268 +1,436 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
require 'spec_helper'
|
3
|
-
|
4
|
-
def compact_source_code(source_code)
|
5
|
-
source_code.lines.map(&:strip).reject(&:empty?).join(';')[0...80]
|
6
|
-
end
|
3
|
+
require_relative 'ruby_to_block/block/shared/block_examples'
|
7
4
|
|
8
5
|
# rubocop:disable EmptyLines, LineLength
|
9
6
|
|
10
7
|
describe RubyToBlock do
|
11
|
-
describe '#to_blocks' do
|
12
|
-
|
13
|
-
|
14
|
-
subject { source_code.to_blocks }
|
15
|
-
|
16
|
-
_data = <<-EOS.strip_heredoc
|
17
|
-
require "smalruby"
|
18
|
-
EOS
|
19
|
-
describe compact_source_code(_data) do
|
20
|
-
__data = _data
|
21
|
-
let(:data) { __data }
|
22
|
-
|
23
|
-
it { should eq('') }
|
24
|
-
end
|
25
|
-
|
26
|
-
_data = <<-EOS.strip_heredoc
|
8
|
+
describe '#to_blocks', to_blocks: true do
|
9
|
+
context '成功する場合' do
|
10
|
+
_data = <<-EOS
|
27
11
|
require "smalruby"
|
28
12
|
|
29
13
|
car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
|
30
14
|
|
31
15
|
car1.on(:start) do
|
32
|
-
|
16
|
+
loop do
|
17
|
+
move(10)
|
18
|
+
turn_if_reach_wall
|
19
|
+
end
|
33
20
|
end
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
21
|
+
EOS
|
22
|
+
describe compact_source_code(_data) do
|
23
|
+
__data = _data
|
24
|
+
let(:data) { __data }
|
38
25
|
|
39
|
-
|
40
|
-
|
41
|
-
<xml xmlns="http://www.w3.org/1999/xhtml">
|
26
|
+
it '結果が正しいこと' do
|
27
|
+
should eq_block_xml(<<-XML)
|
42
28
|
<character name="car1" x="0" y="0" angle="0" costumes="car1.png" />
|
43
29
|
<block type="character_new">
|
44
30
|
<field name="NAME">car1</field>
|
45
31
|
<statement name="DO">
|
46
|
-
<block type="events_on_start"
|
32
|
+
<block type="events_on_start">
|
33
|
+
<statement name="DO">
|
34
|
+
<block type="control_loop">
|
35
|
+
<statement name="DO">
|
36
|
+
<block type="motion_move" inline="true">
|
37
|
+
<value name="STEP">
|
38
|
+
<block type="math_number">
|
39
|
+
<field name="NUM">10</field>
|
40
|
+
</block>
|
41
|
+
</value>
|
42
|
+
<next>
|
43
|
+
<block type="motion_turn_if_reach_wall" />
|
44
|
+
</next>
|
45
|
+
</block>
|
46
|
+
</statement>
|
47
|
+
</block>
|
48
|
+
</statement>
|
49
|
+
</block>
|
47
50
|
</statement>
|
48
51
|
</block>
|
49
|
-
|
50
|
-
|
52
|
+
XML
|
53
|
+
end
|
51
54
|
end
|
52
|
-
end
|
53
55
|
|
54
|
-
|
56
|
+
_data = <<-EOS
|
55
57
|
require "smalruby"
|
56
58
|
|
57
|
-
car1 = Character.new(costume: "
|
58
|
-
|
59
|
+
car1 = Character.new(costume: "car2.png", x: 0, y: 0, angle: 0)
|
60
|
+
# 逃げる車
|
59
61
|
|
60
62
|
car1.on(:start) do
|
61
|
-
|
63
|
+
loop do
|
64
|
+
move(6)
|
65
|
+
if reach_wall?
|
66
|
+
turn
|
67
|
+
end
|
68
|
+
end
|
62
69
|
end
|
63
70
|
|
64
|
-
car1.on(:
|
65
|
-
|
71
|
+
car1.on(:key_down, K_LEFT) do
|
72
|
+
rotate(-15)
|
66
73
|
end
|
67
74
|
|
68
|
-
|
69
|
-
|
70
|
-
|
75
|
+
car1.on(:key_down, K_RIGHT) do
|
76
|
+
rotate(15)
|
71
77
|
end
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
<
|
80
|
-
<
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
78
|
+
EOS
|
79
|
+
describe compact_source_code(_data) do
|
80
|
+
__data = _data
|
81
|
+
let(:data) { __data }
|
82
|
+
|
83
|
+
it '結果が正しいこと' do
|
84
|
+
should eq_block_xml(<<-XML)
|
85
|
+
<character name="car1" x="0" y="0" angle="0" costumes="car2.png" />
|
86
|
+
<block type="ruby_comment">
|
87
|
+
<field name="COMMENT">逃げる車</field>
|
88
|
+
<next>
|
89
|
+
<block type="character_new">
|
90
|
+
<field name="NAME">car1</field>
|
91
|
+
<statement name="DO">
|
92
|
+
<block type="events_on_start">
|
93
|
+
<statement name="DO">
|
94
|
+
<block type="control_loop">
|
95
|
+
<statement name="DO">
|
96
|
+
<block type="motion_move" inline="true">
|
97
|
+
<value name="STEP">
|
98
|
+
<block type="math_number">
|
99
|
+
<field name="NUM">6</field>
|
100
|
+
</block>
|
101
|
+
</value>
|
102
|
+
<next>
|
103
|
+
<block type="control_if" inline="true">
|
104
|
+
<value name="COND">
|
105
|
+
<block type="motion_reach_wall" />
|
106
|
+
</value>
|
107
|
+
<statement name="THEN">
|
108
|
+
<block type="motion_turn" />
|
109
|
+
</statement>
|
110
|
+
</block>
|
111
|
+
</next>
|
112
|
+
</block>
|
113
|
+
</statement>
|
114
|
+
</block>
|
115
|
+
</statement>
|
116
|
+
<next>
|
117
|
+
<block type="events_on_key_push_or_down">
|
118
|
+
<field name="KEY">K_LEFT</field>
|
119
|
+
<field name="POD">down</field>
|
120
|
+
<statement name="DO">
|
121
|
+
<block type="motion_rotate_left" inline="true">
|
122
|
+
<value name="ANGLE">
|
123
|
+
<block type="math_number">
|
124
|
+
<field name="NUM">15</field>
|
125
|
+
</block>
|
126
|
+
</value>
|
127
|
+
</block>
|
128
|
+
</statement>
|
129
|
+
<next>
|
130
|
+
<block type="events_on_key_push_or_down">
|
131
|
+
<field name="KEY">K_RIGHT</field>
|
132
|
+
<field name="POD">down</field>
|
133
|
+
<statement name="DO">
|
134
|
+
<block type="motion_rotate_right" inline="true">
|
135
|
+
<value name="ANGLE">
|
136
|
+
<block type="math_number">
|
137
|
+
<field name="NUM">15</field>
|
138
|
+
</block>
|
139
|
+
</value>
|
140
|
+
</block>
|
141
|
+
</statement>
|
142
|
+
</block>
|
143
|
+
</next>
|
144
|
+
</block>
|
145
|
+
</next>
|
146
|
+
</block>
|
147
|
+
</statement>
|
89
148
|
</block>
|
90
|
-
</
|
91
|
-
</block>
|
92
|
-
<block type="character_new">
|
93
|
-
<field name="NAME">cat1</field>
|
94
|
-
<statement name="DO">
|
95
|
-
<block type="events_on_start" />
|
96
|
-
</statement>
|
149
|
+
</next>
|
97
150
|
</block>
|
98
|
-
|
99
|
-
|
151
|
+
XML
|
152
|
+
end
|
100
153
|
end
|
101
|
-
end
|
102
154
|
|
103
|
-
|
155
|
+
_data = <<-EOS
|
104
156
|
require "smalruby"
|
105
157
|
|
106
|
-
car1 = Character.new(costume: "
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
158
|
+
car1 = Character.new(costume: "car2.png", x: 0, y: 0, angle: 0)
|
159
|
+
car2 = Character.new(costume: "car3.png", x: 0, y: 415, angle: 0)
|
160
|
+
# 追いかける車
|
161
|
+
|
162
|
+
car2.on(:start) do
|
163
|
+
loop do
|
164
|
+
point_towards(car1)
|
165
|
+
move(3)
|
166
|
+
if hit?(car1)
|
167
|
+
say(message: "追いつきました!")
|
168
|
+
else
|
169
|
+
say(message: "")
|
170
|
+
end
|
113
171
|
end
|
114
172
|
end
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
<
|
123
|
-
<character name="
|
124
|
-
<
|
125
|
-
|
126
|
-
<
|
127
|
-
|
128
|
-
|
173
|
+
EOS
|
174
|
+
describe compact_source_code(_data) do
|
175
|
+
__data = _data
|
176
|
+
let(:data) { __data }
|
177
|
+
|
178
|
+
it '結果が正しいこと' do
|
179
|
+
should eq_block_xml(<<-XML)
|
180
|
+
<character name="car1" x="0" y="0" angle="0" costumes="car2.png" />
|
181
|
+
<character name="car2" x="0" y="415" angle="0" costumes="car3.png" />
|
182
|
+
<block type="ruby_comment">
|
183
|
+
<field name="COMMENT">追いかける車</field>
|
184
|
+
<next>
|
185
|
+
<block type="character_new">
|
186
|
+
<field name="NAME">car2</field>
|
129
187
|
<statement name="DO">
|
130
|
-
<block type="
|
131
|
-
<field name="NAME">cat1</field>
|
188
|
+
<block type="events_on_start">
|
132
189
|
<statement name="DO">
|
133
|
-
<block type="
|
190
|
+
<block type="control_loop">
|
191
|
+
<statement name="DO">
|
192
|
+
<block type="motion_point_towards_character">
|
193
|
+
<field name="CHAR">car1</field>
|
194
|
+
<next>
|
195
|
+
<block type="motion_move" inline="true">
|
196
|
+
<value name="STEP">
|
197
|
+
<block type="math_number">
|
198
|
+
<field name="NUM">3</field>
|
199
|
+
</block>
|
200
|
+
</value>
|
201
|
+
<next>
|
202
|
+
<block type="control_if_else" inline="true">
|
203
|
+
<value name="COND">
|
204
|
+
<block type="sensing_hit">
|
205
|
+
<field name="CHAR">car1</field>
|
206
|
+
</block>
|
207
|
+
</value>
|
208
|
+
<statement name="THEN">
|
209
|
+
<block type="looks_say" inline="true">
|
210
|
+
<value name="TEXT">
|
211
|
+
<block type="text">
|
212
|
+
<field name="TEXT">追いつきました!</field>
|
213
|
+
</block>
|
214
|
+
</value>
|
215
|
+
</block>
|
216
|
+
</statement>
|
217
|
+
<statement name="ELSE">
|
218
|
+
<block type="looks_say" inline="true">
|
219
|
+
<value name="TEXT">
|
220
|
+
<block type="text">
|
221
|
+
<field name="TEXT"></field>
|
222
|
+
</block>
|
223
|
+
</value>
|
224
|
+
</block>
|
225
|
+
</statement>
|
226
|
+
</block>
|
227
|
+
</next>
|
228
|
+
</block>
|
229
|
+
</next>
|
230
|
+
</block>
|
231
|
+
</statement>
|
232
|
+
</block>
|
134
233
|
</statement>
|
135
234
|
</block>
|
136
235
|
</statement>
|
137
236
|
</block>
|
138
|
-
</
|
237
|
+
</next>
|
139
238
|
</block>
|
140
|
-
|
141
|
-
|
239
|
+
XML
|
240
|
+
end
|
142
241
|
end
|
143
|
-
end
|
144
242
|
|
145
|
-
|
243
|
+
_data = <<-EOS
|
146
244
|
require "smalruby"
|
147
245
|
|
148
|
-
car1 = Character.new(costume: "
|
246
|
+
car1 = Character.new(costume: "car2.png", x: 0, y: 0, angle: 0)
|
247
|
+
car2 = Character.new(costume: "car3.png", x: 0, y: 415, angle: 0)
|
248
|
+
# 逃げる車
|
149
249
|
|
150
250
|
car1.on(:start) do
|
151
|
-
|
152
|
-
|
153
|
-
|
251
|
+
loop do
|
252
|
+
move(6)
|
253
|
+
if reach_wall?
|
254
|
+
turn
|
255
|
+
end
|
154
256
|
end
|
155
257
|
end
|
156
|
-
EOS
|
157
|
-
describe compact_source_code(_data) do
|
158
|
-
__data = _data
|
159
|
-
let(:data) { __data }
|
160
258
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
<character name="car1" x="0" y="0" angle="0" costumes="car1.png" />
|
165
|
-
<block type="character_new">
|
166
|
-
<field name="NAME">car1</field>
|
167
|
-
<statement name="DO">
|
168
|
-
<block type="events_on_start">
|
169
|
-
<statement name="DO">
|
170
|
-
<block type="events_on_start" />
|
171
|
-
</statement>
|
172
|
-
</block>
|
173
|
-
</statement>
|
174
|
-
</block>
|
175
|
-
</xml>
|
176
|
-
XML
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
_data = <<-EOS.strip_heredoc
|
181
|
-
require "smalruby"
|
259
|
+
car1.on(:key_down, K_LEFT) do
|
260
|
+
rotate(-15)
|
261
|
+
end
|
182
262
|
|
183
|
-
car1
|
263
|
+
car1.on(:key_down, K_RIGHT) do
|
264
|
+
rotate(15)
|
265
|
+
end
|
184
266
|
|
185
|
-
|
267
|
+
# 追いかける車
|
186
268
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
269
|
+
car2.on(:start) do
|
270
|
+
loop do
|
271
|
+
point_towards(car1)
|
272
|
+
move(3)
|
273
|
+
if hit?(car1)
|
274
|
+
say(message: "追いつきました!")
|
275
|
+
else
|
276
|
+
say(message: "")
|
277
|
+
end
|
194
278
|
end
|
195
279
|
end
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
<
|
204
|
-
<character name="
|
205
|
-
<block type="
|
206
|
-
<field name="
|
207
|
-
<
|
208
|
-
<block type="
|
280
|
+
EOS
|
281
|
+
describe compact_source_code(_data) do
|
282
|
+
__data = _data
|
283
|
+
let(:data) { __data }
|
284
|
+
|
285
|
+
it '結果が正しいこと' do
|
286
|
+
should eq_block_xml(<<-XML)
|
287
|
+
<character name="car1" x="0" y="0" angle="0" costumes="car2.png" />
|
288
|
+
<character name="car2" x="0" y="415" angle="0" costumes="car3.png" />
|
289
|
+
<block type="ruby_comment">
|
290
|
+
<field name="COMMENT">逃げる車</field>
|
291
|
+
<next>
|
292
|
+
<block type="character_new">
|
293
|
+
<field name="NAME">car1</field>
|
209
294
|
<statement name="DO">
|
210
|
-
<block type="
|
211
|
-
<
|
295
|
+
<block type="events_on_start">
|
296
|
+
<statement name="DO">
|
297
|
+
<block type="control_loop">
|
298
|
+
<statement name="DO">
|
299
|
+
<block type="motion_move" inline="true">
|
300
|
+
<value name="STEP">
|
301
|
+
<block type="math_number">
|
302
|
+
<field name="NUM">6</field>
|
303
|
+
</block>
|
304
|
+
</value>
|
305
|
+
<next>
|
306
|
+
<block type="control_if" inline="true">
|
307
|
+
<value name="COND">
|
308
|
+
<block type="motion_reach_wall" />
|
309
|
+
</value>
|
310
|
+
<statement name="THEN">
|
311
|
+
<block type="motion_turn" />
|
312
|
+
</statement>
|
313
|
+
</block>
|
314
|
+
</next>
|
315
|
+
</block>
|
316
|
+
</statement>
|
317
|
+
</block>
|
318
|
+
</statement>
|
212
319
|
<next>
|
213
|
-
<block type="
|
214
|
-
<field name="
|
320
|
+
<block type="events_on_key_push_or_down">
|
321
|
+
<field name="KEY">K_LEFT</field>
|
322
|
+
<field name="POD">down</field>
|
323
|
+
<statement name="DO">
|
324
|
+
<block type="motion_rotate_left" inline="true">
|
325
|
+
<value name="ANGLE">
|
326
|
+
<block type="math_number">
|
327
|
+
<field name="NUM">15</field>
|
328
|
+
</block>
|
329
|
+
</value>
|
330
|
+
</block>
|
331
|
+
</statement>
|
215
332
|
<next>
|
216
|
-
<block type="
|
217
|
-
<field name="
|
218
|
-
<
|
219
|
-
|
220
|
-
|
221
|
-
<
|
222
|
-
<block type="
|
223
|
-
<field name="
|
333
|
+
<block type="events_on_key_push_or_down">
|
334
|
+
<field name="KEY">K_RIGHT</field>
|
335
|
+
<field name="POD">down</field>
|
336
|
+
<statement name="DO">
|
337
|
+
<block type="motion_rotate_right" inline="true">
|
338
|
+
<value name="ANGLE">
|
339
|
+
<block type="math_number">
|
340
|
+
<field name="NUM">15</field>
|
341
|
+
</block>
|
342
|
+
</value>
|
343
|
+
</block>
|
344
|
+
</statement>
|
345
|
+
</block>
|
346
|
+
</next>
|
347
|
+
</block>
|
348
|
+
</next>
|
349
|
+
</block>
|
350
|
+
</statement>
|
351
|
+
<next>
|
352
|
+
<block type="ruby_comment">
|
353
|
+
<field name="COMMENT">追いかける車</field>
|
354
|
+
<next>
|
355
|
+
<block type="character_new">
|
356
|
+
<field name="NAME">car2</field>
|
357
|
+
<statement name="DO">
|
358
|
+
<block type="events_on_start">
|
359
|
+
<statement name="DO">
|
360
|
+
<block type="control_loop">
|
361
|
+
<statement name="DO">
|
362
|
+
<block type="motion_point_towards_character">
|
363
|
+
<field name="CHAR">car1</field>
|
224
364
|
<next>
|
225
|
-
<block type="
|
226
|
-
<
|
365
|
+
<block type="motion_move" inline="true">
|
366
|
+
<value name="STEP">
|
367
|
+
<block type="math_number">
|
368
|
+
<field name="NUM">3</field>
|
369
|
+
</block>
|
370
|
+
</value>
|
227
371
|
<next>
|
228
|
-
<block type="
|
229
|
-
<
|
230
|
-
|
231
|
-
|
232
|
-
<field name="STATEMENT">end</field>
|
372
|
+
<block type="control_if_else" inline="true">
|
373
|
+
<value name="COND">
|
374
|
+
<block type="sensing_hit">
|
375
|
+
<field name="CHAR">car1</field>
|
233
376
|
</block>
|
234
|
-
</
|
377
|
+
</value>
|
378
|
+
<statement name="THEN">
|
379
|
+
<block type="looks_say" inline="true">
|
380
|
+
<value name="TEXT">
|
381
|
+
<block type="text">
|
382
|
+
<field name="TEXT">追いつきました!</field>
|
383
|
+
</block>
|
384
|
+
</value>
|
385
|
+
</block>
|
386
|
+
</statement>
|
387
|
+
<statement name="ELSE">
|
388
|
+
<block type="looks_say" inline="true">
|
389
|
+
<value name="TEXT">
|
390
|
+
<block type="text">
|
391
|
+
<field name="TEXT"></field>
|
392
|
+
</block>
|
393
|
+
</value>
|
394
|
+
</block>
|
395
|
+
</statement>
|
235
396
|
</block>
|
236
397
|
</next>
|
237
398
|
</block>
|
238
399
|
</next>
|
239
400
|
</block>
|
240
|
-
</
|
401
|
+
</statement>
|
241
402
|
</block>
|
242
|
-
</
|
403
|
+
</statement>
|
243
404
|
</block>
|
244
|
-
</
|
405
|
+
</statement>
|
245
406
|
</block>
|
246
407
|
</next>
|
247
408
|
</block>
|
248
|
-
</
|
409
|
+
</next>
|
249
410
|
</block>
|
250
|
-
</
|
411
|
+
</next>
|
251
412
|
</block>
|
252
|
-
|
253
|
-
|
413
|
+
XML
|
414
|
+
end
|
254
415
|
end
|
255
416
|
end
|
256
417
|
|
257
|
-
_data = <<-EOS
|
418
|
+
_data = <<-EOS
|
258
419
|
require "smalruby"
|
259
420
|
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
421
|
+
init_hardware
|
422
|
+
frog1 = Character.new(costume: "frog1.png", x: 261, y: 191, angle: 0)
|
423
|
+
|
424
|
+
frog1.on(:click) do
|
425
|
+
say(message: "ライトをぴかっとさせるでよ♪")
|
426
|
+
rgb_led_anode("D3").on(color: [51, 51, 255])
|
427
|
+
sleep(1)
|
428
|
+
rgb_led_anode("D3").on(color: [255, 255, 153])
|
429
|
+
sleep(1)
|
430
|
+
rgb_led_anode("D3").on(color: [255, 0, 0])
|
431
|
+
sleep(1)
|
432
|
+
rgb_led_anode("D3").off
|
433
|
+
say(message: "")
|
266
434
|
end
|
267
435
|
EOS
|
268
436
|
describe compact_source_code(_data) do
|
@@ -270,28 +438,75 @@ end
|
|
270
438
|
let(:data) { __data }
|
271
439
|
|
272
440
|
it '結果が正しいこと' do
|
273
|
-
should
|
274
|
-
<
|
275
|
-
<block type="
|
276
|
-
|
277
|
-
<
|
278
|
-
|
279
|
-
|
280
|
-
<
|
281
|
-
<block type="
|
282
|
-
<
|
441
|
+
should eq_block_xml(<<-XML)
|
442
|
+
<character name="frog1" x="261" y="191" angle="0" costumes="frog1.png" />
|
443
|
+
<block type="hardware_init_hardware" />
|
444
|
+
<block type="character_new">
|
445
|
+
<field name="NAME">frog1</field>
|
446
|
+
<statement name="DO">
|
447
|
+
<block type="events_on_click">
|
448
|
+
<statement name="DO">
|
449
|
+
<block type="looks_say" inline="true">
|
450
|
+
<value name="TEXT">
|
451
|
+
<block type="text">
|
452
|
+
<field name="TEXT">ライトをぴかっとさせるでよ♪</field>
|
453
|
+
</block>
|
454
|
+
</value>
|
283
455
|
<next>
|
284
|
-
<block type="
|
285
|
-
<field name="
|
456
|
+
<block type="hardware_rgb_led_on">
|
457
|
+
<field name="AC">anode</field>
|
458
|
+
<field name="PIN">D3</field>
|
459
|
+
<field name="COLOUR">#3333ff</field>
|
286
460
|
<next>
|
287
|
-
<block type="
|
288
|
-
<
|
461
|
+
<block type="control_sleep" inline="true">
|
462
|
+
<value name="SEC">
|
463
|
+
<block type="math_number">
|
464
|
+
<field name="NUM">1</field>
|
465
|
+
</block>
|
466
|
+
</value>
|
289
467
|
<next>
|
290
|
-
<block type="
|
291
|
-
<field name="
|
468
|
+
<block type="hardware_rgb_led_on">
|
469
|
+
<field name="AC">anode</field>
|
470
|
+
<field name="PIN">D3</field>
|
471
|
+
<field name="COLOUR">#ffff99</field>
|
292
472
|
<next>
|
293
|
-
<block type="
|
294
|
-
<
|
473
|
+
<block type="control_sleep" inline="true">
|
474
|
+
<value name="SEC">
|
475
|
+
<block type="math_number">
|
476
|
+
<field name="NUM">1</field>
|
477
|
+
</block>
|
478
|
+
</value>
|
479
|
+
<next>
|
480
|
+
<block type="hardware_rgb_led_on">
|
481
|
+
<field name="AC">anode</field>
|
482
|
+
<field name="PIN">D3</field>
|
483
|
+
<field name="COLOUR">#ff0000</field>
|
484
|
+
<next>
|
485
|
+
<block type="control_sleep" inline="true">
|
486
|
+
<value name="SEC">
|
487
|
+
<block type="math_number">
|
488
|
+
<field name="NUM">1</field>
|
489
|
+
</block>
|
490
|
+
</value>
|
491
|
+
<next>
|
492
|
+
<block type="hardware_rgb_led_off">
|
493
|
+
<field name="AC">anode</field>
|
494
|
+
<field name="PIN">D3</field>
|
495
|
+
<next>
|
496
|
+
<block type="looks_say" inline="true">
|
497
|
+
<value name="TEXT">
|
498
|
+
<block type="text">
|
499
|
+
<field name="TEXT"></field>
|
500
|
+
</block>
|
501
|
+
</value>
|
502
|
+
</block>
|
503
|
+
</next>
|
504
|
+
</block>
|
505
|
+
</next>
|
506
|
+
</block>
|
507
|
+
</next>
|
508
|
+
</block>
|
509
|
+
</next>
|
295
510
|
</block>
|
296
511
|
</next>
|
297
512
|
</block>
|
@@ -301,29 +516,18 @@ end
|
|
301
516
|
</block>
|
302
517
|
</next>
|
303
518
|
</block>
|
304
|
-
</
|
519
|
+
</statement>
|
305
520
|
</block>
|
306
|
-
</
|
521
|
+
</statement>
|
307
522
|
</block>
|
308
|
-
</xml>
|
309
523
|
XML
|
310
524
|
end
|
311
525
|
end
|
312
526
|
|
313
|
-
|
314
|
-
|
315
|
-
let(:data) { SourceCode::SUCCESS_DATA_MOCK }
|
527
|
+
context '失敗する場合' do
|
528
|
+
let(:data) { '__FAIL__' }
|
316
529
|
|
317
|
-
|
318
|
-
should eq(SourceCode::SUCCESS_XML_MOCK)
|
319
|
-
end
|
320
|
-
end
|
321
|
-
|
322
|
-
context '失敗する場合' do
|
323
|
-
let(:data) { '__FAIL__' }
|
324
|
-
|
325
|
-
it { expect { subject }.to raise_error }
|
326
|
-
end
|
530
|
+
it { expect { subject }.to raise_error }
|
327
531
|
end
|
328
532
|
end
|
329
533
|
end
|