smalruby-editor 0.3.0-x86-mingw32 → 0.3.1-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/smalruby.js.coffee.erb +11 -6
- data/app/controllers/application_controller.rb +2 -1
- data/app/controllers/source_codes_controller.rb +5 -1
- data/app/helpers/users_helper.rb +12 -2
- data/app/models/preference.rb +7 -1
- data/app/models/source_code.rb +4 -4
- data/app/views/users/preferences.html.haml +2 -8
- data/config/locales/ja.yml +1 -0
- data/lib/smalruby_editor.rb +15 -7
- data/lib/smalruby_editor/version.rb +1 -1
- data/smalruby-editor.gemspec +1 -1
- data/spec/acceptance/standalone/preference.feature +31 -0
- data/spec/steps/text_editor_steps.rb +7 -0
- data/spec/steps/then_steps.rb +138 -0
- data/spec/steps/{base_steps.rb → when_steps.rb} +23 -152
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44c1af21464e2386c904952a79eb44e577d39159
|
4
|
+
data.tar.gz: 9e3ce5840d75650e4b0fa2563846c33b7419cb6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a21ec1768b17b6b4a14842be4af5de28c900ec4103328bc5e5deb80b427275ff874265be94fc84b457cf1212a52f8d7503a96419c7d9a8dca7b98f3c2ce21bfe
|
7
|
+
data.tar.gz: 4d9ca92f49b939704d4310b1105a44a0aa46edf00258f4a67d913857dc5753ee5c6bb506d8daeb1ae8ae3e9fbd6ba10b1b11da16d60eeef1e87988ff6e892064
|
@@ -121,6 +121,8 @@ window.Smalruby =
|
|
121
121
|
session.setTabSize(2)
|
122
122
|
session.setUseSoftTabs(true)
|
123
123
|
|
124
|
+
@applyPreferences()
|
125
|
+
|
124
126
|
@addCharacterFromBeginning()
|
125
127
|
|
126
128
|
loadXml: (data, workspace = Blockly.mainWorkspace) ->
|
@@ -188,10 +190,10 @@ window.Smalruby =
|
|
188
190
|
|
189
191
|
addCharacterFromBeginning: ->
|
190
192
|
if !@isEnabled('disabled_add_character_from_beginning')
|
191
|
-
|
193
|
+
costume = 'cat1.png'
|
192
194
|
c = new Smalruby.Character
|
193
|
-
name: @Collections.CharacterSet.uniqueName(
|
194
|
-
costumes: [
|
195
|
+
name: @Collections.CharacterSet.uniqueName(costume)
|
196
|
+
costumes: [costume]
|
195
197
|
x: 200
|
196
198
|
y: 200
|
197
199
|
@Collections.CharacterSet.add(c)
|
@@ -199,13 +201,16 @@ window.Smalruby =
|
|
199
201
|
@Views.CharacterSelectorView.addBlock_(c)
|
200
202
|
window.changed = false
|
201
203
|
|
202
|
-
|
203
|
-
@Preferences = preferences
|
204
|
+
applyPreferences: ->
|
204
205
|
window.textEditor.setReadOnly(@isEnabled('enabled_readonly_ruby_mode'))
|
205
206
|
if @isEnabled('disabled_new_character')
|
206
207
|
$('#add-character-item').hide()
|
207
208
|
else
|
208
209
|
$('#add-character-item').show()
|
210
|
+
|
211
|
+
setPreferences: (preferences) ->
|
212
|
+
@Preferences = preferences
|
213
|
+
@applyPreferences()
|
209
214
|
@changedAfterTranslating = true
|
210
215
|
@reloadToolbox()
|
211
216
|
|
@@ -227,7 +232,7 @@ window.Smalruby =
|
|
227
232
|
error: dfr.reject
|
228
233
|
dfr.promise()
|
229
234
|
.then (data) =>
|
230
|
-
Blockly.updateToolbox(data)
|
235
|
+
Blockly.getMainWorkspace().updateToolbox(data)
|
231
236
|
@hideEmptyCategory()
|
232
237
|
.then(unblock, unblock)
|
233
238
|
.fail =>
|
@@ -24,8 +24,9 @@ class ApplicationController < ActionController::Base
|
|
24
24
|
|
25
25
|
# ロケールの設定
|
26
26
|
def set_locale
|
27
|
-
I18n.locale = params[:locale] ||
|
27
|
+
I18n.locale = params[:locale] || session[:locale] ||
|
28
28
|
extract_locale_from_accept_language_header || I18n.default_locale
|
29
|
+
session[:locale] = I18n.locale
|
29
30
|
Rails.application.routes.default_url_options[:locale] = I18n.locale
|
30
31
|
end
|
31
32
|
|
@@ -99,7 +99,11 @@ class SourceCodesController < ApplicationController
|
|
99
99
|
s = "~/#{source_code.filename}"
|
100
100
|
end
|
101
101
|
path = Pathname(s).expand_path
|
102
|
-
|
102
|
+
env = {}
|
103
|
+
if current_preferences["hardware_port"].present?
|
104
|
+
env["SMALRUBOT_DEVICE"] = current_preferences["hardware_port"]
|
105
|
+
end
|
106
|
+
render json: source_code.run(path, env)
|
103
107
|
end
|
104
108
|
|
105
109
|
def to_blocks
|
data/app/helpers/users_helper.rb
CHANGED
@@ -1,10 +1,20 @@
|
|
1
1
|
module UsersHelper
|
2
2
|
def preferences_field(form, name)
|
3
|
+
html = ""
|
3
4
|
case name
|
4
5
|
when Preference::BOOLEAN_FIELD_REGEXP
|
5
|
-
|
6
|
+
html += content_tag(:div, class: "controls") do
|
7
|
+
form.label(name, class: "checkbox") do
|
8
|
+
form.check_box(name) +
|
9
|
+
t(name, scope: "helpers.label.user[preferences]")
|
10
|
+
end
|
11
|
+
end
|
6
12
|
else
|
7
|
-
form.
|
13
|
+
html += form.label(name, class: "control-label")
|
14
|
+
html += content_tag(:div, class: "controls") do
|
15
|
+
form.text_field(name)
|
16
|
+
end
|
8
17
|
end
|
18
|
+
raw(html)
|
9
19
|
end
|
10
20
|
end
|
data/app/models/preference.rb
CHANGED
@@ -24,6 +24,7 @@ class Preference < Settingslogic
|
|
24
24
|
disabled_add_character_from_beginning
|
25
25
|
disabled_new_character
|
26
26
|
enabled_readonly_ruby_mode
|
27
|
+
hardware_port
|
27
28
|
)
|
28
29
|
end
|
29
30
|
|
@@ -41,7 +42,12 @@ class Preference < Settingslogic
|
|
41
42
|
def self.defaults
|
42
43
|
(toolbox_preference_names +
|
43
44
|
general_preference_names).map { |n|
|
44
|
-
|
45
|
+
case n
|
46
|
+
when BOOLEAN_FIELD_REGEXP
|
47
|
+
[n, false]
|
48
|
+
else
|
49
|
+
[n, ""]
|
50
|
+
end
|
45
51
|
}.to_h.merge("toolbox_name" => "default")
|
46
52
|
end
|
47
53
|
|
data/app/models/source_code.rb
CHANGED
@@ -53,8 +53,8 @@ class SourceCode < ActiveRecord::Base
|
|
53
53
|
end
|
54
54
|
|
55
55
|
# プログラムを実行する
|
56
|
-
def run(path)
|
57
|
-
_, stderr_str, status = *open3_capture3_run_program(path)
|
56
|
+
def run(path, env = {})
|
57
|
+
_, stderr_str, status = *open3_capture3_run_program(path, env)
|
58
58
|
return [] if status.success?
|
59
59
|
|
60
60
|
parse_ruby_error_messages(stderr_str)
|
@@ -146,9 +146,9 @@ class SourceCode < ActiveRecord::Base
|
|
146
146
|
end
|
147
147
|
end
|
148
148
|
|
149
|
-
def open3_capture3_run_program(path)
|
149
|
+
def open3_capture3_run_program(path, env)
|
150
150
|
Bundler.with_clean_env do
|
151
|
-
Open3.capture3("#{ruby_cmd} #{path}")
|
151
|
+
Open3.capture3(env, "#{ruby_cmd} #{path}")
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
@@ -15,10 +15,7 @@
|
|
15
15
|
- Preference.make_toolbox_name_to_preference_names_hash.each do |toolbox_name, preference_names|
|
16
16
|
- preference_names.each do |n|
|
17
17
|
.control-group{class: "toolbox_preferences #{toolbox_name}"}
|
18
|
-
|
19
|
-
= f2.label(n, class: "checkbox") do
|
20
|
-
= preferences_field(f2, n)
|
21
|
-
= t(n, scope: "helpers.label.user[preferences]")
|
18
|
+
= preferences_field(f2, n)
|
22
19
|
|
23
20
|
- if Preference.general_preference_names.length > 0
|
24
21
|
.page-header
|
@@ -28,7 +25,4 @@
|
|
28
25
|
|
29
26
|
- Preference.general_preference_names.each do |n|
|
30
27
|
.control-group
|
31
|
-
|
32
|
-
= f2.label(n, class: "checkbox") do
|
33
|
-
= preferences_field(f2, n)
|
34
|
-
= t(n, scope: "helpers.label.user[preferences]")
|
28
|
+
= preferences_field(f2, n)
|
data/config/locales/ja.yml
CHANGED
data/lib/smalruby_editor.rb
CHANGED
@@ -134,10 +134,9 @@ standalone:
|
|
134
134
|
Preference.make_toolbox_name_to_preference_names_hash
|
135
135
|
Preference.toolbox_names.each do |toolbox_name|
|
136
136
|
f.puts("#toolbox_name: #{toolbox_name}")
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
end
|
137
|
+
preference_names =
|
138
|
+
toolbox_name__preference_names.delete(toolbox_name)
|
139
|
+
puts_preference_names(f, preference_names)
|
141
140
|
f.puts
|
142
141
|
end
|
143
142
|
preference_names_list =
|
@@ -145,13 +144,22 @@ standalone:
|
|
145
144
|
[Preference.general_preference_names,
|
146
145
|
Preference.admin_preference_names]
|
147
146
|
preference_names_list.each do |preference_names|
|
148
|
-
preference_names
|
149
|
-
f.puts("##{preference_name}: true")
|
150
|
-
end
|
147
|
+
puts_preference_names(f, preference_names)
|
151
148
|
f.puts
|
152
149
|
end
|
153
150
|
end
|
154
151
|
end
|
155
152
|
end
|
153
|
+
|
154
|
+
def puts_preference_names(io, preference_names)
|
155
|
+
preference_names.try(:each) do |preference_name|
|
156
|
+
case preference_name
|
157
|
+
when Preference::BOOLEAN_FIELD_REGEXP
|
158
|
+
io.puts("##{preference_name}: true")
|
159
|
+
else
|
160
|
+
io.puts(%{##{preference_name}: ""})
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
156
164
|
end
|
157
165
|
end
|
data/smalruby-editor.gemspec
CHANGED
@@ -72,10 +72,12 @@ Feature: Preference - 設定
|
|
72
72
|
And "user[preferences][disabled_add_character_from_beginning]" がチェックされていること
|
73
73
|
And "user[preferences][disabled_new_character]" がチェックされていないこと
|
74
74
|
And "user[preferences][enabled_readonly_ruby_mode]" がチェックされていないこと
|
75
|
+
And "user[preferences][hardware_port]" フィールドの値が "" であること
|
75
76
|
|
76
77
|
When "user[preferences][disabled_add_character_from_beginning]" のチェックを外す
|
77
78
|
And "user[preferences][disabled_new_character]" をチェックする
|
78
79
|
And "user[preferences][enabled_readonly_ruby_mode]" をチェックする
|
80
|
+
And "user[preferences][hardware_port]" フィールドに "COM3" を指定する
|
79
81
|
And "preference-modal-ok-button" をクリックする
|
80
82
|
And JavaScriptによるリクエストが終わるまで待つ
|
81
83
|
|
@@ -87,3 +89,32 @@ Feature: Preference - 設定
|
|
87
89
|
And "user[preferences][disabled_add_character_from_beginning]" がチェックされていないこと
|
88
90
|
And "user[preferences][disabled_new_character]" がチェックされていること
|
89
91
|
And "user[preferences][enabled_readonly_ruby_mode]" がチェックされていること
|
92
|
+
And "user[preferences][hardware_port]" フィールドの値が "COM3" であること
|
93
|
+
|
94
|
+
Scenario: 「キャラクターの追加を禁止する」を設定後、ログアウトせずにリロードしてもキャラクターの追加ボタンを表示しないこと
|
95
|
+
When ログインする
|
96
|
+
And サブメニューの "#preference-button" をクリックする
|
97
|
+
And "user[preferences][disabled_new_character]" をチェックする
|
98
|
+
And "preference-modal-ok-button" をクリックする
|
99
|
+
And JavaScriptによるリクエストが終わるまで待つ
|
100
|
+
|
101
|
+
Then "#preference-modal" が表示されていないこと
|
102
|
+
And "#add-character-item" が表示されていないこと
|
103
|
+
|
104
|
+
When ページをリロードする
|
105
|
+
|
106
|
+
And "#add-character-item" が表示されていないこと
|
107
|
+
|
108
|
+
Scenario: 「プログラムを直接入力できないようにする」を設定後、ログアウトせずにリロードしてもRubyモードでプログラムを直接入力できないこと
|
109
|
+
When ログインする
|
110
|
+
And サブメニューの "#preference-button" をクリックする
|
111
|
+
And "user[preferences][enabled_readonly_ruby_mode]" をチェックする
|
112
|
+
And "preference-modal-ok-button" をクリックする
|
113
|
+
And JavaScriptによるリクエストが終わるまで待つ
|
114
|
+
|
115
|
+
Then "#preference-modal" が表示されていないこと
|
116
|
+
And テキストエディタが編集できない状態であること
|
117
|
+
|
118
|
+
When ページをリロードする
|
119
|
+
|
120
|
+
Then テキストエディタが編集できない状態であること
|
@@ -0,0 +1,138 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
step ':name が表示されていること' do |name|
|
4
|
+
expect(page).to have_selector(name_to(name))
|
5
|
+
end
|
6
|
+
|
7
|
+
step ':name が表示されていないこと' do |name|
|
8
|
+
expect(page).not_to have_selector(name_to(name))
|
9
|
+
end
|
10
|
+
|
11
|
+
step ':parent に :name が表示されていること' do |parent, name|
|
12
|
+
within(name_to(parent)) do
|
13
|
+
expect(page.all(name_to(name), visible: true)).not_to be_empty
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
step ':parent に :name が表示されていないこと' do |parent, name|
|
18
|
+
within(name_to(parent)) do
|
19
|
+
expect(page.all(name_to(name), visible: true)).to be_empty
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
step 'コンボボックス :name の :option_label を選択していること' do
|
24
|
+
|name, option_label|
|
25
|
+
expect(find(%{select[name="#{name}"] option[selected]}).text)
|
26
|
+
.to eq(option_label)
|
27
|
+
end
|
28
|
+
|
29
|
+
step 'コンボボックス :name の :option_label を選択していないこと' do
|
30
|
+
|name, option_label|
|
31
|
+
expect(find(%{select[name="#{name}"] option[selected]}).text)
|
32
|
+
.not_to eq(option_label)
|
33
|
+
end
|
34
|
+
|
35
|
+
step ':name がチェックされていること' do |name|
|
36
|
+
expect(find(%{input[type="checkbox"][name="#{name}"]})).to be_checked
|
37
|
+
end
|
38
|
+
|
39
|
+
step ':name がチェックされていないこと' do |name|
|
40
|
+
expect(find(%{input[type="checkbox"][name="#{name}"]})).not_to be_checked
|
41
|
+
end
|
42
|
+
|
43
|
+
step ':name にフォーカスがあること' do |name|
|
44
|
+
# HACK: 現在のPhantomJSでは$(':focus')は動作しない
|
45
|
+
# https://github.com/netzpirat/guard-jasmine/issues/48
|
46
|
+
expect(page.evaluate_script(<<-JS)).to be_true
|
47
|
+
$('#{name_to(name)}').get(0) == document.activeElement
|
48
|
+
JS
|
49
|
+
end
|
50
|
+
|
51
|
+
step ':name は :value であること' do |name, value|
|
52
|
+
expect(page.evaluate_script(<<-JS)).to eq(value)
|
53
|
+
$('#{name_to(name)}').val()
|
54
|
+
JS
|
55
|
+
end
|
56
|
+
|
57
|
+
step ':name フィールドの値が :value であること' do |name, value|
|
58
|
+
expect(page).to have_field(name, with: value)
|
59
|
+
end
|
60
|
+
|
61
|
+
step ':name に :message を含むこと' do |name, message|
|
62
|
+
expect(page.find(name_to(name))).to have_content(message)
|
63
|
+
end
|
64
|
+
|
65
|
+
step ':name に :message を含まないこと' do |name, message|
|
66
|
+
expect(page.find(name_to(name))).not_to have_content(message)
|
67
|
+
end
|
68
|
+
|
69
|
+
step ':filename をダウンロードすること' do |filename|
|
70
|
+
step 'ダウンロードが完了するまで待つ'
|
71
|
+
if poltergeist?
|
72
|
+
expect(page.response_headers['Content-Disposition'])
|
73
|
+
.to match(/\Aattachment; filename="#{filename}"\z/)
|
74
|
+
expect(page.response_headers['Content-Type'])
|
75
|
+
.to eq('text/plain; charset=utf-8')
|
76
|
+
elsif selenium?
|
77
|
+
expect(downloads_dir.join(filename)).to be_exist
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
step 'ダウンロードしないこと' do
|
82
|
+
if poltergeist?
|
83
|
+
expect(page.response_headers['Content-Disposition']).to be_nil
|
84
|
+
elsif selenium?
|
85
|
+
expect(downloads_dir).not_to be_exist
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
step '確認メッセージ :message を表示すること' do |message|
|
90
|
+
message.gsub!('\n', "\n")
|
91
|
+
if poltergeist?
|
92
|
+
actual = page.evaluate_script('window.confirmMsg')
|
93
|
+
page.execute_script('window.confirmMsg = null')
|
94
|
+
expect(actual).to eq(message)
|
95
|
+
elsif selenium?
|
96
|
+
expect(page.driver.browser.switch_to.alert.text).to eq(message)
|
97
|
+
page.driver.browser.switch_to.alert.dismiss
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
step '確認メッセージを表示しないこと' do
|
102
|
+
if poltergeist?
|
103
|
+
actual = page.evaluate_script('window.confirmMsg')
|
104
|
+
page.execute_script('window.confirmMsg = null')
|
105
|
+
expect(actual).to be_nil
|
106
|
+
elsif selenium?
|
107
|
+
expect {
|
108
|
+
page.driver.browser.switch_to.alert
|
109
|
+
}.to raise_exception(Selenium::WebDriver::Error::NoAlertPresentError)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
step 'ホームディレクトリに :filename が存在すること' do |filename|
|
114
|
+
path = Pathname("~/#{filename}").expand_path
|
115
|
+
expect(path).to be_exist
|
116
|
+
end
|
117
|
+
|
118
|
+
step 'ホームディレクトリの :filename の内容が :program であること' do |filename, program|
|
119
|
+
path = Pathname("~/#{filename}").expand_path
|
120
|
+
expect(path.read).to eq(program)
|
121
|
+
end
|
122
|
+
|
123
|
+
step 'ホームディレクトリの :filename が次の内容であること:' do |filename, program|
|
124
|
+
path = Pathname("~/#{filename}").expand_path
|
125
|
+
expect(path.read).to eq(program)
|
126
|
+
end
|
127
|
+
|
128
|
+
step ':directory ディレクトリに :filename が存在すること' do
|
129
|
+
|directory, filename|
|
130
|
+
path = Pathname("#{directory}/#{filename}").expand_path
|
131
|
+
expect(path).to be_exist
|
132
|
+
end
|
133
|
+
|
134
|
+
step ':directory ディレクトリの :filename の内容が :program であること' do
|
135
|
+
|directory, filename, program|
|
136
|
+
path = Pathname("#{directory}/#{filename}").expand_path
|
137
|
+
expect(path.read).to eq(program)
|
138
|
+
end
|
@@ -26,39 +26,11 @@ step ':name 画面を表示する' do |name|
|
|
26
26
|
send ':name にアクセスする', name
|
27
27
|
end
|
28
28
|
|
29
|
-
step ':name
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
step ':name が表示されていないこと' do |name|
|
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)
|
29
|
+
step ':name に :value を指定する' do |name, value|
|
30
|
+
send(':name フィールドに :value を指定する', name, value)
|
59
31
|
end
|
60
32
|
|
61
|
-
step ':name
|
33
|
+
step ':name フィールドに :value を指定する' do |name, value|
|
62
34
|
fill_in(name_to(name, :id), with: value)
|
63
35
|
end
|
64
36
|
|
@@ -70,14 +42,6 @@ step ':name のチェックを外す' do |name|
|
|
70
42
|
uncheck(name)
|
71
43
|
end
|
72
44
|
|
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
|
79
|
-
end
|
80
|
-
|
81
45
|
step ':name にタブを切り替える' do |name|
|
82
46
|
page.execute_script(<<-JS)
|
83
47
|
$('#tabs a[href=\"#{name_to(name)}\"]').click()
|
@@ -118,40 +82,12 @@ step 'ダウンロードが完了するまで待つ' do
|
|
118
82
|
end
|
119
83
|
end
|
120
84
|
|
121
|
-
step ':filename をダウンロードすること' do |filename|
|
122
|
-
step 'ダウンロードが完了するまで待つ'
|
123
|
-
if poltergeist?
|
124
|
-
expect(page.response_headers['Content-Disposition'])
|
125
|
-
.to match(/\Aattachment; filename="#{filename}"\z/)
|
126
|
-
expect(page.response_headers['Content-Type'])
|
127
|
-
.to eq('text/plain; charset=utf-8')
|
128
|
-
elsif selenium?
|
129
|
-
expect(downloads_dir.join(filename)).to be_exist
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
step 'ダウンロードしないこと' do
|
134
|
-
if poltergeist?
|
135
|
-
expect(page.response_headers['Content-Disposition']).to be_nil
|
136
|
-
elsif selenium?
|
137
|
-
expect(downloads_dir).not_to be_exist
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
85
|
step ':name にフォーカスを移す' do |name|
|
142
86
|
page.execute_script(<<-JS)
|
143
87
|
$('#{name_to(name)}').focus()
|
144
88
|
JS
|
145
89
|
end
|
146
90
|
|
147
|
-
step ':name にフォーカスがあること' do |name|
|
148
|
-
# HACK: 現在のPhantomJSでは$(':focus')は動作しない
|
149
|
-
# https://github.com/netzpirat/guard-jasmine/issues/48
|
150
|
-
expect(page.evaluate_script(<<-JS)).to be_true
|
151
|
-
$('#{name_to(name)}').get(0) == document.activeElement
|
152
|
-
JS
|
153
|
-
end
|
154
|
-
|
155
91
|
step ':filename をロードする' do |filename|
|
156
92
|
step '"ロードボタン" にフォーカスを移す'
|
157
93
|
|
@@ -164,6 +100,26 @@ step ':filename をロードする' do |filename|
|
|
164
100
|
attach_file('load-file', path)
|
165
101
|
end
|
166
102
|
|
103
|
+
step 'ページをリロードする' do
|
104
|
+
begin
|
105
|
+
if poltergeist?
|
106
|
+
# HACK: Poltergeistではwindow.onbeforeunload によって表示されたダ
|
107
|
+
# イアログを消せないためタイムアウト時間を1秒にすることで回避し
|
108
|
+
# ている。
|
109
|
+
page.driver.timeout = 2
|
110
|
+
begin
|
111
|
+
step '"エディタ" 画面を表示する'
|
112
|
+
ensure
|
113
|
+
page.driver.timeout = 120
|
114
|
+
end
|
115
|
+
else
|
116
|
+
step '"エディタ" 画面を表示する'
|
117
|
+
end
|
118
|
+
rescue Capybara::Poltergeist::TimeoutError => e
|
119
|
+
Rails.logger.debug("#{e.class.name}: #{e.message}")
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
167
123
|
step 'JavaScriptによるリクエストが終わるまで待つ' do
|
168
124
|
start_time = Time.now
|
169
125
|
until page.evaluate_script('jQuery.isReady && jQuery.active == 0') ||
|
@@ -185,40 +141,6 @@ step 'JavaScriptによる処理が終わるまで待つ' do
|
|
185
141
|
step 'JavaScriptによるアニメーションが終わるまで待つ'
|
186
142
|
end
|
187
143
|
|
188
|
-
step ':name は :value であること' do |name, value|
|
189
|
-
expect(page.evaluate_script(<<-JS)).to eq(value)
|
190
|
-
$('#{name_to(name)}').val()
|
191
|
-
JS
|
192
|
-
end
|
193
|
-
|
194
|
-
step ':name に :message を含むこと' do |name, message|
|
195
|
-
expect(page.find(name_to(name))).to have_content(message)
|
196
|
-
end
|
197
|
-
|
198
|
-
step ':name に :message を含まないこと' do |name, message|
|
199
|
-
expect(page.find(name_to(name))).not_to have_content(message)
|
200
|
-
end
|
201
|
-
|
202
|
-
step 'ページをリロードする' do
|
203
|
-
begin
|
204
|
-
if poltergeist?
|
205
|
-
# HACK: Poltergeistではwindow.onbeforeunload によって表示されたダ
|
206
|
-
# イアログを消せないためタイムアウト時間を1秒にすることで回避し
|
207
|
-
# ている。
|
208
|
-
page.driver.timeout = 2
|
209
|
-
begin
|
210
|
-
step '"エディタ" 画面を表示する'
|
211
|
-
ensure
|
212
|
-
page.driver.timeout = 120
|
213
|
-
end
|
214
|
-
else
|
215
|
-
step '"エディタ" 画面を表示する'
|
216
|
-
end
|
217
|
-
rescue Capybara::Poltergeist::TimeoutError => e
|
218
|
-
Rails.logger.debug("#{e.class.name}: #{e.message}")
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
144
|
step '警告ダイアログの :name ボタンをクリックする' do |name|
|
223
145
|
case name
|
224
146
|
when 'dismiss'
|
@@ -232,30 +154,6 @@ step '確認ダイアログをキャンセルするようにしておく' do
|
|
232
154
|
page.execute_script('window.confirmResult = false') if poltergeist?
|
233
155
|
end
|
234
156
|
|
235
|
-
step '確認メッセージ :message を表示すること' do |message|
|
236
|
-
message.gsub!('\n', "\n")
|
237
|
-
if poltergeist?
|
238
|
-
actual = page.evaluate_script('window.confirmMsg')
|
239
|
-
page.execute_script('window.confirmMsg = null')
|
240
|
-
expect(actual).to eq(message)
|
241
|
-
elsif selenium?
|
242
|
-
expect(page.driver.browser.switch_to.alert.text).to eq(message)
|
243
|
-
page.driver.browser.switch_to.alert.dismiss
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
step '確認メッセージを表示しないこと' do
|
248
|
-
if poltergeist?
|
249
|
-
actual = page.evaluate_script('window.confirmMsg')
|
250
|
-
page.execute_script('window.confirmMsg = null')
|
251
|
-
expect(actual).to be_nil
|
252
|
-
elsif selenium?
|
253
|
-
expect {
|
254
|
-
page.driver.browser.switch_to.alert
|
255
|
-
}.to raise_exception(Selenium::WebDriver::Error::NoAlertPresentError)
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
157
|
step '実際にはファイルをロードしないようにしておく' do
|
260
158
|
if selenium?
|
261
159
|
page.execute_script("$('#load-button').off('click')")
|
@@ -287,21 +185,6 @@ step 'ホームディレクトリに :program という内容の :filename が
|
|
287
185
|
end
|
288
186
|
end
|
289
187
|
|
290
|
-
step 'ホームディレクトリに :filename が存在すること' do |filename|
|
291
|
-
path = Pathname("~/#{filename}").expand_path
|
292
|
-
expect(path).to be_exist
|
293
|
-
end
|
294
|
-
|
295
|
-
step 'ホームディレクトリの :filename の内容が :program であること' do |filename, program|
|
296
|
-
path = Pathname("~/#{filename}").expand_path
|
297
|
-
expect(path.read).to eq(program)
|
298
|
-
end
|
299
|
-
|
300
|
-
step 'ホームディレクトリの :filename が次の内容であること:' do |filename, program|
|
301
|
-
path = Pathname("~/#{filename}").expand_path
|
302
|
-
expect(path.read).to eq(program)
|
303
|
-
end
|
304
|
-
|
305
188
|
step ':directory ディレクトリに :program という内容の :filename が存在する' do
|
306
189
|
|directory, program, filename|
|
307
190
|
File.open(Pathname("#{directory}/#{filename}").expand_path, 'w') do |f|
|
@@ -309,18 +192,6 @@ step ':directory ディレクトリに :program という内容の :filename が
|
|
309
192
|
end
|
310
193
|
end
|
311
194
|
|
312
|
-
step ':directory ディレクトリに :filename が存在すること' do
|
313
|
-
|directory, filename|
|
314
|
-
path = Pathname("#{directory}/#{filename}").expand_path
|
315
|
-
expect(path).to be_exist
|
316
|
-
end
|
317
|
-
|
318
|
-
step ':directory ディレクトリの :filename の内容が :program であること' do
|
319
|
-
|directory, filename, program|
|
320
|
-
path = Pathname("#{directory}/#{filename}").expand_path
|
321
|
-
expect(path.read).to eq(program)
|
322
|
-
end
|
323
|
-
|
324
195
|
step 'ページを表示する' do
|
325
196
|
# no-op
|
326
197
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smalruby-editor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: x86-mingw32
|
6
6
|
authors:
|
7
7
|
- Kouji Takao
|
@@ -198,14 +198,14 @@ dependencies:
|
|
198
198
|
requirements:
|
199
199
|
- - "~>"
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version: 0.1.
|
201
|
+
version: 0.1.8
|
202
202
|
type: :runtime
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
206
|
- - "~>"
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
version: 0.1.
|
208
|
+
version: 0.1.8
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
210
|
name: bundler
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -469,8 +469,8 @@ files:
|
|
469
469
|
- public/422.html
|
470
470
|
- public/500.html
|
471
471
|
- public/apple-touch-icon.png
|
472
|
-
- public/assets/application-
|
473
|
-
- public/assets/application-
|
472
|
+
- public/assets/application-277da50b978f4a4292b83a0f2ff521e6.js
|
473
|
+
- public/assets/application-277da50b978f4a4292b83a0f2ff521e6.js.gz
|
474
474
|
- public/assets/application-f879948b97a781e3d996535a2a0585fa.css
|
475
475
|
- public/assets/application-f879948b97a781e3d996535a2a0585fa.css.gz
|
476
476
|
- public/assets/blockly/msg/js/en_us-d5e1938b2d57c1df954f4411b9165d10.js
|
@@ -493,7 +493,7 @@ files:
|
|
493
493
|
- public/assets/jquery-ui/ui-icons_888888_256x240-ce584ffa171c3ea9a018cf0d7bec65c8.png
|
494
494
|
- public/assets/jquery-ui/ui-icons_cd0a0a_256x240-747e96029e8dedcabc224e5f7d1f2ede.png
|
495
495
|
- public/assets/loading-e77296be32d066d3e29d3bf9803fa417.gif
|
496
|
-
- public/assets/manifest-
|
496
|
+
- public/assets/manifest-c9964fd12336c02e9a368ae822cc6cbe.json
|
497
497
|
- public/assets/msg/en_us-a98cc83805d44f5f675fe6eac2c955ec.js
|
498
498
|
- public/assets/msg/en_us-a98cc83805d44f5f675fe6eac2c955ec.js.gz
|
499
499
|
- public/assets/msg/ja-243b0a55ef1086ef2180af94c422cb5e.js
|
@@ -679,12 +679,13 @@ files:
|
|
679
679
|
- spec/models/concerns/ruby_to_block_spec.rb
|
680
680
|
- spec/models/source_code_spec.rb
|
681
681
|
- spec/spec_helper.rb
|
682
|
-
- spec/steps/base_steps.rb
|
683
682
|
- spec/steps/block_mode_steps.rb
|
684
683
|
- spec/steps/fix_turnip.rb
|
685
684
|
- spec/steps/global_variable.rb
|
686
685
|
- spec/steps/standalone_steps.rb
|
687
686
|
- spec/steps/text_editor_steps.rb
|
687
|
+
- spec/steps/then_steps.rb
|
688
|
+
- spec/steps/when_steps.rb
|
688
689
|
- spec/support/capybara.rb
|
689
690
|
- spec/support/env.rb
|
690
691
|
- spec/support/feature_helper.rb
|
@@ -857,12 +858,13 @@ test_files:
|
|
857
858
|
- spec/models/concerns/ruby_to_block_spec.rb
|
858
859
|
- spec/models/source_code_spec.rb
|
859
860
|
- spec/spec_helper.rb
|
860
|
-
- spec/steps/base_steps.rb
|
861
861
|
- spec/steps/block_mode_steps.rb
|
862
862
|
- spec/steps/fix_turnip.rb
|
863
863
|
- spec/steps/global_variable.rb
|
864
864
|
- spec/steps/standalone_steps.rb
|
865
865
|
- spec/steps/text_editor_steps.rb
|
866
|
+
- spec/steps/then_steps.rb
|
867
|
+
- spec/steps/when_steps.rb
|
866
868
|
- spec/support/capybara.rb
|
867
869
|
- spec/support/env.rb
|
868
870
|
- spec/support/feature_helper.rb
|