smalruby-editor 0.0.12-x86-mingw32 → 0.1.0-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.

Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -0
  3. data/.travis.yml +2 -0
  4. data/LEGAL +32 -0
  5. data/Rakefile +1 -1
  6. data/app/assets/demos/default.xml +126 -0
  7. data/app/assets/demos/rgb_led_anode.xml +83 -0
  8. data/app/assets/images/favicon.ico +0 -0
  9. data/app/assets/javascripts/application.js +18 -1
  10. data/app/assets/javascripts/block_mode.js.coffee.erb +10 -0
  11. data/app/assets/javascripts/blocks/blockly.js.coffee.erb +34 -0
  12. data/app/assets/javascripts/blocks/character.js.coffee.erb +76 -0
  13. data/app/assets/javascripts/blocks/control.js.coffee.erb +180 -0
  14. data/app/assets/javascripts/blocks/data.js.coffee.erb +6 -0
  15. data/app/assets/javascripts/blocks/etc.js.coffee.erb +6 -0
  16. data/app/assets/javascripts/blocks/events.js.coffee.erb +82 -0
  17. data/app/assets/javascripts/blocks/hardware.js.coffee.erb +313 -0
  18. data/app/assets/javascripts/blocks/looks.js.coffee.erb +163 -0
  19. data/app/assets/javascripts/blocks/motion.js.coffee.erb +297 -0
  20. data/app/assets/javascripts/blocks/operators.js.coffee.erb +279 -0
  21. data/app/assets/javascripts/blocks/pen.js.coffee.erb +6 -0
  22. data/app/assets/javascripts/blocks/ruby.js.coffee.erb +74 -0
  23. data/app/assets/javascripts/blocks/sensing.js.coffee.erb +241 -0
  24. data/app/assets/javascripts/blocks/sound.js.coffee.erb +75 -0
  25. data/{public/favicon.ico → app/assets/javascripts/collections/.keep} +0 -0
  26. data/app/assets/javascripts/collections/character_set.js.coffee +12 -0
  27. data/app/assets/javascripts/generators/ruby.js.coffee.erb +188 -0
  28. data/app/assets/javascripts/models/.keep +0 -0
  29. data/app/assets/javascripts/models/character.js.coffee +66 -0
  30. data/app/assets/javascripts/models/scene.js.coffee +5 -0
  31. data/app/assets/javascripts/models/source_code.js.coffee +64 -0
  32. data/app/assets/javascripts/routers/.keep +0 -0
  33. data/app/assets/javascripts/ruby_mode.js.coffee.erb +12 -0
  34. data/app/assets/javascripts/smalruby.js.coffee +97 -0
  35. data/app/assets/javascripts/views/.keep +0 -0
  36. data/app/assets/javascripts/views/character_modal_view.js.coffee +148 -0
  37. data/app/assets/javascripts/views/character_selector_view.js.coffee +109 -0
  38. data/app/assets/javascripts/views/main_menu_view.js.coffee +264 -0
  39. data/app/assets/stylesheets/editor.css.scss +318 -2
  40. data/app/assets/stylesheets/toolbox.css.scss.erb +62 -0
  41. data/app/assets/templates/.keep +0 -0
  42. data/app/controllers/application_controller.rb +19 -0
  43. data/app/controllers/editor_controller.rb +4 -0
  44. data/app/controllers/source_codes_controller.rb +8 -2
  45. data/app/helpers/application_helper.rb +1 -0
  46. data/app/helpers/editor_helper.rb +46 -0
  47. data/app/models/source_code.rb +49 -6
  48. data/app/views/editor/_block_tab.html.haml +53 -0
  49. data/app/views/editor/_character_modal.html.haml +53 -0
  50. data/app/views/editor/_toolbox.html.haml +384 -0
  51. data/app/views/editor/demo.html.erb +16 -0
  52. data/app/views/editor/index.html.haml +60 -0
  53. data/app/views/layouts/application.html.erb +7 -0
  54. data/config/application.rb +1 -0
  55. data/config/initializers/teaspoon.rb +79 -0
  56. data/config/routes.rb +4 -0
  57. data/lib/smalruby_editor/version.rb +1 -1
  58. data/lib/tasks/gem.rake +7 -4
  59. data/lib/tasks/release.rake +43 -0
  60. data/public/apple-touch-icon.png +0 -0
  61. data/public/blockly/media/1x1.gif +0 -0
  62. data/public/blockly/media/click.mp3 +0 -0
  63. data/public/blockly/media/click.ogg +0 -0
  64. data/public/blockly/media/click.wav +0 -0
  65. data/public/blockly/media/delete.mp3 +0 -0
  66. data/public/blockly/media/delete.ogg +0 -0
  67. data/public/blockly/media/delete.wav +0 -0
  68. data/public/blockly/media/handclosed.cur +0 -0
  69. data/public/blockly/media/handopen.cur +0 -0
  70. data/public/blockly/media/quote0.png +0 -0
  71. data/public/blockly/media/quote1.png +0 -0
  72. data/public/blockly/media/trashbody.png +0 -0
  73. data/public/blockly/media/trashlid.png +0 -0
  74. data/public/blockly/media/tree.png +0 -0
  75. data/public/browserconfig.xml +1 -0
  76. data/public/large.png +0 -0
  77. data/public/smalruby/assets/ball1.png +0 -0
  78. data/public/smalruby/assets/ball2.png +0 -0
  79. data/public/smalruby/assets/ball3.png +0 -0
  80. data/public/smalruby/assets/ball4.png +0 -0
  81. data/public/smalruby/assets/ball5.png +0 -0
  82. data/public/smalruby/assets/ball6.png +0 -0
  83. data/public/smalruby/assets/car1.png +0 -0
  84. data/public/smalruby/assets/car2.png +0 -0
  85. data/public/smalruby/assets/car3.png +0 -0
  86. data/public/smalruby/assets/car4.png +0 -0
  87. data/public/smalruby/assets/cat1.png +0 -0
  88. data/public/smalruby/assets/cat2.png +0 -0
  89. data/public/smalruby/assets/cat3.png +0 -0
  90. data/public/smalruby/assets/frog1.png +0 -0
  91. data/public/smalruby/assets/piano_do.wav +0 -0
  92. data/public/smalruby/assets/piano_do_2.wav +0 -0
  93. data/public/smalruby/assets/piano_fa.wav +0 -0
  94. data/public/smalruby/assets/piano_mi.wav +0 -0
  95. data/public/smalruby/assets/piano_ra.wav +0 -0
  96. data/public/smalruby/assets/piano_re.wav +0 -0
  97. data/public/smalruby/assets/piano_si.wav +0 -0
  98. data/public/smalruby/assets/piano_so.wav +0 -0
  99. data/public/square.png +0 -0
  100. data/public/tiny.png +0 -0
  101. data/public/wide.png +0 -0
  102. data/smalruby-editor.gemspec +4 -0
  103. data/spec/acceptance/block_mode/blocks/character/new.feature +136 -0
  104. data/spec/acceptance/block_mode/blocks/control/await.feature +20 -0
  105. data/spec/acceptance/block_mode/blocks/control/await_until.feature +39 -0
  106. data/spec/acceptance/block_mode/blocks/control/break.feature +20 -0
  107. data/spec/acceptance/block_mode/blocks/control/if.feature +68 -0
  108. data/spec/acceptance/block_mode/blocks/control/if_else.feature +78 -0
  109. data/spec/acceptance/block_mode/blocks/control/loop.feature +45 -0
  110. data/spec/acceptance/block_mode/blocks/control/next.feature +20 -0
  111. data/spec/acceptance/block_mode/blocks/control/redo.feature +20 -0
  112. data/spec/acceptance/block_mode/blocks/control/sleep.feature +41 -0
  113. data/spec/acceptance/block_mode/blocks/control/times.feature +72 -0
  114. data/spec/acceptance/block_mode/blocks/control/until.feature +68 -0
  115. data/spec/acceptance/block_mode/blocks/events/on_click.feature +75 -0
  116. data/spec/acceptance/block_mode/blocks/events/on_hit.feature +83 -0
  117. data/spec/acceptance/block_mode/blocks/events/on_key_push_or_down.feature +171 -0
  118. data/spec/acceptance/block_mode/blocks/events/on_start.feature +75 -0
  119. data/spec/acceptance/block_mode/blocks/hardware/init_hardware.feature +44 -0
  120. data/spec/acceptance/block_mode/blocks/hardware/led_off.feature +75 -0
  121. data/spec/acceptance/block_mode/blocks/hardware/led_on.feature +75 -0
  122. data/spec/acceptance/block_mode/blocks/hardware/on_sensor_change.feature +81 -0
  123. data/spec/acceptance/block_mode/blocks/hardware/rgb_led_off.feature +81 -0
  124. data/spec/acceptance/block_mode/blocks/hardware/rgb_led_on.feature +87 -0
  125. data/spec/acceptance/block_mode/blocks/hardware/sensor_value.feature +100 -0
  126. data/spec/acceptance/block_mode/blocks/looks/hide.feature +69 -0
  127. data/spec/acceptance/block_mode/blocks/looks/say.feature +106 -0
  128. data/spec/acceptance/block_mode/blocks/looks/show.feature +69 -0
  129. data/spec/acceptance/block_mode/blocks/looks/vanish.feature +69 -0
  130. data/spec/acceptance/block_mode/blocks/motion/change_x_by.feature +81 -0
  131. data/spec/acceptance/block_mode/blocks/motion/change_y_by.feature +81 -0
  132. data/spec/acceptance/block_mode/blocks/motion/move.feature +81 -0
  133. data/spec/acceptance/block_mode/blocks/motion/reach_wall.feature +98 -0
  134. data/spec/acceptance/block_mode/blocks/motion/rotate_left.feature +81 -0
  135. data/spec/acceptance/block_mode/blocks/motion/rotate_right.feature +81 -0
  136. data/spec/acceptance/block_mode/blocks/motion/self_angle.feature +92 -0
  137. data/spec/acceptance/block_mode/blocks/motion/self_x.feature +92 -0
  138. data/spec/acceptance/block_mode/blocks/motion/self_y.feature +92 -0
  139. data/spec/acceptance/block_mode/blocks/motion/set_angle.feature +81 -0
  140. data/spec/acceptance/block_mode/blocks/motion/set_x.feature +81 -0
  141. data/spec/acceptance/block_mode/blocks/motion/set_x_y.feature +95 -0
  142. data/spec/acceptance/block_mode/blocks/motion/set_y.feature +81 -0
  143. data/spec/acceptance/block_mode/blocks/motion/turn.feature +69 -0
  144. data/spec/acceptance/block_mode/blocks/motion/turn_if_reach_wall.feature +69 -0
  145. data/spec/acceptance/block_mode/blocks/sensing/character_property.feature +114 -0
  146. data/spec/acceptance/block_mode/blocks/sensing/hit.feature +110 -0
  147. data/spec/acceptance/block_mode/blocks/sensing/input_key_push_or_down.feature +91 -0
  148. data/spec/acceptance/block_mode/blocks/sensing/input_mouse_pos_x.feature +39 -0
  149. data/spec/acceptance/block_mode/blocks/sensing/input_mouse_pos_y.feature +39 -0
  150. data/spec/acceptance/block_mode/blocks/sensing/input_mouse_push_or_down.feature +91 -0
  151. data/spec/acceptance/block_mode/blocks/sensing/time_now.feature +43 -0
  152. data/spec/acceptance/block_mode/blocks/sound/play.feature +81 -0
  153. data/spec/acceptance/block_mode/demo.feature +49 -0
  154. data/spec/acceptance/{text_editor → ruby_mode}/base.feature +11 -2
  155. data/spec/acceptance/{standalone → ruby_mode}/check.feature +8 -9
  156. data/spec/acceptance/ruby_mode/download.feature +33 -0
  157. data/spec/acceptance/{text_editor → ruby_mode}/load.feature +13 -13
  158. data/spec/acceptance/standalone/run.feature +17 -0
  159. data/spec/acceptance/standalone/save.feature +6 -6
  160. data/spec/helpers/editor_helper_spec.rb +110 -10
  161. data/spec/javascripts/collections/character_set_spec.coffee +41 -0
  162. data/spec/javascripts/models/character_spec.coffee +146 -0
  163. data/spec/javascripts/models/scene_spec.coffee +15 -0
  164. data/spec/javascripts/spec_helper.js +29 -0
  165. data/spec/spec_helper.rb +3 -8
  166. data/spec/steps/block_mode_steps.rb +37 -0
  167. data/spec/steps/global_variable.rb +30 -6
  168. data/spec/steps/text_editor_steps.rb +20 -2
  169. data/spec/teaspoon_env.rb +46 -0
  170. data/vendor/assets/javascripts/blockly/blockly_compressed.js +992 -0
  171. data/vendor/assets/javascripts/blockly/blocks_compressed.js +129 -0
  172. data/vendor/assets/javascripts/blockly/msg/js/ja.js +377 -0
  173. data/vendor/assets/javascripts/jquery.blockUI.js +619 -0
  174. metadata +290 -23
  175. data/app/assets/javascripts/editor.js.coffee.erb +0 -137
  176. data/app/views/editor/index.html.erb +0 -22
  177. data/spec/acceptance/text_editor/check.feature +0 -29
  178. data/spec/acceptance/text_editor/save.feature +0 -34
  179. data/spec/support/assets.rb +0 -18
