smalruby-editor 0.3.0-x86-mingw32 → 0.3.1-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.
- 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
|