opal 1.6.0.alpha1 → 1.6.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitattributes +4 -0
- data/.github/workflows/build.yml +13 -2
- data/README.md +3 -3
- data/UNRELEASED.md +6 -1
- data/docs/jquery.md +5 -5
- data/lib/opal/builder_processors.rb +24 -0
- data/lib/opal/builder_scheduler/prefork.rb +3 -0
- data/lib/opal/cache/file_cache.rb +13 -7
- data/lib/opal/cli.rb +15 -2
- data/lib/opal/cli_runners/chrome.rb +6 -6
- data/lib/opal/cli_runners/system_runner.rb +2 -2
- data/lib/opal/eof_content.rb +5 -2
- data/lib/opal/nodes/call.rb +3 -2
- data/lib/opal/source_map/file.rb +3 -2
- data/lib/opal/version.rb +1 -1
- data/opal/corelib/constants.rb +2 -2
- data/opal/corelib/error/errno.rb +1 -0
- data/opal/corelib/io.rb +1 -1
- data/opal.gemspec +2 -2
- data/spec/lib/cli_spec.rb +14 -0
- data/spec/opal/core/language/DATA/characters_support_crlf_spec.rb +9 -0
- data/spec/opal/core/language/DATA/multiple___END___crlf_spec.rb +10 -0
- data/spec/opal/core/language/safe_navigator_spec.rb +10 -0
- data/tasks/testing.rake +8 -7
- data/test/nodejs/test_file.rb +3 -2
- metadata +16 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9bc96268e7c234e02e983299ec4e04de40283cd5dec33a944aca6567bddaf927
|
4
|
+
data.tar.gz: 34a0a446e2c6a8564cb1ec9523a88acfaf667f2b35d77aebde437e5658eb8b95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 470926fc4eb90e7effc90cc193fdf80746f26ecffff79ddd602c7c275e2e17638206a230079370f3fd30923f00988bd497f1ec38914ae50fa49a90ff76ab14a6
|
7
|
+
data.tar.gz: 83fa53a8d529538c321dad65ba704e4ec3fd4ab92e8de57a2865fb1da38a205008729eddd5444e1f7c15ef19cc11f228e0cad9d692e32c558cf346fac62c1c66
|
data/.gitattributes
CHANGED
@@ -1 +1,5 @@
|
|
1
1
|
UNRELEASED.md merge=union
|
2
|
+
spec/opal/core/language/DATA/characters_support_crlf_spec.rb text eol=crlf
|
3
|
+
spec/opal/core/language/DATA/characters_support_spec.rb text eol=lf
|
4
|
+
spec/opal/core/language/DATA/multiple___END___crlf_spec.rb text eol=crlf
|
5
|
+
spec/opal/core/language/DATA/multiple___END___spec.rb text eol=lf
|
data/.github/workflows/build.yml
CHANGED
@@ -45,9 +45,20 @@ jobs:
|
|
45
45
|
- name: smoke-test
|
46
46
|
ruby: '3.0'
|
47
47
|
command: bin/rake smoke_test
|
48
|
+
- name: windows-mspec-nodejs
|
49
|
+
command: bundle exec rake mspec_nodejs
|
50
|
+
ruby: '3.0'
|
51
|
+
os: windows-latest
|
52
|
+
- name: windows-mspec-chrome
|
53
|
+
command: bundle exec rake mspec_chrome
|
54
|
+
ruby: '3.0'
|
55
|
+
os: windows-latest
|
56
|
+
- name: windows-minitest
|
57
|
+
command: bundle exec rake minitest
|
58
|
+
ruby: '3.0'
|
59
|
+
os: windows-latest
|
48
60
|
- name: windows
|
49
|
-
|
50
|
-
command: bundle exec rake rspec minitest_nodejs
|
61
|
+
command: bundle exec rake rspec
|
51
62
|
ruby: '3.0'
|
52
63
|
os: windows-latest
|
53
64
|
- name: lint
|
data/README.md
CHANGED
@@ -18,14 +18,14 @@
|
|
18
18
|
<a href="#sponsors"><img src="https://opencollective.com/opal/sponsors/badge.svg" alt="Sponsors on Open Collective" title="" /></a>
|
19
19
|
<a href="https://slack.opalrb.com/"><img src="https://img.shields.io/badge/slack-join%20chat-46BC99?logo=slack&style=flat" alt="Slack" title="Join Chat" /></a>
|
20
20
|
<a href="https://opalrb.com/docs"><img src="https://img.shields.io/badge/docs-updated-blue.svg" alt="Documentation" title="" /></a>
|
21
|
-
|
21
|
+
|
22
22
|
<br>
|
23
23
|
<strong>Code:</strong><br>
|
24
24
|
<a href="https://badge.fury.io/rb/opal"><img src="https://img.shields.io/gem/v/opal.svg?style=flat" alt="Gem Version" title="" /></a>
|
25
25
|
<a href="https://github.com/opal/opal/actions?query=workflow%3Abuild"><img src="https://github.com/opal/opal/workflows/build/badge.svg" alt="Build Status" /></a>
|
26
26
|
<a href="https://codeclimate.com/github/opal/opal"><img src="https://img.shields.io/codeclimate/maintainability-percentage/opal/opal.svg" alt="Code Climate" title="" /></a>
|
27
27
|
<a href="https://coveralls.io/github/opal/opal?branch=master"><img src="https://coveralls.io/repos/opal/opal/badge.svg?branch=master&service=github" alt="Coverage Status" title="" /></a>
|
28
|
-
|
28
|
+
|
29
29
|
<br>
|
30
30
|
<strong>Sponsors:</strong>
|
31
31
|
<br/><a href="https://nebulab.it?utm_source=github&utm_medium=badge"><img src="https://img.shields.io/static/v1?label=Nebulab&message=Open+Source+Fridays&color=%235dbefd&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMQSURBVHgBrZZNTxNRFIbfczsgIMQiLBCRFDaGhUr9A9iiIa5EEneIwE/AlRsNv8KlIKwFl35RTUBX8rFBdiVKAgqmXSCY0M71nJl+zJTOdKh9k6Yzc8/cZ86555x7CQE0mji5hSyGlQoNaOgIPwrnhtIArWszu4EQFudjdR8rzUV+gw8/ZMZB9IwvIwimJJGafhmjWZwFOJ7QkYzWCwTdj+qUDJGKz8Rou3RAlT4YS+hHWW2u/QdM1MNzrI6+zwyXDrg8FANStIDaSXOIJ5whLgAljOIZiglRK6U4vDfz4S2ElGGJWsEaQkCTUbhtNbV+lb+xgFY2Bs9ET0h/GzBxlfAkqnCUKY5xKfVLbsi1/R126lcF6WgCYp2ES42EBp6tvQFY+alLTUlrUxizJEVNWiVwBkVagGg7oe+CDclLYOfrgMdfTBz8PfWa1lkzbsDEsH/5FyF9YUK0zQ1xwpoZtsm9pwxMRLyA9wyi0A2Jcjl1NNqeeEFEimxYPkmWd014ikIDnDTeBb53DOweaRxnvWGyhnmYfPZWGt487sNi6lsK67/lZ1oZGOtUaD3nhtU7etXXfe0VzrzCBgLKCR68rNDX6oaJlvd0xXnklbSfgSTL/QghXF8EP980cVKyVL/Ys9UDVFJa8Tdt+1lYmcmJM3Vd4UEvWeslRf32h9ubrVRl77gBrCto85OfUU+LXTMGx+JuN2Hoin3/Zkfjj6ObBAknV+KG4jpc9BqXMEpiCMz6Z9ZQ12kvJZxb6co4Zr1W83esY8F2OYsIe+eEyfTiVXczCl7uM2wliHfMEJaRc3Wa++mLUotrF4EW7h6f94Dvh6aVFM60Fy8Xkya+BfBOjh5yUWhqY0vmKi9q1GnVxZ7sHKIWSs7FQ71yUagkRTTCfymnVY1gsgHHC5z8hbUjaz0Fr8ZanXhX0pPOw5SrV8wNGjNscMrTKpXKaj05f9twVYHnMZGPHEuwTwEBNi+3NGiNt6GRcsfEIAfhp2cAV3cQLtXoOz7q8+ZJRLx3kmxn4dy7aas1SrfiBpKraV/9A+PSJLDAXLUvAAAAAElFTkSuQmCC" alt="Nebulab: Open Source Fridays" /></a>
|
@@ -99,7 +99,7 @@ or to build an entire app including dependencies declared with `require`:
|
|
99
99
|
```ruby
|
100
100
|
builder = Opal::Builder.new
|
101
101
|
builder.build_str('require "opal"; puts "wow"', '(inline)')
|
102
|
-
File.
|
102
|
+
File.binwrite 'app.js', builder.to_s # must use binary mode for writing
|
103
103
|
```
|
104
104
|
|
105
105
|
|
data/UNRELEASED.md
CHANGED
@@ -29,7 +29,8 @@
|
|
29
29
|
- Delegate and ruby2_keywords (#2446)
|
30
30
|
- Source code can now be embedded in the compiled file to improve development/debugging, e.g. RSpec reports, `Proc#source_location` (#2440)
|
31
31
|
- Added `Kernel#caller_locations` (#2440)
|
32
|
-
- `Opal::Builder::Prefork` for blazingly fast multicore compilation times (#2263, #2462, #2454)
|
32
|
+
- `Opal::Builder::Prefork` for blazingly fast multicore compilation times (#2263, #2462, #2454, #2469, #2475)
|
33
|
+
- Add `Opal::BuilderProcessors::RubyERBProcessor` (#2470)
|
33
34
|
|
34
35
|
### Fixed
|
35
36
|
|
@@ -42,6 +43,9 @@
|
|
42
43
|
- Compilation error occurs while compiling `being/end` returning a `case/when` (#2459)
|
43
44
|
- Ensure UTF-8 encoding of `.sourcesContent` of source maps (#2451)
|
44
45
|
- Benchmarks require string/unpack (#2453)
|
46
|
+
- Fix compilation of a call: `gets&.chomp` (#2473)
|
47
|
+
- Fix specs on Windows (#2460)
|
48
|
+
- Make opal CLI tool work again with pipes (#2474)
|
45
49
|
|
46
50
|
### Internal
|
47
51
|
|
@@ -49,3 +53,4 @@
|
|
49
53
|
- Retry if file cache write operation exits with Zlib::BufError (#2463)
|
50
54
|
- Eliminate redundant `var constructor` in `allocate_class` (#2452)
|
51
55
|
- Fix `performance:compare` asset size calculation (#2457)
|
56
|
+
- Fix a few specs after the Opal RSpec 1.0 (alpha) release (#2471, #2472)
|
data/docs/jquery.md
CHANGED
@@ -58,7 +58,7 @@ builder.build('opal')
|
|
58
58
|
builder.build('opal-jquery')
|
59
59
|
builder.build('./app/application.rb')
|
60
60
|
|
61
|
-
File.
|
61
|
+
File.binwrite('application.js', builder.to_s) # must use binary mode for writing
|
62
62
|
```
|
63
63
|
|
64
64
|
then simply load the compiled file in your html:
|
@@ -67,7 +67,7 @@ then simply load the compiled file in your html:
|
|
67
67
|
<!DOCTYPE html>
|
68
68
|
<html>
|
69
69
|
<head>
|
70
|
-
<script src='https://code.jquery.com/jquery-3.3.1.min.js' integrity='sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=' crossorigin='anonymous'></script>
|
70
|
+
<script src='https://code.jquery.com/jquery-3.3.1.min.js' integrity='sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=' crossorigin='anonymous'></script>
|
71
71
|
<script type='text/javascript' src='./application.js'></script>
|
72
72
|
</head>
|
73
73
|
<body></body>
|
@@ -75,11 +75,11 @@ then simply load the compiled file in your html:
|
|
75
75
|
```
|
76
76
|
|
77
77
|
NOTE: opal-jquery expects a jquery library to be loaded. This example loads it
|
78
|
-
remotely from jquery.com, but a locally downloaded copy works just as well, or-
|
78
|
+
remotely from jquery.com, but a locally downloaded copy works just as well, or-
|
79
79
|
if you're using rails- jquery may be included automatically.
|
80
80
|
|
81
|
-
This example builds opal, opal-jquery and the application into a single `.js` file,
|
82
|
-
but you may build them separately, if you so choose. Just remember to include
|
81
|
+
This example builds opal, opal-jquery and the application into a single `.js` file,
|
82
|
+
but you may build them separately, if you so choose. Just remember to include
|
83
83
|
each respective script in your html!
|
84
84
|
|
85
85
|
### How does opal-jquery work
|
@@ -114,6 +114,12 @@ module Opal
|
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
|
+
# This handler is for files named ".opalerb", which ought to
|
118
|
+
# first get compiled to Ruby code using ERB, then with Opal.
|
119
|
+
# Unlike below processors, OpalERBProcessor can be used to
|
120
|
+
# compile templates, which will in turn output HTML. Take
|
121
|
+
# a look at docs/templates.md to understand this subsystem
|
122
|
+
# better.
|
117
123
|
class OpalERBProcessor < RubyProcessor
|
118
124
|
handles :opalerb
|
119
125
|
|
@@ -133,6 +139,24 @@ module Opal
|
|
133
139
|
end
|
134
140
|
end
|
135
141
|
|
142
|
+
# This handler is for files named ".rb.erb", which ought to
|
143
|
+
# first get preprocessed via ERB, then via Opal.
|
144
|
+
class RubyERBProcessor < RubyProcessor
|
145
|
+
handles :"rb.erb"
|
146
|
+
|
147
|
+
def compiled
|
148
|
+
@compiled ||= begin
|
149
|
+
@source = ::ERB.new(@source.to_s).result
|
150
|
+
|
151
|
+
compiler = compiler_for(@source, file: @filename)
|
152
|
+
compiler.compile
|
153
|
+
compiler
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
# This handler is for files named ".js.erb", which ought to
|
159
|
+
# first get preprocessed via ERB, then served verbatim as JS.
|
136
160
|
class ERBProcessor < Processor
|
137
161
|
handles :erb
|
138
162
|
|
@@ -19,15 +19,21 @@ module Opal
|
|
19
19
|
|
20
20
|
def set(key, data)
|
21
21
|
file = cache_filename_for(key)
|
22
|
-
|
23
22
|
out = Marshal.dump(data)
|
24
|
-
|
23
|
+
|
24
|
+
# Sometimes `Zlib::BufError` gets raised, unsure why, makes no sense, possibly
|
25
|
+
# some race condition (see https://github.com/ruby/zlib/issues/49).
|
26
|
+
# Limit the number of retries to avoid infinite loops.
|
27
|
+
retries = 5
|
28
|
+
begin
|
29
|
+
out = Zlib.gzip(out, level: 9)
|
30
|
+
rescue Zlib::BufError
|
31
|
+
warn "\n[Opal]: Zlib::BufError; retrying (#{retries} retries left)"
|
32
|
+
retries -= 1
|
33
|
+
retry if retries > 0
|
34
|
+
end
|
35
|
+
|
25
36
|
File.binwrite(file, out)
|
26
|
-
rescue Zlib::BufError
|
27
|
-
# This sometimes happens, unsure why, makes no sense, possibly
|
28
|
-
# some race condition
|
29
|
-
warn '[Opal]: Zlib::BufError; retrying'
|
30
|
-
retry
|
31
37
|
end
|
32
38
|
|
33
39
|
def get(key)
|
data/lib/opal/cli.rb
CHANGED
@@ -184,8 +184,21 @@ module Opal
|
|
184
184
|
if evals.any?
|
185
185
|
yield evals.join("\n"), '-e'
|
186
186
|
elsif file && (filename != '-' || evals.empty?)
|
187
|
-
|
188
|
-
|
187
|
+
return @content if @content
|
188
|
+
|
189
|
+
if file.tty?
|
190
|
+
save = true
|
191
|
+
else
|
192
|
+
begin
|
193
|
+
file.rewind
|
194
|
+
rescue Errno::ESPIPE
|
195
|
+
save = true
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
content = yield(file.read, filename)
|
200
|
+
@content = content if save
|
201
|
+
content
|
189
202
|
end
|
190
203
|
end
|
191
204
|
end
|
@@ -66,7 +66,7 @@ module Opal
|
|
66
66
|
def prepare_files_in(dir)
|
67
67
|
js = builder.to_s
|
68
68
|
map = builder.source_map.to_json
|
69
|
-
stack = File.
|
69
|
+
stack = File.binread("#{__dir__}/source-map-support-browser.js")
|
70
70
|
|
71
71
|
ext = builder.output_extension
|
72
72
|
module_type = ' type="module"' if builder.esm?
|
@@ -74,9 +74,9 @@ module Opal
|
|
74
74
|
# Chrome can't handle huge data passed to `addScriptToEvaluateOnLoad`
|
75
75
|
# https://groups.google.com/a/chromium.org/forum/#!topic/chromium-discuss/U5qyeX_ydBo
|
76
76
|
# The only way is to create temporary files and pass them to chrome.
|
77
|
-
File.
|
78
|
-
File.
|
79
|
-
File.
|
77
|
+
File.binwrite("#{dir}/index.#{ext}", js)
|
78
|
+
File.binwrite("#{dir}/source-map-support.js", stack)
|
79
|
+
File.binwrite("#{dir}/index.html", <<~HTML)
|
80
80
|
<html><head>
|
81
81
|
<meta charset='utf-8'>
|
82
82
|
<script src='./source-map-support.js'></script>
|
@@ -124,7 +124,7 @@ module Opal
|
|
124
124
|
|
125
125
|
chrome_pid = Process.spawn(chrome_server_cmd)
|
126
126
|
|
127
|
-
Timeout.timeout(
|
127
|
+
Timeout.timeout(30) do
|
128
128
|
loop do
|
129
129
|
break if chrome_server_running?
|
130
130
|
sleep 0.5
|
@@ -137,7 +137,7 @@ module Opal
|
|
137
137
|
puts 'Make sure that you have it installed and that its version is > 59'
|
138
138
|
exit(1)
|
139
139
|
ensure
|
140
|
-
if windows? && chrome_pid
|
140
|
+
if OS.windows? && chrome_pid
|
141
141
|
Process.kill('KILL', chrome_pid) unless system("taskkill /f /t /pid #{chrome_pid} >NUL 2>NUL")
|
142
142
|
elsif chrome_pid
|
143
143
|
Process.kill('HUP', chrome_pid)
|
@@ -27,9 +27,9 @@ SystemRunner = ->(data, &block) {
|
|
27
27
|
|
28
28
|
tempfile =
|
29
29
|
if debug
|
30
|
-
File.new("opal-nodejs-runner.#{ext}", '
|
30
|
+
File.new("opal-nodejs-runner.#{ext}", 'wb')
|
31
31
|
else
|
32
|
-
Tempfile.new(['opal-system-runner', ".#{ext}"])
|
32
|
+
Tempfile.new(['opal-system-runner', ".#{ext}"], mode: File::BINARY)
|
33
33
|
end
|
34
34
|
|
35
35
|
tempfile.write code
|
data/lib/opal/eof_content.rb
CHANGED
@@ -15,9 +15,12 @@ module Opal
|
|
15
15
|
eof_content = @source[last_token_position..-1]
|
16
16
|
return nil unless eof_content
|
17
17
|
|
18
|
-
|
18
|
+
# On Windows token position is off a bit, because Parser does not seem to compensate for \r\n
|
19
|
+
# The first eof_content line on Windows may be for example "end\r\n"
|
20
|
+
# Must match for it and \r\n and \n
|
21
|
+
eof_content = eof_content.lines.drop_while { |line| /\A.*\r?\n?\z/.match?(line) && !line.start_with?('__END__') }
|
19
22
|
|
20
|
-
if eof_content[0]
|
23
|
+
if /\A__END__\r?\n?\z/.match?(eof_content[0])
|
21
24
|
eof_content = eof_content[1..-1] || []
|
22
25
|
eof_content.join
|
23
26
|
elsif eof_content == ['__END__']
|
data/lib/opal/nodes/call.rb
CHANGED
@@ -186,7 +186,8 @@ module Opal
|
|
186
186
|
end
|
187
187
|
|
188
188
|
def compile_simple_call_chain
|
189
|
-
|
189
|
+
compile_receiver
|
190
|
+
push method_jsid, '(', expr(arglist), ')'
|
190
191
|
end
|
191
192
|
|
192
193
|
def splat?
|
@@ -469,7 +470,7 @@ module Opal
|
|
469
470
|
def handle_conditional_send
|
470
471
|
# temporary variable that stores method receiver
|
471
472
|
receiver_temp = scope.new_temp
|
472
|
-
push "#{receiver_temp} = ", expr(
|
473
|
+
push "#{receiver_temp} = ", expr(receiver_sexp)
|
473
474
|
|
474
475
|
# execute the sexp only if the receiver isn't nil
|
475
476
|
push ", (#{receiver_temp} === nil || #{receiver_temp} == null) ? nil : "
|
data/lib/opal/source_map/file.rb
CHANGED
@@ -182,8 +182,9 @@ class Opal::SourceMap::File
|
|
182
182
|
def fragments_by_line
|
183
183
|
raw_mappings = [[]]
|
184
184
|
fragments.flat_map do |fragment|
|
185
|
-
fragment_code
|
186
|
-
|
185
|
+
fragment_code = fragment.code
|
186
|
+
splitter = /\r/.match?(fragment_code) ? /\r?\n/ : "\n"
|
187
|
+
fragment_lines = fragment_code.split(splitter, -1) # a negative limit won't suppress trailing null values
|
187
188
|
fragment_lines.each.with_index do |fragment_line, index|
|
188
189
|
raw_segment = [fragment_line, fragment]
|
189
190
|
if index.zero? && !fragment_line.size.zero?
|
data/lib/opal/version.rb
CHANGED
data/opal/corelib/constants.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
::RUBY_PLATFORM = 'opal'
|
2
2
|
::RUBY_ENGINE = 'opal'
|
3
3
|
::RUBY_VERSION = '3.1.0'
|
4
|
-
::RUBY_ENGINE_VERSION = '1.6.0.
|
5
|
-
::RUBY_RELEASE_DATE = '2022-11-
|
4
|
+
::RUBY_ENGINE_VERSION = '1.6.0.rc1'
|
5
|
+
::RUBY_RELEASE_DATE = '2022-11-18'
|
6
6
|
::RUBY_PATCHLEVEL = 0
|
7
7
|
::RUBY_REVISION = '0'
|
8
8
|
::RUBY_COPYRIGHT = 'opal - Copyright (C) 2013-2022 Adam Beynon and the Opal contributors'
|
data/opal/corelib/error/errno.rb
CHANGED
@@ -4,6 +4,7 @@ module ::Errno
|
|
4
4
|
[:EEXIST, 'File exists', 17],
|
5
5
|
[:EISDIR, 'Is a directory', 21],
|
6
6
|
[:EMFILE, 'Too many open files', 24],
|
7
|
+
[:ESPIPE, 'Illegal seek', 29],
|
7
8
|
[:EACCES, 'Permission denied', 13],
|
8
9
|
[:EPERM, 'Operation not permitted', 1],
|
9
10
|
[:ENOENT, 'No such file or directory', 2],
|
data/opal/corelib/io.rb
CHANGED
data/opal.gemspec
CHANGED
@@ -44,9 +44,9 @@ Gem::Specification.new do |spec|
|
|
44
44
|
spec.add_development_dependency 'rack-test'
|
45
45
|
spec.add_development_dependency 'selenium-webdriver'
|
46
46
|
spec.add_development_dependency 'benchmark-ips', '< 2.8'
|
47
|
-
spec.add_development_dependency 'sinatra'
|
47
|
+
spec.add_development_dependency 'sinatra', '~> 3.0'
|
48
48
|
spec.add_development_dependency 'rubocop', '~> 0.67.0'
|
49
49
|
spec.add_development_dependency 'rubocop-performance', '~> 1.1.0'
|
50
|
-
spec.add_development_dependency 'rack'
|
50
|
+
spec.add_development_dependency 'rack', '~> 2.2'
|
51
51
|
spec.add_development_dependency 'webrick'
|
52
52
|
end
|
data/spec/lib/cli_spec.rb
CHANGED
@@ -236,6 +236,20 @@ RSpec.describe Opal::CLI do
|
|
236
236
|
end
|
237
237
|
end
|
238
238
|
|
239
|
+
context 'using pipes' do
|
240
|
+
it 'runs the provided source' do
|
241
|
+
# `echo` on windows will output double-quotes along with the contents, that's why we print with ruby
|
242
|
+
expect(`ruby -e"puts 'foo'" | ruby bin/opal -ropal/platform -e "puts gets.reverse"`.strip).to eq("oof")
|
243
|
+
end
|
244
|
+
|
245
|
+
it 'compiles the provided source' do
|
246
|
+
# `echo` on windows will output double-quotes along with the contents, that's why we print with ruby
|
247
|
+
expect(`ruby -e"puts 'puts 123'" | ruby bin/opal -cEO`.strip).to include("self.$puts(123)")
|
248
|
+
end
|
249
|
+
|
250
|
+
# TODO: test refreshes with the server runner (only way to ensure we correctly rewind or cache the eval contents)
|
251
|
+
end
|
252
|
+
|
239
253
|
private
|
240
254
|
|
241
255
|
def expect_output_of
|
@@ -4,4 +4,14 @@ describe 'Safe navigator' do
|
|
4
4
|
value&.unknown.should == nil
|
5
5
|
end
|
6
6
|
end
|
7
|
+
|
8
|
+
it "calls a receiver exactly once" do
|
9
|
+
def receiver
|
10
|
+
@calls += 1
|
11
|
+
end
|
12
|
+
@calls = 0
|
13
|
+
receiver&.itself.should == 1
|
14
|
+
@calls = 0
|
15
|
+
receiver&.itself{}.should == 1
|
16
|
+
end
|
7
17
|
end
|
data/tasks/testing.rake
CHANGED
@@ -427,14 +427,15 @@ task :smoke_test do
|
|
427
427
|
extend RSpec::Matchers
|
428
428
|
expect(actual_output.lines[0]).to eq("[32m.[0m[32m.[0m\n")
|
429
429
|
expect(actual_output.lines[1]).to eq("\n")
|
430
|
-
expect(actual_output.lines[2]).to match(%r{
|
431
|
-
expect(actual_output.lines[
|
432
|
-
expect(actual_output.lines[
|
433
|
-
expect(actual_output.lines[
|
434
|
-
expect(actual_output.lines[
|
430
|
+
expect(actual_output.lines[2]).to match(%r{Top 2 slowest examples \(\d+\.\d+ seconds, \d+\.\d+% of total time\):\n})
|
431
|
+
expect(actual_output.lines[4]).to match(%r{ \[1m\d+\.\d+\[0m \[1mseconds\[0m .*deprecations_spec\.rb:7\n})
|
432
|
+
expect(actual_output.lines[6]).to match(%r{ \[1m\d+\.\d+\[0m \[1mseconds\[0m .*deprecations_spec\.rb:12\n})
|
433
|
+
expect(actual_output.lines[7]).to eq("\n")
|
434
|
+
expect(actual_output.lines[8]).to match(%r{^Finished in \d+\.\d+ seconds \(files took \d+\.\d+ seconds to load\)\n$})
|
435
|
+
expect(actual_output.lines[9]).to eq("[32m2 examples, 0 failures[0m\n")
|
435
436
|
expect([
|
436
|
-
actual_output.lines[
|
437
|
-
actual_output.lines[
|
437
|
+
actual_output.lines[3],
|
438
|
+
actual_output.lines[5],
|
438
439
|
]).to contain_exactly(
|
439
440
|
" Opal::Deprecations defaults to warn\n",
|
440
441
|
" Opal::Deprecations can be set to raise\n",
|
data/test/nodejs/test_file.rb
CHANGED
@@ -175,6 +175,7 @@ class TestNodejsFile < Test::Unit::TestCase
|
|
175
175
|
end if windows_platform?
|
176
176
|
|
177
177
|
def test_windows_file_expand_path
|
178
|
+
# do not use d: because its a symlink in github actions fs, leading to unexpected results
|
178
179
|
drive_letter = Dir.pwd.slice(0, 2)
|
179
180
|
assert_equal(Dir.pwd + '/foo/bar.js', File.expand_path('./foo/bar.js'))
|
180
181
|
assert_equal(drive_letter + '/foo/bar.js', File.expand_path('/foo/bar.js'))
|
@@ -186,8 +187,8 @@ class TestNodejsFile < Test::Unit::TestCase
|
|
186
187
|
assert_equal('c:/bar.js', File.expand_path('\\..\\bar.js', 'c:\\foo\\baz\\'))
|
187
188
|
assert_equal('c:/foo/baz/bar.js', File.expand_path('baz\\bar.js', 'c:\\foo'))
|
188
189
|
assert_equal('c:/baz/bar.js', File.expand_path('baz\\bar.js', 'c:\\foo\\..'))
|
189
|
-
assert_equal('
|
190
|
-
assert_equal('
|
190
|
+
assert_equal('f:/', File.expand_path('f:'), 'should add a trailing slash when the path is d:')
|
191
|
+
assert_equal('g:/', File.expand_path('g:/'), 'should preserve the trailing slash when the path d:/')
|
191
192
|
assert_equal(Dir.pwd, File.expand_path(drive_letter), 'should expand to the current directory when the path is c: (and the current directory is located in the c drive)')
|
192
193
|
assert_equal(drive_letter + '/', drive_letter + '/', 'should return c:/ when the path is c:/ because the path is absolute')
|
193
194
|
end if windows_platform?
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.0.
|
4
|
+
version: 1.6.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elia Schito
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-11-
|
13
|
+
date: 2022-11-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: ast
|
@@ -162,16 +162,16 @@ dependencies:
|
|
162
162
|
name: sinatra
|
163
163
|
requirement: !ruby/object:Gem::Requirement
|
164
164
|
requirements:
|
165
|
-
- - "
|
165
|
+
- - "~>"
|
166
166
|
- !ruby/object:Gem::Version
|
167
|
-
version: '0'
|
167
|
+
version: '3.0'
|
168
168
|
type: :development
|
169
169
|
prerelease: false
|
170
170
|
version_requirements: !ruby/object:Gem::Requirement
|
171
171
|
requirements:
|
172
|
-
- - "
|
172
|
+
- - "~>"
|
173
173
|
- !ruby/object:Gem::Version
|
174
|
-
version: '0'
|
174
|
+
version: '3.0'
|
175
175
|
- !ruby/object:Gem::Dependency
|
176
176
|
name: rubocop
|
177
177
|
requirement: !ruby/object:Gem::Requirement
|
@@ -204,16 +204,16 @@ dependencies:
|
|
204
204
|
name: rack
|
205
205
|
requirement: !ruby/object:Gem::Requirement
|
206
206
|
requirements:
|
207
|
-
- - "
|
207
|
+
- - "~>"
|
208
208
|
- !ruby/object:Gem::Version
|
209
|
-
version: '
|
209
|
+
version: '2.2'
|
210
210
|
type: :development
|
211
211
|
prerelease: false
|
212
212
|
version_requirements: !ruby/object:Gem::Requirement
|
213
213
|
requirements:
|
214
|
-
- - "
|
214
|
+
- - "~>"
|
215
215
|
- !ruby/object:Gem::Version
|
216
|
-
version: '
|
216
|
+
version: '2.2'
|
217
217
|
- !ruby/object:Gem::Dependency
|
218
218
|
name: webrick
|
219
219
|
requirement: !ruby/object:Gem::Requirement
|
@@ -856,8 +856,10 @@ files:
|
|
856
856
|
- spec/opal/core/kernel/puts_spec.rb
|
857
857
|
- spec/opal/core/kernel/require_tree_spec.rb
|
858
858
|
- spec/opal/core/kernel/respond_to_spec.rb
|
859
|
+
- spec/opal/core/language/DATA/characters_support_crlf_spec.rb
|
859
860
|
- spec/opal/core/language/DATA/characters_support_spec.rb
|
860
861
|
- spec/opal/core/language/DATA/empty___END___spec.rb
|
862
|
+
- spec/opal/core/language/DATA/multiple___END___crlf_spec.rb
|
861
863
|
- spec/opal/core/language/DATA/multiple___END___spec.rb
|
862
864
|
- spec/opal/core/language/arguments/mlhs_arg_spec.rb
|
863
865
|
- spec/opal/core/language/forward_args_spec.rb
|
@@ -1167,10 +1169,10 @@ licenses:
|
|
1167
1169
|
metadata:
|
1168
1170
|
homepage_uri: https://opalrb.com/
|
1169
1171
|
bug_tracker_uri: https://github.com/opal/opal/issues
|
1170
|
-
changelog_uri: https://github.com/opal/opal/blob/v1.6.0.
|
1171
|
-
readme_uri: https://github.com/opal/opal/blob/v1.6.0.
|
1172
|
-
api_documentation_uri: http://opalrb.com/docs/api/v1.6.0.
|
1173
|
-
guides_uri: http://opalrb.com/docs/guides/v1.6.0.
|
1172
|
+
changelog_uri: https://github.com/opal/opal/blob/v1.6.0.rc1/CHANGELOG.md
|
1173
|
+
readme_uri: https://github.com/opal/opal/blob/v1.6.0.rc1/README.md
|
1174
|
+
api_documentation_uri: http://opalrb.com/docs/api/v1.6.0.rc1/index.html
|
1175
|
+
guides_uri: http://opalrb.com/docs/guides/v1.6.0.rc1/index.html
|
1174
1176
|
chat_uri: https://gitter.im/opal/opal
|
1175
1177
|
source_code_uri: https://github.com/opal/opal
|
1176
1178
|
post_install_message:
|