@@ -0,0 +1,91 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: sensing_input_mouse_push_or_down - 「条件:マウスの[▼左ボタン]が[▼押された]」ブロック
5
+ シナリオ: [▼押された]ブロックのみ配置する
6
+ 前提 "ブロック" タブを表示する
7
+
8
+ もし 次のブロックを配置する:
9
+ """
10
+ %block{:type => "sensing_input_mouse_push_or_down", :x => "0", :y => "0"}
11
+ %field{:name => "MOUSE_BUTTON"}<
12
+ M_LBUTTON
13
+ %field{:name => "POD"}<
14
+ push
15
+ """
16
+ かつ ブロックからソースコードを生成する
17
+
18
+ ならば テキストエディタのプログラムは以下であること:
19
+ """
20
+ require "smalruby"
21
+
22
+ Input.mouse_push?(M_LBUTTON)
23
+
24
+ """
25
+
26
+ シナリオ: 文と[▼押された]ブロックを配置する
27
+ 前提 "ブロック" タブを表示する
28
+
29
+ もし 次のブロックを配置する:
30
+ """
31
+ %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
32
+ %value{:name => "ARG"}
33
+ %block{:type => "sensing_input_mouse_push_or_down", :x => "0", :y => "0"}
34
+ %field{:name => "MOUSE_BUTTON"}<
35
+ M_LBUTTON
36
+ %field{:name => "POD"}<
37
+ push
38
+ """
39
+ かつ ブロックからソースコードを生成する
40
+
41
+ ならば テキストエディタのプログラムは以下であること:
42
+ """
43
+ require "smalruby"
44
+
45
+ p(Input.mouse_push?(M_LBUTTON))
46
+
47
+ """
48
+
49
+ シナリオ: [▼押され続けている]ブロックのみ配置する
50
+ 前提 "ブロック" タブを表示する
51
+
52
+ もし 次のブロックを配置する:
53
+ """
54
+ %block{:type => "sensing_input_mouse_push_or_down", :x => "0", :y => "0"}
55
+ %field{:name => "MOUSE_BUTTON"}<
56
+ M_LBUTTON
57
+ %field{:name => "POD"}<
58
+ down
59
+ """
60
+ かつ ブロックからソースコードを生成する
61
+
62
+ ならば テキストエディタのプログラムは以下であること:
63
+ """
64
+ require "smalruby"
65
+
66
+ Input.mouse_down?(M_LBUTTON)
67
+
68
+ """
69
+
70
+ シナリオ: 文と[▼押され続けている]ブロックを配置する
71
+ 前提 "ブロック" タブを表示する
72
+
73
+ もし 次のブロックを配置する:
74
+ """
75
+ %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
76
+ %value{:name => "ARG"}
77
+ %block{:type => "sensing_input_mouse_push_or_down", :x => "0", :y => "0"}
78
+ %field{:name => "MOUSE_BUTTON"}<
79
+ M_LBUTTON
80
+ %field{:name => "POD"}<
81
+ down
82
+ """
83
+ かつ ブロックからソースコードを生成する
84
+
85
+ ならば テキストエディタのプログラムは以下であること:
86
+ """
87
+ require "smalruby"
88
+
89
+ p(Input.mouse_down?(M_LBUTTON))
90
+
91
+ """
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: sensing_time_now - 「変数:現在の[▼時]」ブロック
5
+ シナリオ: ブロックのみ配置する
6
+ 前提 "ブロック" タブを表示する
7
+
8
+ もし 次のブロックを配置する:
9
+ """
10
+ %block{:type => "sensing_time_now", :x => "0", :y => "0"}
11
+ %field{:name => "METHOD"}<
12
+ hour
13
+ """
14
+ かつ ブロックからソースコードを生成する
15
+
16
+ ならば テキストエディタのプログラムは以下であること:
17
+ """
18
+ require "smalruby"
19
+
20
+ Time.now.hour
21
+
22
+ """
23
+
24
+ シナリオ: 文とブロックを配置する
25
+ 前提 "ブロック" タブを表示する
26
+
27
+ もし 次のブロックを配置する:
28
+ """
29
+ %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
30
+ %value{:name => "ARG"}
31
+ %block{:type => "sensing_time_now", :x => "0", :y => "0"}
32
+ %field{:name => "METHOD"}<
33
+ hour
34
+ """
35
+ かつ ブロックからソースコードを生成する
36
+
37
+ ならば テキストエディタのプログラムは以下であること:
38
+ """
39
+ require "smalruby"
40
+
41
+ p(Time.now.hour)
42
+
43
+ """
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: sound_play - 「[▼プリセット音声]の音を鳴らす」ブロック
5
+ シナリオ: ブロックのみ配置する
6
+ 前提 "ブロック" タブを表示する
7
+
8
+ もし 次のブロックを配置する:
9
+ """
10
+ %block{:type => "sound_play", :x => "0", :y => "0"}
11
+ %value{:name => "NAME"}
12
+ %block{:type => "text"}
13
+ %field{:name => "TEXT"}<
14
+ piano_do.wav
15
+ """
16
+ かつ ブロックからソースコードを生成する
17
+
18
+ ならば テキストエディタのプログラムは "" であること
19
+
20
+ シナリオ: キャラクターとブロックを配置する
21
+ 前提 "ブロック" タブを表示する
22
+ かつ 次のキャラクターを追加する:
23
+ | name | costumes | x | y | angle |
24
+ | car1 | car1.png | 0 | 0 | 0 |
25
+
26
+ もし 次のブロックを配置する:
27
+ """
28
+ %block{:type => "character_new", :x => "21", :y => "15"}
29
+ %field{:name => "NAME"}<
30
+ car1
31
+ %statement{:name => "DO"}
32
+ %block{:type => "sound_play", :x => "0", :y => "0"}
33
+ %value{:name => "NAME"}
34
+ %block{:type => "text"}
35
+ %field{:name => "TEXT"}<
36
+ piano_do.wav
37
+ """
38
+ かつ ブロックからソースコードを生成する
39
+
40
+ ならば テキストエディタのプログラムは以下であること:
41
+ """
42
+ require "smalruby"
43
+
44
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
45
+ car1.play(name: "piano_do.wav")
46
+
47
+ """
48
+
49
+ シナリオ: キャラクターとイベントとブロックを配置する
50
+ 前提 "ブロック" タブを表示する
51
+ かつ 次のキャラクターを追加する:
52
+ | name | costumes | x | y | angle |
53
+ | car1 | car1.png | 0 | 0 | 0 |
54
+
55
+ もし 次のブロックを配置する:
56
+ """
57
+ %block{:type => "character_new", :x => "21", :y => "15"}
58
+ %field{:name => "NAME"}<
59
+ car1
60
+ %statement{:name => "DO"}
61
+ %block{:type => "events_on_start"}
62
+ %statement{:name => "DO"}
63
+ %block{:type => "sound_play", :x => "0", :y => "0"}
64
+ %value{:name => "NAME"}
65
+ %block{:type => "text"}
66
+ %field{:name => "TEXT"}<
67
+ piano_do.wav
68
+ """
69
+ かつ ブロックからソースコードを生成する
70
+
71
+ ならば テキストエディタのプログラムは以下であること:
72
+ """
73
+ require "smalruby"
74
+
75
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
76
+
77
+ car1.on(:start) do
78
+ play(name: "piano_do.wav")
79
+ end
80
+
81
+ """
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: Demo - デモモード
5
+ シナリオ: デモ用のブロックからRubyのソースコードを生成する
6
+ 前提 "デモページ" にアクセスする
7
+
8
+ もし "Rubyタブ" にタブを切り替える
9
+
10
+ ならば テキストエディタのプログラムは以下であること:
11
+ """
12
+ require "smalruby"
13
+
14
+ car1 = Character.new(costume: "car2.png", x: 0, y: 0, angle: 0)
15
+ car2 = Character.new(costume: "car3.png", x: 0, y: 415, angle: 0)
16
+ # 逃げる車
17
+
18
+ car1.on(:start) do
19
+ loop do
20
+ move(6)
21
+ if reach_wall?
22
+ turn
23
+ end
24
+ end
25
+ end
26
+
27
+ car1.on(:key_down, K_LEFT) do
28
+ rotate(-15)
29
+ end
30
+
31
+ car1.on(:key_down, K_RIGHT) do
32
+ rotate(15)
33
+ end
34
+
35
+ # 追いかける車
36
+
37
+ car2.on(:start) do
38
+ loop do
39
+ point_towards(car1)
40
+ move(3)
41
+ if hit?(car1)
42
+ say(message: "追いつきました!")
43
+ else
44
+ say(message: "")
45
+ end
46
+ end
47
+ end
48
+
49
+ """
@@ -5,15 +5,24 @@
5
5
  シナリオ: トップページにアクセスしてエディタ画面を表示する
