smalruby-editor 0.2.6-x86-mingw32 → 0.2.7-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of smalruby-editor might be problematic. Click here for more details.

Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -0
  3. data/Guardfile +2 -0
  4. data/app/assets/javascripts/blocks/hardware.js.coffee.erb +1 -1
  5. data/app/assets/javascripts/fix_blockly.js.erb +0 -50
  6. data/app/assets/javascripts/generators/ruby.js.coffee.erb +18 -4
  7. data/app/assets/javascripts/models/source_code.js +1 -1
  8. data/app/assets/javascripts/msg/en_us.js +1 -0
  9. data/app/assets/javascripts/msg/ja.js +4 -0
  10. data/app/assets/javascripts/smalruby.js.coffee.erb +50 -6
  11. data/app/assets/javascripts/views/main_menu_view.js.coffee.erb +14 -4
  12. data/app/assets/javascripts/views/preference_modal_view.js.coffee.erb +71 -0
  13. data/app/assets/javascripts/views/signin_modal_view.js.coffee.erb +5 -4
  14. data/app/assets/stylesheets/application.css +1 -0
  15. data/app/assets/stylesheets/preference-modal.css.scss +22 -0
  16. data/app/assets/stylesheets/toolbox.css.scss.erb +36 -0
  17. data/app/controllers/application_controller.rb +20 -4
  18. data/app/controllers/editor_controller.rb +4 -0
  19. data/app/controllers/sessions_controller.rb +7 -4
  20. data/app/controllers/source_codes_controller.rb +2 -2
  21. data/app/controllers/users_controller.rb +22 -0
  22. data/app/helpers/application_helper.rb +4 -4
  23. data/app/helpers/sessions_helper.rb +0 -0
  24. data/app/helpers/users_helper.rb +10 -0
  25. data/app/models/concerns/ruby_to_block/block/hardware_init_hardware.rb +0 -6
  26. data/app/models/concerns/ruby_to_block/block/hardware_operation.rb +0 -0
  27. data/app/models/preference.rb +71 -0
  28. data/app/models/source_code.rb +4 -0
  29. data/app/models/user.rb +26 -0
  30. data/app/views/editor/_block_tab.html.haml +5 -6
  31. data/app/views/editor/_load_modal.html.haml +2 -2
  32. data/app/views/editor/_preference_modal.html.haml +16 -0
  33. data/app/views/editor/_signin_modal.html.haml +1 -1
  34. data/app/views/editor/_toolbox_default.html.haml +86 -79
  35. data/app/views/editor/{_toolbox_raspberrypi.html.haml → _toolbox_smalrubot.html.haml} +72 -105
  36. data/app/views/editor/_toolbox_smalrubot_s1.html.haml +1 -196
  37. data/app/views/editor/_toolbox_smalrubot_v3.html.haml +1 -196
  38. data/app/views/editor/index.html.haml +11 -4
  39. data/app/views/editor/toolbox.html.haml +1 -0
  40. data/app/views/layouts/application.html.erb +1 -1
  41. data/app/views/users/preferences.html.haml +34 -0
  42. data/config/application.rb +1 -1
  43. data/config/locales/en.yml +30 -0
  44. data/config/locales/ja.yml +30 -0
  45. data/config/routes.rb +4 -57
  46. data/db/migrate/20150513061200_create_users.rb +10 -0
  47. data/db/migrate/20150513061250_add_index_name_on_users.rb +9 -0
  48. data/db/schema.rb +10 -1
  49. data/lib/smalruby_editor.rb +22 -24
  50. data/lib/smalruby_editor/version.rb +1 -1
  51. data/smalruby-editor.gemspec +0 -0
  52. data/spec/acceptance/block_mode/blocks/hardware/button_pressed_or_released.feature +2 -0
  53. data/spec/acceptance/block_mode/blocks/hardware/init_hardware.feature +1 -0
  54. data/spec/acceptance/block_mode/blocks/hardware/led_turn_off.feature +11 -1
  55. data/spec/acceptance/block_mode/blocks/hardware/led_turn_on.feature +11 -1
  56. data/spec/acceptance/block_mode/blocks/hardware/motor_driver.feature +7 -1
  57. data/spec/acceptance/block_mode/blocks/hardware/motor_driver_speed.feature +2 -0
  58. data/spec/acceptance/block_mode/blocks/hardware/rgb_led_set_color.feature +9 -12
  59. data/spec/acceptance/block_mode/blocks/hardware/rgb_led_turn_off.feature +9 -12
  60. data/spec/acceptance/block_mode/blocks/hardware/sensor_value.feature +59 -60
  61. data/spec/acceptance/block_mode/blocks/hardware/servo_set_position.feature +76 -67
  62. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_s1_action.feature +9 -12
  63. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_s1_action_with_sec.feature +9 -11
  64. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_s1_dc_motor_power_ratio.feature +11 -12
  65. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_s1_led_turn_on_or_off.feature +9 -10
  66. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_v3_action.feature +9 -12
  67. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_v3_action_with_sec.feature +9 -11
  68. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_v3_dc_motor_power_ratio.feature +11 -12
  69. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_v3_led_turn_on_or_off.feature +9 -12
  70. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_v3_sensor_value.feature +11 -12
  71. data/spec/acceptance/block_mode/blocks/hardware/two_wheel_drive_car.feature +7 -1
  72. data/spec/acceptance/block_mode/blocks/hardware/two_wheel_drive_car_speed.feature +2 -0
  73. data/spec/acceptance/standalone/preference.feature +92 -0
  74. data/{demos → spec/fixtures/files}/hardware_led.rb.xml +0 -0
  75. data/spec/javascripts/models/source_code_spec.coffee +0 -0
  76. data/spec/models/concerns/ruby_to_block/block/hardware__smalrubot_spec.rb +1 -1
  77. data/spec/models/concerns/ruby_to_block/block/hardware_spec.rb +4 -4
  78. data/spec/models/concerns/ruby_to_block_spec.rb +1 -1
  79. data/spec/models/source_code_spec.rb +1 -11
  80. data/spec/spec_helper.rb +8 -0
  81. data/spec/steps/base_steps.rb +68 -16
  82. data/spec/steps/standalone_steps.rb +21 -0
  83. data/spec/steps/text_editor_steps.rb +8 -8
  84. data/spec/support/feature_helper.rb +13 -0
  85. data/vendor/assets/javascripts/blockly/blockly_compressed.js +500 -454
  86. data/vendor/assets/javascripts/blockly/blocks_compressed.js +29 -28
  87. data/vendor/assets/javascripts/blockly/msg/js/ja.js +2 -1
  88. metadata +33 -35
  89. data/app/assets/stylesheets/toolbox_default.css.scss.erb +0 -34
  90. data/app/assets/stylesheets/toolbox_raspberrypi.css.scss.erb +0 -32
  91. data/app/assets/stylesheets/toolbox_smalrubot_s1.css.scss.erb +0 -32
  92. data/app/assets/stylesheets/toolbox_smalrubot_v3.css.scss.erb +0 -32
  93. data/demos/adjust_2wd_car.rb.xml +0 -179
  94. data/lib/smalruby_editor/config.rb +0 -24
  95. data/spec/controllers/editor_controller_spec.rb +0 -12
  96. data/spec/controllers/sessions_controller_spec.rb +0 -74
  97. data/spec/helpers/sessions_helper_spec.rb +0 -15