6
6
  もし "トップページ" にアクセスする
7
7
 
8
+ ならば "ブロックタブ" が表示されていること
9
+ かつ "プログラム名の入力欄" が表示されていること
10
+ かつ "ダウンロードボタン" が表示されていること
11
+
12
+ シナリオ: エディタ画面を表示してRubyタブに切り替える
13
+ 前提 "エディタ" 画面を表示する
14
+
15
+ もし "Rubyタブ" にタブを切り替える
16
+
8
17
  ならば "Rubyタブ" が表示されていること
9
18
  かつ "テキストエディタ" が表示されていること
10
19
  かつ "プログラム名の入力欄" が表示されていること
11
- かつ "セーブボタン" が表示されていること
20
+ かつ "ダウンロードボタン" が表示されていること
12
21
  かつ テキストエディタにフォーカスがあること
13
22
  かつ テキストエディタの 0 行目の 0 文字目にカーソルがあること
14
23
 
15
24
  シナリオ: プログラムを入力後にページを遷移する
16
- 前提 "エディタ" 画面を表示する
25
+ 前提 "Ruby" タブを表示する
17
26
  かつ テキストエディタに "puts 'Hello, World!'" を入力済みである
18
27
  かつ プログラムの名前に "01.rb" を指定する
19
28
 
@@ -1,25 +1,24 @@
1
1
  # encoding: utf-8
2
2
  # language: ja
3
3
  @javascript
4
- @standalone
5
- 機能: Check - プログラムのエラーチェック(standaloneモード)
6
- シナリオ: セーブ後、プログラムにシンタックスエラーがないことをチェックできる
7
- 前提 "エディタ" 画面を表示する
8
- かつ テキストエディタに "puts 'Hello, World!'" を入力済みである
4
+ 機能: Check - プログラムのエラーチェック
5
+ シナリオ: チェックボタンを押してプログラムにシンタックスエラーがないことをチェックできる
6
+ 前提 "Ruby" タブを表示する
9
7
  かつ プログラムの名前に "01.rb" を指定する
8
+ かつ テキストエディタに "puts 'Hello, World!'" を入力済みである
10
9
 
11
- もし "セーブボタン" をクリックする
10
+ もし サブメニューの "チェックボタン" をクリックする
12
11
  かつ JavaScriptによるリクエストが終わるまで待つ
13
12
 
14
13
  ならば "メッセージ" に "チェックしました" を含むこと
15
14
  かつ "メッセージ" に "ただし、プログラムを動かすとエラーが見つかるかもしれません。" を含むこと
16
15
 
17
- シナリオ: セーブ後、プログラムにシンタックスエラーがあることをチェックできる
18
- 前提 "エディタ" 画面を表示する
16
+ シナリオ: チェックボタンを押してプログラムにシンタックスエラーがあることをチェックできる
17
+ 前提 "Ruby" タブを表示する
19
18
  かつ プログラムの名前に "01.rb" を指定する