@@ -18,7 +18,13 @@
18
18
  """
19
19
  かつ ブロックからソースコードを生成する
20
20
 
21
- ならば テキストエディタのプログラムは "" であること
21
+ ならば テキストエディタのプログラムは以下であること:
22
+ """
23
+ require "smalruby"
24
+
25
+ init_hardware
26
+
27
+ """
22
28
 
23
29
  # キャラクターとブロックを配置する
24
30
  もし 次のブロック("hardware_two_wheel_drive_car_<ブロック名のサフィックス>")を配置する:
@@ -36,6 +36,8 @@
36
36
  """
37
37
  require "smalruby"
38
38
 
39
+ init_hardware
40
+
39
41
  p("")
40
42
 
41
43
  """
@@ -0,0 +1,92 @@
1
+ # encoding: utf-8
2
+ # language: en
3
+ @javascript
4
+ @standalone
5
+ Feature: Preference - 設定
6
+ Background:
7
+ When セッションをクリアする
8
+ And '/' にアクセスする
9
+
10
+ Scenario: ログインして設定ダイアログを表示する
11
+ When "submenu-button" をクリックする
12
+
13
+ Then "#submenu" に "#preference-button" が表示されていないこと
14
+
15
+ When ログインする
16
+ And "submenu-button" をクリックする
17
+
18
+ Then "#submenu" に "#preference-button" が表示されていること
19
+
20
+ When サブメニューの "#preference-button" をクリックする
21
+ And JavaScriptによるアニメーションが終わるまで待つ
22
+
23
+ Then "#preference-modal" が表示されていること
24
+
25
+ When "preference-modal-ok-button" をクリックする
26
+ And JavaScriptによるリクエストが終わるまで待つ
27
+
28
+ Then "#preference-modal" が表示されていないこと
29
+
30
+ When ログアウトする
31
+ And "submenu-button" をクリックする
32
+
33
+ Then "#submenu" に "#preference-button" が表示されていないこと
34
+
35
+ Scenario: ツールボックス "通常" の設定を変更する
36
+ When ログインする
37
+ And サブメニューの "#preference-button" をクリックする
38
+
39
+ Then "#preference-modal" が表示されていること
40
+ And コンボボックス "user[preferences][toolbox_name]" の "通常" を選択していること
41
+ And "#user_preferences_toolbox__default__enabled_hardware_blocks" が表示されていること
42
+ And "user[preferences][toolbox__default__enabled_hardware_blocks]" がチェックされていないこと
43
+ And "#user_preferences_toolbox__default__enabled_smalrubot_v3_blocks" が表示されていること
44
+ And "user[preferences][toolbox__default__enabled_smalrubot_v3_blocks]" がチェックされていないこと
45
+ And "#user_preferences_toolbox__default__enabled_smalrubot_s1_blocks" が表示されていること
46
+ And "user[preferences][toolbox__default__enabled_smalrubot_s1_blocks]" がチェックされていないこと
47
+
48
+ When "user[preferences][toolbox__default__enabled_hardware_blocks]" をチェックする
49
+ And "user[preferences][toolbox__default__enabled_smalrubot_v3_blocks]" をチェックする
50
+ And "user[preferences][toolbox__default__enabled_smalrubot_s1_blocks]" をチェックする
51
+ And "preference-modal-ok-button" をクリックする
52
+ And JavaScriptによるリクエストが終わるまで待つ
53
+
54
+ Then "#preference-modal" が表示されていないこと
55
+
56
+ When サブメニューの "#preference-button" をクリックする
57
+
58
+ Then "#preference-modal" が表示されていること
59
+ And コンボボックス "user[preferences][toolbox_name]" の "通常" を選択していること
60
+ And "#user_preferences_toolbox__default__enabled_hardware_blocks" が表示されていること
61
+ And "user[preferences][toolbox__default__enabled_hardware_blocks]" がチェックされていること
62
+ And "#user_preferences_toolbox__default__enabled_smalrubot_v3_blocks" が表示されていること
63
+ And "user[preferences][toolbox__default__enabled_smalrubot_v3_blocks]" がチェックされていること
64
+ And "#user_preferences_toolbox__default__enabled_smalrubot_s1_blocks" が表示されていること
65
+ And "user[preferences][toolbox__default__enabled_smalrubot_s1_blocks]" がチェックされていること
66
+
67
+ Scenario: 一般設定を変更する
68
+ When ログインする
69
+ And サブメニューの "#preference-button" をクリックする
70
+
71
+ Then "#preference-modal" が表示されていること
72
+ And "user[preferences][disabled_add_character_from_beginning]" がチェックされていること
73
+ And "user[preferences][disabled_new_character]" がチェックされていないこと
74
+ And "user[preferences][enabled_auto_init_hardware]" がチェックされていないこと
75
+ And "user[preferences][enabled_readonly_ruby_mode]" がチェックされていないこと
76
+
77
+ When "user[preferences][disabled_add_character_from_beginning]" のチェックを外す
78
+ And "user[preferences][disabled_new_character]" をチェックする
79
+ And "user[preferences][enabled_auto_init_hardware]" をチェックする
80
+ And "user[preferences][enabled_readonly_ruby_mode]" をチェックする
81
+ And "preference-modal-ok-button" をクリックする
82
+ And JavaScriptによるリクエストが終わるまで待つ
83
+
84
+ Then "#preference-modal" が表示されていないこと
85
+
86
+ When サブメニューの "#preference-button" をクリックする
87
+
88
+ Then "#preference-modal" が表示されていること
89
+ And "user[preferences][disabled_add_character_from_beginning]" がチェックされていないこと
90
+ And "user[preferences][disabled_new_character]" がチェックされていること
91
+ And "user[preferences][enabled_auto_init_hardware]" がチェックされていること
92
+ And "user[preferences][enabled_readonly_ruby_mode]" がチェックされていること
File without changes
File without changes
@@ -11,6 +11,7 @@ describe RubyToBlock::Block, 'Smalrubot blocks', to_blocks: true do
11
11
  require "smalruby"
12
12
 
13
13
  init_hardware
14
+
14
15
  car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
15
16
 
16
17
  car1.on(:start) do
@@ -69,7 +70,6 @@ car1.smalrubot_#{smalrubot_version}.right_dc_motor_power_ratio = 90
69
70
  it '結果が正しいこと' do
70
71
  should eq_block_xml(<<-XML)
71
72
  <character name="car1" x="0" y="0" angle="0" costumes="car1.png" />
72
- <block type="hardware_init_hardware" />
73
73
  <block type="character_new">
74
74
  <field name="NAME">car1</field>
75
75
  <statement name="DO">
@@ -9,6 +9,7 @@ describe RubyToBlock::Block, 'ハードウェアジャンル', to_blocks: true d
9
9
  require "smalruby"
10
10
 
11
11
  init_hardware
12
+
12
13
  car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
13
14
 
14
15
  car1.on(:start) do
@@ -40,7 +41,6 @@ end
40
41
  it '結果が正しいこと' do
41
42
  should eq_block_xml(<<-XML)
42
43
  <character name="car1" x="0" y="0" angle="0" costumes="car1.png" />
43
- <block type="hardware_init_hardware" />
44
44
  <block type="character_new">
45
45
  <field name="NAME">car1</field>
46
46
  <statement name="DO">
@@ -201,6 +201,7 @@ end
201
201
  require "smalruby"
202
202
 
203
203
  init_hardware
204
+
204
205
  car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
205
206
 
206
207
  car1.on(:start) do
@@ -220,7 +221,6 @@ car1.motor_driver("D3").stop
220
221
  it '結果が正しいこと' do
221
222
  should eq_block_xml(<<-XML)
222
223
  <character name="car1" x="0" y="0" angle="0" costumes="car1.png" />
223
- <block type="hardware_init_hardware" />
224
224
  <block type="character_new">
225
225
  <field name="NAME">car1</field>
226
226
  <statement name="DO">
@@ -292,6 +292,7 @@ car1.motor_driver("D3").stop
292
292
  require "smalruby"
293
293
 
294
294
  init_hardware
295
+
295
296
  car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
296
297
 
297
298
  car1.on(:start) do
@@ -311,7 +312,6 @@ car1.two_wheel_drive_car("D5").stop
311
312
  it '結果が正しいこと' do
312
313
  should eq_block_xml(<<-XML)
313
314
  <character name="car1" x="0" y="0" angle="0" costumes="car1.png" />
314
- <block type="hardware_init_hardware" />
315
315
  <block type="character_new">
316
316
  <field name="NAME">car1</field>
317
317
  <statement name="DO">
@@ -384,6 +384,7 @@ car1.two_wheel_drive_car("D5").stop
384
384
  require "smalruby"
385
385
 
386
386
  init_hardware
387
+
387
388
  car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
388
389
 
389
390
  car1.on(:start) do
@@ -400,7 +401,6 @@ p(car1.button("D3").pressed?)
400
401
  it '結果が正しいこと' do
401
402
  should eq_block_xml(<<-XML)
402
403
  <character name="car1" x="0" y="0" angle="0" costumes="car1.png" />
403
- <block type="hardware_init_hardware" />
404
404
  <block type="character_new">
405
405
  <field name="NAME">car1</field>
406
406
  <statement name="DO">
@@ -419,6 +419,7 @@ end
419
419
  require "smalruby"
420
420
 
421
421
  init_hardware
422
+
422
423
  frog1 = Character.new(costume: "frog1.png", x: 261, y: 191, angle: 0)
423
424
 
424
425
  frog1.on(:click) do
@@ -440,7 +441,6 @@ end
440
441
  it '結果が正しいこと' do
441
442
  should eq_block_xml(<<-XML)
442
443
  <character name="frog1" x="261" y="191" angle="0" costumes="frog1.png" />
443
- <block type="hardware_init_hardware" />
444
444
  <block type="character_new">
445
445
  <field name="NAME">frog1</field>
446
446
  <statement name="DO">
@@ -102,16 +102,6 @@ describe SourceCode, 'Rubyのソースコードを表現するモデル' do
102
102
  filename: 'pong.rb',
103
103
  imageUrl: '/smalruby/assets/cat2.png',
104
104
  },
105
- hardware_led: {
106
- title: 'ライトをぴかっとさせるでよ',
107
- filename: 'hardware_led.rb',
108
- imageUrl: '/smalruby/assets/frog1.png',
109
- },
110
- adjust_2wd_car: {
111
- title: '2WD車の左右のモーターを調整する',
112
- filename: 'adjust_2wd_car.rb',
113
- imageUrl: '/smalruby/assets/car2.png',
114
- },
115
105
  }.each do |name, summary|
116
106
  _rb_path = "demos/#{name}.rb"
117
107
  context "'#{_rb_path + '.xml'}'" do
@@ -152,7 +142,7 @@ describe SourceCode, 'Rubyのソースコードを表現するモデル' do
152
142
  subject { source_code.include_block?(type) }
153
143
 
154
144
  context 'ソースコードにハードウェア関連ブロックを含む場合' do
155
- let(:xml_path) { 'demos/adjust_2wd_car.rb.xml' }
145
+ let(:xml_path) { 'spec/fixtures/files/hardware_led.rb.xml' }
156
146
 
157
147
  context '引数にhardware_init_hardwareを指定する' do
158
148
  let(:type) { 'hardware_init_hardware' }
data/spec/spec_helper.rb CHANGED
@@ -98,6 +98,14 @@ RSpec.configure do |config|
98
98
  config.include ERB::Util, type: :helper
99
99
  config.include ERB::Util, type: :feature
100
100
  config.include ActionView::Helpers::JavaScriptHelper, type: :feature
101
+ config.include FeatureHelper, type: :feature
102
+
103
+ config.before(:all) do
104
+ Preference.defaults.each do |key, value|
105
+ Preference[key] = value
106
+ end
107
+ Preference["disabled_add_character_from_beginning"] = true
108
+ end
101
109
 
102
110
  config.after(javascript: true) do
103
111
  page.execute_script('window.onbeforeunload = null')
@@ -6,7 +6,7 @@ end
6
6
 
7
7
  step ':name にアクセスする' do |name|
8
8
  page.driver.headers = { 'Accept-Language' => 'ja' }
9
- visit NAME_INFO[name][:path]
9
+ visit name_to(name, :path)
10
10
 
11
11
  if poltergeist?
12
12
  page.execute_script('window.confirmResult = true')
@@ -27,16 +27,60 @@ step ':name 画面を表示する' do |name|
27
27
  end
28
28
 
29
29
  step ':name が表示されていること' do |name|
30
- expect(page).to have_selector(NAME_INFO[name][:selector])
30
+ expect(page).to have_selector(name_to(name))
31
31
  end
32
32
 
33
33
  step ':name が表示されていないこと' do |name|
34
- expect(page).not_to have_selector(NAME_INFO[name][:selector])
34
+ expect(page).not_to have_selector(name_to(name))
35
+ end
36
+
37
+ step ':parent に :name が表示されていること' do |parent, name|
38
+ within(name_to(parent)) do
39
+ expect(page.all(name_to(name), visible: true)).not_to be_empty
40
+ end
41
+ end
42
+
43
+ step ':parent に :name が表示されていないこと' do |parent, name|
44
+ within(name_to(parent)) do
45
+ expect(page.all(name_to(name), visible: true)).to be_empty
46
+ end
47
+ end
48
+
49
+ step 'コンボボックス :name の :option_label を選択していること' do
50
+ |name, option_label|
51
+ expect(find(%{select[name="#{name}"] option[selected]}).text)
52
+ .to eq(option_label)
53
+ end
54
+
55
+ step 'コンボボックス :name の :option_label を選択していないこと' do
56
+ |name, option_label|
57
+ expect(find(%{select[name="#{name}"] option[selected]}).text)
58
+ .not_to eq(option_label)
59
+ end
60
+
61
+ step ':name に :value を指定する' do |name, value|
62
+ fill_in(name_to(name, :id), with: value)
63
+ end
64
+
65
+ step ':name をチェックする' do |name|
66
+ check(name)
67
+ end
68
+
69
+ step ':name のチェックを外す' do |name|
70
+ uncheck(name)
71
+ end
72
+
73
+ step ':name がチェックされていること' do |name|
74
+ expect(find(%{input[type="checkbox"][name="#{name}"]})).to be_checked
75
+ end
76
+
77
+ step ':name がチェックされていないこと' do |name|
78
+ expect(find(%{input[type="checkbox"][name="#{name}"]})).not_to be_checked
35
79
  end
36
80
 
37
81
  step ':name にタブを切り替える' do |name|
38
82
  page.execute_script(<<-JS)
39
- $('#tabs a[href=\"#{NAME_INFO[name][:selector]}\"]').click()
83
+ $('#tabs a[href=\"#{name_to(name)}\"]').click()
40
84
  JS
41
85
  end
42
86
 
@@ -45,10 +89,6 @@ step ':name タブを表示する' do |name|
45
89
  step %("#{name}タブ" にタブを切り替える)
46
90
  end
47
91
 
48
- step ':name に :value を指定する' do |name, value|
49
- fill_in(NAME_INFO.key?(name) ? NAME_INFO[name][:id] : name, with: value)
50
- end
51
-
52
92
  step 'プログラムの名前に :filename を指定する' do |filename|
53
93
  step %("プログラム名の入力欄" に "#{filename}" を指定する)
54
94
  end
@@ -56,12 +96,14 @@ end
56
96
  step 'サブメニューの :name をクリックする' do |name|
57
97
  # HACK: 以下では期待通りの動作にならなかったのでjQueryで無理やり実現した
58
98
  # click_on('submenu-button')
59
- # click_on(NAME_INFO[name][:id])
60
- page.execute_script("$('#{NAME_INFO[name][:selector]}').click()")
99
+ # click_on(name_to(name, :id))
100
+ page.execute_script("$('#{name_to(name)}').click()")
101
+ step %{JavaScriptによるリクエストが終わるまで待つ}
102
+ step %{JavaScriptによるアニメーションが終わるまで待つ}
61
103
  end
62
104
 
63
105
  step ':name をクリックする' do |name|
64
- click_on(NAME_INFO[name][:id])
106
+ click_on(name_to(name, :id))
65
107
  end
66
108
 
67
109
  step 'ダウンロードが完了するまで待つ' do
@@ -98,7 +140,7 @@ end
98
140
 
99
141
  step ':name にフォーカスを移す' do |name|
100
142
  page.execute_script(<<-JS)
101
- $('#{NAME_INFO[name][:selector]}').focus()
143
+ $('#{name_to(name)}').focus()
102
144
  JS
103
145
  end
104
146
 
@@ -106,7 +148,7 @@ step ':name にフォーカスがあること' do |name|
106
148
  # HACK: 現在のPhantomJSでは$(':focus')は動作しない
107
149
  # https://github.com/netzpirat/guard-jasmine/issues/48
108
150
  expect(page.evaluate_script(<<-JS)).to be_true
109
- $('#{NAME_INFO[name][:selector]}').get(0) == document.activeElement
151
+ $('#{name_to(name)}').get(0) == document.activeElement
110
152
  JS
111
153
  end
112
154
 
@@ -145,16 +187,16 @@ end
145
187
 
146
188
  step ':name は :value であること' do |name, value|
147
189
  expect(page.evaluate_script(<<-JS)).to eq(value)
148
- $('#{NAME_INFO[name][:selector]}').val()
190
+ $('#{name_to(name)}').val()
149
191
  JS
150
192
  end
151
193
 
152
194
  step ':name に :message を含むこと' do |name, message|
153
- expect(page.find(NAME_INFO[name][:selector])).to have_content(message)
195
+ expect(page.find(name_to(name))).to have_content(message)
154
196
  end
155
197
 
156
198
  step ':name に :message を含まないこと' do |name, message|
157
- expect(page.find(NAME_INFO[name][:selector])).not_to have_content(message)
199
+ expect(page.find(name_to(name))).not_to have_content(message)
158
200
  end
159
201
 
160
202
  step 'ページをリロードする' do
@@ -278,3 +320,13 @@ step ':directory ディレクトリの :filename の内容が :program である
278
320
  path = Pathname("#{directory}/#{filename}").expand_path
279
321
  expect(path.read).to eq(program)
280
322
  end
323
+
324
+ step 'ページを表示する' do
325
+ # no-op
326
+ end
327
+
328
+ steps_for :debug do
329
+ step 'ページを表示する' do
330
+ save_and_open_page
331
+ end
332
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ step ":name としてログインする" do |name|
4
+ step %{"signin-button" をクリックする}
5
+ step %{JavaScriptによるアニメーションが終わるまで待つ}
6
+ step %{"signin-modal-username" に "#{name}" を指定する}
7
+ step %{"signin-modal-ok-button" をクリックする}
8
+ step %{JavaScriptによるリクエストが終わるまで待つ}
9
+ step %{JavaScriptによるアニメーションが終わるまで待つ}
10
+ end
11
+
12
+ step "ログインする" do
13
+ step %{"1102" としてログインする}
14
+ end
15
+
16
+ step "ログアウトする" do
17
+ step %{"submenu-button" をクリックする}
18
+ step %{サブメニューの "#signout-button" をクリックする}
19
+ step %{JavaScriptによるリクエストが終わるまで待つ}
20
+ step %{"#main-menu" に "ログイン" を含むこと}
21
+ end
@@ -4,13 +4,13 @@ text_editor = 'テキストエディタ'
4
4
 
5
5
  step 'テキストエディタにフォーカスがあること' do
6
6
  expect(page.evaluate_script(<<-JS)).to be_true
7
- ace.edit('#{NAME_INFO[text_editor][:id]}').isFocused()
7
+ ace.edit('#{name_to(text_editor, :id)}').isFocused()
8
8
  JS
9
9
  end
10
10
 
11
11
  step 'テキストエディタの :row 行目の :column 文字目にカーソルがあること' do |row, column|
12
12
  get_cursor_position_js =
13
- "ace.edit('#{NAME_INFO[text_editor][:id]}').getCursorPosition()"
13
+ "ace.edit('#{name_to(text_editor, :id)}').getCursorPosition()"
14
14
  expect(page.evaluate_script("#{get_cursor_position_js}.row")).to eq(row.to_i)
15
15
  expect(page.evaluate_script("#{get_cursor_position_js}.column"))
16
16
  .to eq(column.to_i)
@@ -22,7 +22,7 @@ end
22
22
 
23
23
  step 'テキストエディタにプログラムを入力済みである:' do |program|
24
24
  page.execute_script(<<-JS)
25
- ace.edit('#{NAME_INFO[text_editor][:id]}')
25
+ ace.edit('#{name_to(text_editor, :id)}')
26
26
  .getSession()
27
27
  .getDocument()
28
28
  .setValue('#{program.gsub(/'/, "\\\\'").gsub(/\r?\n/, '\n')}')
@@ -31,7 +31,7 @@ end
31
31
 
32
32
  step 'テキストエディタに :filename を読み込むこと' do |filename|
33
33
  js = <<-JS
34
- ace.edit('#{NAME_INFO[text_editor][:id]}')
34
+ ace.edit('#{name_to(text_editor, :id)}')
35
35
  .getSession()
36
36
  .getDocument()
37
37
  .getValue()
@@ -42,7 +42,7 @@ end
42
42
 
43
43
  step 'テキストエディタのプログラムは以下であること:' do |program|
44
44
  expect(page.evaluate_script(<<-JS)).to eq(program)
45
- ace.edit('#{NAME_INFO[text_editor][:id]}')
45
+ ace.edit('#{name_to(text_editor, :id)}')
46
46
  .getSession()
47
47
  .getDocument()
48
48
  .getValue()
@@ -51,7 +51,7 @@ end
51
51
 
52
52
  step 'テキストエディタのプログラムは以下を含むこと:' do |program|
53
53
  expect(page.evaluate_script(<<-JS)).to include(program)
54
- ace.edit('#{NAME_INFO[text_editor][:id]}')
54
+ ace.edit('#{name_to(text_editor, :id)}')
55
55
  .getSession()
56
56
  .getDocument()
57
57
  .getValue()
@@ -60,7 +60,7 @@ end
60
60
 
61
61
  step 'テキストエディタのプログラムは以下を含まないこと:' do |program|
62
62
  expect(page.evaluate_script(<<-JS)).not_to include(program)
63
- ace.edit('#{NAME_INFO[text_editor][:id]}')
63
+ ace.edit('#{name_to(text_editor, :id)}')
64
64
  .getSession()
65
65
  .getDocument()
66
66
  .getValue()
@@ -69,7 +69,7 @@ end
69
69
 
70
70
  step 'テキストエディタのプログラムは :program であること' do |program|
71
71
  expect(page.evaluate_script(<<-JS)).to eq(program)
72
- ace.edit('#{NAME_INFO[text_editor][:id]}')
72
+ ace.edit('#{name_to(text_editor, :id)}')
73
73
  .getSession()
74
74
  .getDocument()
75
75
  .getValue()