20
19
  かつ テキストエディタに "puts Hello, World!'" を入力済みである
21
20
 
22
- もし "セーブボタン" をクリックする
21
+ もし サブメニューの "チェックボタン" をクリックする
23
22
  かつ JavaScriptによるリクエストが終わるまで待つ
24
23
 
25
24
  ならば "メッセージ" に "エラー" を含むこと
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: Download - プログラムのダウンロード
5
+ シナリオ: ダウンロードボタンを押してプログラムを保存できる
6
+ 前提 "Ruby" タブを表示する
7
+ かつ テキストエディタに "puts 'Hello, World!'" を入力済みである
8
+ かつ プログラムの名前に "01.rb" を指定する
9
+
10
+ もし "ダウンロードボタン" をクリックする
11
+ かつ JavaScriptによるリクエストが終わるまで待つ
12
+
13
+ ならば "01.rb" をダウンロードすること
14
+ かつ "メッセージ" に "ダウンロードしました" を含むこと
15
+
16
+ シナリオ: 日本語のファイル名でプログラムを保存できる
17
+ 前提 "Ruby" タブを表示する
18
+ かつ テキストエディタに "puts 'Hello, World!'" を入力済みである
19
+ かつ プログラムの名前に "日本語.rb" を指定する
20
+
21
+ もし "ダウンロードボタン" をクリックする
22
+ かつ JavaScriptによるリクエストが終わるまで待つ
23
+
24
+ ならば "日本語.rb" をダウンロードすること
25
+ かつ "メッセージ" に "ダウンロードしました" を含むこと
26
+
27
+ シナリオ: ファイル名を入力せずにダウンロードボタンを押す
28
+ 前提 "Ruby" タブを表示する
29
+
30
+ もし "ダウンロードボタン" をクリックする
31
+
32
+ ならば "1.rb" をダウンロードすること
33
+ かつ "メッセージ" に "ダウンロードしました" を含むこと
@@ -3,7 +3,7 @@
3
3
  @javascript
4
4
  機能: Load - プログラムのロード
5
5
  シナリオ: プログラムを読み込む
6
- 前提 "エディタ" 画面を表示する
6
+ 前提 "Ruby" タブを表示する
7
7
 
8
8
  もし "files/01.rb" をロードする
9
9
  かつ JavaScriptによるリクエストが終わるまで待つ
@@ -15,7 +15,7 @@
15
15
  かつ "メッセージ" に "ロードしました" を含むこと
16
16
 
17
17
  シナリオ: プログラムを入力済み状態でプログラムを読み込む
18
- 前提 "エディタ" 画面を表示する
18
+ 前提 "Ruby" タブを表示する
19
19
  かつ テキストエディタに "puts 'Hello, World!'" を入力済みである
20
20
 
21
21
  もし "files/01.rb" をロードする
@@ -28,7 +28,7 @@
28
28
  かつ "メッセージ" に "ロードしました" を含むこと
29
29
 
30
30
  シナリオ: 間違って画像を読み込もうとする
31
- 前提 "エディタ" 画面を表示する
31
+ 前提 "Ruby" タブを表示する
32
32
 
33
33
  もし "files/favicon.ico" をロードする
34
34
  かつ JavaScriptによるリクエストが終わるまで待つ
@@ -39,43 +39,43 @@
39
39
  かつ "メッセージ" に "ロードしました" を含まないこと
40
40
 
41
41
  シナリオ: プログラムを修正後にロードボタンを押す
42
- 前提 "エディタ" 画面を表示する
42
+ 前提 "Ruby" タブを表示する
43
43
  かつ テキストエディタに "puts 'Hello, World!'" を入力済みである
44
44
 
45
- もし "ロードボタン" をクリックする
45
+ もし サブメニューの "ロードボタン" をクリックする
46
46
 
47
47
  ならば 確認メッセージ "まだセーブしていないのでロードするとプログラムが消えてしまうよ!\nそれでもロードしますか?" を表示すること
48
48
 
49
- シナリオ: プログラムを修正後にセーブしてからロードボタンを押す
50
- 前提 "エディタ" 画面を表示する
49
+ シナリオ: プログラムを修正後にダウンロードしてからロードボタンを押す
50
+ 前提 "Ruby" タブを表示する
51
51
  かつ テキストエディタに "puts 'Hello, World!'" を入力済みである
52
52
  かつ プログラムの名前に "01.rb" を指定する
53
- かつ "セーブボタン" をクリックする
53
+ かつ "ダウンロードボタン" をクリックする
54
54
  かつ JavaScriptによるリクエストが終わるまで待つ
55
55
  かつ ダウンロードが完了するまで待つ
56
56
  かつ 実際にはファイルをロードしないようにしておく
57
57
 
58
- もし "ロードボタン" をクリックする
58
+ もし サブメニューの "ロードボタン" をクリックする
59
59
 
60
60
  ならば 確認メッセージを表示しないこと
61
61
 
62
62
  シナリオ: プログラムを修正後にプログラムをロードしてからロードボタンを押す
63
- 前提 "エディタ" 画面を表示する
63
+ 前提 "Ruby" タブを表示する
64
64
  かつ テキストエディタに "puts 'Hello, World!'" を入力済みである
65
65
  かつ "files/01.rb" をロードする
66
66
  かつ JavaScriptによるリクエストが終わるまで待つ
67
67
  かつ 実際にはファイルをロードしないようにしておく
68
68
 
69
- もし "ロードボタン" をクリックする
69
+ もし サブメニューの "ロードボタン" をクリックする
70
70
 
71
71
  ならば 確認メッセージを表示しないこと
72
72
 
73
73
  シナリオ: プログラムを修正後に間違って画像をロードしてからロードボタンを押す
74
- 前提 "エディタ" 画面を表示する
74
+ 前提 "Ruby" タブを表示する
75
75
  かつ テキストエディタに "puts 'Hello, World!'" を入力済みである
76
76
  かつ "files/favicon.ico" をロードする
77
77
  かつ JavaScriptによるリクエストが終わるまで待つ
78
78
 
79
- もし "ロードボタン" をクリックする
79
+ もし サブメニューの "ロードボタン" をクリックする
80
80
 
81
81
  ならば 確認メッセージ "まだセーブしていないのでロードするとプログラムが消えてしまうよ!\nそれでもロードしますか?" を表示すること
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ @standalone
5
+ 機能: Run - プログラムの実行(standaloneモード)
6
+ シナリオ: 実行前にプログラムのシンタックスエラーをチェックできる
7
+ 前提 "Ruby" タブを表示する
8
+ かつ プログラムの名前に "01.rb" を指定する
9
+ かつ テキストエディタに "puts Hello, World!'" を入力済みである
10
+
11
+ もし "実行ボタン" をクリックする
12
+ かつ JavaScriptによるリクエストが終わるまで待つ
13
+
14
+ ならば "メッセージ" に "エラー" を含むこと
15
+ かつ "メッセージ" に "プログラムを実行できませんでした" を含むこと
16
+ かつ "メッセージ" に "1行、19文字: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('" を含むこと
17
+ かつ "メッセージ" に "1行: unterminated string meets end of file" を含むこと