opal 0.8.1 → 0.9.0.beta1
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.
- checksums.yaml +4 -4
- data/.gitignore +2 -2
- data/.gitmodules +3 -3
- data/.jshintrc +17 -20
- data/.travis.yml +22 -11
- data/CHANGELOG.md +51 -1
- data/CODE_OF_CONDUCT.md +15 -0
- data/CONTRIBUTING.md +125 -9
- data/Gemfile +1 -1
- data/Guardfile +2 -2
- data/README.md +95 -29
- data/Rakefile +1 -1
- data/benchmark/benchmarks +103 -0
- data/benchmark/bm_array_flatten.rb +9 -0
- data/benchmark/bm_array_intersection_numbers.rb +7 -0
- data/benchmark/bm_array_intersection_objects.rb +7 -0
- data/benchmark/bm_array_intersection_strings.rb +7 -0
- data/benchmark/bm_array_join_ary.rb +9 -0
- data/benchmark/bm_array_minus_numbers.rb +7 -0
- data/benchmark/bm_array_minus_objects.rb +7 -0
- data/benchmark/bm_array_minus_strings.rb +7 -0
- data/benchmark/bm_array_union_numbers.rb +7 -0
- data/benchmark/bm_array_union_objects.rb +7 -0
- data/benchmark/bm_array_union_strings.rb +7 -0
- data/benchmark/bm_array_uniq_bang_numbers.rb +5 -0
- data/benchmark/bm_array_uniq_bang_objects.rb +5 -0
- data/benchmark/bm_array_uniq_bang_strings.rb +5 -0
- data/benchmark/bm_array_uniq_numbers.rb +5 -0
- data/benchmark/bm_array_uniq_objects.rb +5 -0
- data/benchmark/bm_array_uniq_strings.rb +5 -0
- data/benchmark/bm_dispatch_bind_table.rb +57 -0
- data/benchmark/bm_dispatch_code_gen.rb +65 -0
- data/benchmark/bm_dispatch_code_gen_if.rb +64 -0
- data/benchmark/bm_dispatch_hardcoded.rb +44 -0
- data/benchmark/bm_dispatch_send.rb +38 -0
- data/benchmark/bm_dispatch_send_table.rb +57 -0
- data/benchmark/bm_hash_assoc_object.rb +11 -0
- data/benchmark/bm_hash_assoc_string.rb +9 -0
- data/benchmark/bm_hash_clone_object.rb +9 -0
- data/benchmark/bm_hash_clone_string.rb +9 -0
- data/benchmark/bm_hash_delete_object.rb +11 -0
- data/benchmark/bm_hash_delete_string.rb +9 -0
- data/benchmark/bm_hash_each_key_object.rb +9 -0
- data/benchmark/bm_hash_each_key_string.rb +9 -0
- data/benchmark/bm_hash_each_object.rb +9 -0
- data/benchmark/bm_hash_each_string.rb +9 -0
- data/benchmark/bm_hash_each_value_object.rb +9 -0
- data/benchmark/bm_hash_each_value_string.rb +9 -0
- data/benchmark/bm_hash_element_reference_object.rb +11 -0
- data/benchmark/bm_hash_element_reference_string.rb +9 -0
- data/benchmark/bm_hash_element_set_object.rb +5 -0
- data/benchmark/bm_hash_element_set_string.rb +5 -0
- data/benchmark/bm_hash_equal_value_object.rb +14 -0
- data/benchmark/bm_hash_equal_value_string.rb +11 -0
- data/benchmark/bm_hash_fetch_object.rb +11 -0
- data/benchmark/bm_hash_fetch_string.rb +9 -0
- data/benchmark/bm_hash_flatten_object.rb +9 -0
- data/benchmark/bm_hash_flatten_string.rb +9 -0
- data/benchmark/bm_hash_has_key_object.rb +11 -0
- data/benchmark/bm_hash_has_key_string.rb +9 -0
- data/benchmark/bm_hash_has_value_object.rb +9 -0
- data/benchmark/bm_hash_has_value_string.rb +9 -0
- data/benchmark/bm_hash_hash_object.rb +9 -0
- data/benchmark/bm_hash_hash_string.rb +9 -0
- data/benchmark/bm_hash_inspect_object.rb +9 -0
- data/benchmark/bm_hash_inspect_string.rb +9 -0
- data/benchmark/bm_hash_invert_object.rb +9 -0
- data/benchmark/bm_hash_invert_string.rb +9 -0
- data/benchmark/bm_hash_keep_if_object.rb +9 -0
- data/benchmark/bm_hash_keep_if_string.rb +9 -0
- data/benchmark/bm_hash_key_object.rb +9 -0
- data/benchmark/bm_hash_key_string.rb +9 -0
- data/benchmark/bm_hash_keys_object.rb +9 -0
- data/benchmark/bm_hash_keys_string.rb +9 -0
- data/benchmark/bm_hash_literal_mixed_large.rb +3 -0
- data/benchmark/bm_hash_literal_mixed_small.rb +3 -0
- data/benchmark/bm_hash_literal_object_large.rb +4 -0
- data/benchmark/bm_hash_literal_object_small.rb +3 -0
- data/benchmark/bm_hash_literal_string_large.rb +4 -0
- data/benchmark/bm_hash_literal_string_small.rb +3 -0
- data/benchmark/bm_hash_merge_object.rb +22 -0
- data/benchmark/bm_hash_merge_string.rb +18 -0
- data/benchmark/bm_hash_rassoc_object.rb +9 -0
- data/benchmark/bm_hash_rassoc_string.rb +9 -0
- data/benchmark/bm_hash_rehash_object.rb +9 -0
- data/benchmark/bm_hash_rehash_string.rb +9 -0
- data/benchmark/bm_hash_reject_bang_object.rb +9 -0
- data/benchmark/bm_hash_reject_bang_string.rb +9 -0
- data/benchmark/bm_hash_reject_object.rb +9 -0
- data/benchmark/bm_hash_reject_string.rb +9 -0
- data/benchmark/bm_hash_replace_object.rb +18 -0
- data/benchmark/bm_hash_replace_string.rb +14 -0
- data/benchmark/bm_hash_select_bang_object.rb +9 -0
- data/benchmark/bm_hash_select_bang_string.rb +9 -0
- data/benchmark/bm_hash_select_object.rb +9 -0
- data/benchmark/bm_hash_select_string.rb +9 -0
- data/benchmark/bm_hash_shift_object.rb +10 -0
- data/benchmark/bm_hash_shift_string.rb +10 -0
- data/benchmark/bm_hash_to_a_object.rb +9 -0
- data/benchmark/bm_hash_to_a_string.rb +9 -0
- data/benchmark/bm_hash_to_h_object.rb +10 -0
- data/benchmark/bm_hash_to_h_string.rb +10 -0
- data/benchmark/bm_hash_values_object.rb +9 -0
- data/benchmark/bm_hash_values_string.rb +9 -0
- data/benchmark/run.rb +48 -0
- data/bin/opal-mspec +1 -1
- data/bin/opal-repl +4 -4
- data/docs/compiled_ruby.md +214 -56
- data/docs/configuring_gems.md +2 -2
- data/docs/faq.md +2 -2
- data/docs/getting_started.md +19 -2
- data/docs/jquery.md +5 -5
- data/docs/opal_parser.md +53 -0
- data/docs/unsupported_features.md +2 -2
- data/docs/upgrading.md +22 -0
- data/docs/using_sprockets.md +15 -0
- data/examples/rack/config.ru +13 -0
- data/examples/sinatra/config.ru +4 -5
- data/lib/mspec/opal/runner.rb +54 -11
- data/lib/opal.rb +1 -1
- data/lib/opal/builder.rb +1 -1
- data/lib/opal/builder_processors.rb +1 -1
- data/lib/opal/cli.rb +17 -13
- data/lib/opal/cli_options.rb +1 -1
- data/lib/opal/compiler.rb +12 -0
- data/lib/opal/config.rb +4 -0
- data/lib/opal/nodes/arglist.rb +5 -7
- data/lib/opal/nodes/call.rb +6 -1
- data/lib/opal/nodes/call_special.rb +74 -0
- data/lib/opal/nodes/def.rb +35 -28
- data/lib/opal/nodes/definitions.rb +3 -5
- data/lib/opal/nodes/for.rb +13 -0
- data/lib/opal/nodes/helpers.rb +15 -1
- data/lib/opal/nodes/if.rb +5 -5
- data/lib/opal/nodes/iter.rb +6 -1
- data/lib/opal/nodes/literal.rb +1 -1
- data/lib/opal/nodes/logic.rb +2 -2
- data/lib/opal/nodes/masgn.rb +1 -2
- data/lib/opal/nodes/module.rb +2 -1
- data/lib/opal/nodes/rescue.rb +10 -1
- data/lib/opal/nodes/scope.rb +8 -2
- data/lib/opal/nodes/singleton_class.rb +1 -1
- data/lib/opal/nodes/top.rb +11 -0
- data/lib/opal/nodes/variables.rb +4 -4
- data/lib/opal/parser.rb +21 -3
- data/lib/opal/parser/grammar.rb +3115 -2961
- data/lib/opal/parser/grammar.y +29 -6
- data/lib/opal/parser/lexer.rb +18 -8
- data/lib/opal/sprockets.rb +85 -0
- data/lib/opal/sprockets/processor.rb +11 -35
- data/lib/opal/sprockets/server.rb +3 -15
- data/lib/opal/version.rb +2 -2
- data/opal.gemspec +4 -4
- data/opal/README.md +9 -0
- data/opal/corelib/array.rb +433 -181
- data/opal/corelib/basic_object.rb +48 -4
- data/opal/corelib/boolean.rb +15 -6
- data/opal/corelib/class.rb +6 -5
- data/opal/corelib/comparable.rb +12 -0
- data/opal/corelib/complex.rb +282 -0
- data/opal/corelib/constants.rb +9 -0
- data/opal/corelib/enumerable.rb +83 -34
- data/opal/corelib/enumerator.rb +3 -1
- data/opal/corelib/error.rb +49 -10
- data/opal/corelib/file.rb +1 -0
- data/opal/corelib/hash.rb +353 -577
- data/opal/corelib/helpers.rb +20 -0
- data/opal/corelib/kernel.rb +114 -59
- data/opal/corelib/math.rb +470 -0
- data/opal/corelib/method.rb +11 -2
- data/opal/corelib/module.rb +96 -96
- data/opal/corelib/{nil_class.rb → nil.rb} +20 -1
- data/opal/corelib/number.rb +751 -0
- data/opal/corelib/numeric.rb +77 -437
- data/opal/corelib/proc.rb +81 -1
- data/opal/corelib/process.rb +27 -0
- data/opal/corelib/rational.rb +358 -0
- data/opal/corelib/regexp.rb +156 -27
- data/opal/corelib/runtime.js +724 -335
- data/opal/corelib/string.rb +93 -104
- data/opal/corelib/string/encoding.rb +177 -0
- data/opal/corelib/string/inheritance.rb +2 -0
- data/opal/corelib/struct.rb +105 -18
- data/opal/corelib/time.rb +267 -146
- data/opal/corelib/unsupported.rb +216 -0
- data/opal/corelib/variables.rb +0 -6
- data/opal/opal.rb +8 -22
- data/opal/opal/base.rb +9 -0
- data/opal/opal/mini.rb +17 -0
- data/spec/README.md +1 -1
- data/spec/filters/bugs/array.rb +38 -136
- data/spec/filters/bugs/{basic_object.rb → basicobject.rb} +14 -15
- data/spec/filters/bugs/class.rb +6 -12
- data/spec/filters/bugs/complex.rb +3 -0
- data/spec/filters/bugs/date.rb +162 -10
- data/spec/filters/bugs/enumerable.rb +31 -58
- data/spec/filters/bugs/enumerator.rb +42 -0
- data/spec/filters/bugs/exception.rb +66 -10
- data/spec/filters/bugs/float.rb +17 -0
- data/spec/filters/bugs/hash.rb +11 -97
- data/spec/filters/bugs/inheritance.rb +5 -0
- data/spec/filters/bugs/integer.rb +28 -0
- data/spec/filters/bugs/kernel.rb +304 -12
- data/spec/filters/bugs/language.rb +133 -399
- data/spec/filters/bugs/language_opal.rb +88 -0
- data/spec/filters/bugs/module.rb +203 -62
- data/spec/filters/bugs/numeric.rb +32 -0
- data/spec/filters/bugs/proc.rb +39 -0
- data/spec/filters/bugs/range.rb +148 -0
- data/spec/filters/bugs/regexp.rb +168 -0
- data/spec/filters/bugs/set.rb +46 -3
- data/spec/filters/bugs/singleton.rb +1 -2
- data/spec/filters/bugs/string.rb +59 -90
- data/spec/filters/bugs/strscan.rb +80 -0
- data/spec/filters/bugs/struct.rb +10 -20
- data/spec/filters/bugs/time.rb +17 -184
- data/spec/filters/bugs/unboundmethod.rb +22 -0
- data/spec/filters/unsupported/array.rb +163 -0
- data/spec/filters/unsupported/basicobject.rb +14 -0
- data/spec/filters/unsupported/bignum.rb +46 -0
- data/spec/filters/unsupported/class.rb +4 -0
- data/spec/filters/unsupported/delegator.rb +5 -0
- data/spec/filters/unsupported/enumerable.rb +11 -0
- data/spec/filters/unsupported/enumerator.rb +8 -9
- data/spec/filters/unsupported/fixnum.rb +14 -0
- data/spec/filters/unsupported/float.rb +41 -7
- data/spec/filters/unsupported/freeze.rb +45 -0
- data/spec/filters/unsupported/hash.rb +50 -0
- data/spec/filters/unsupported/integer.rb +3 -0
- data/spec/filters/unsupported/kernel.rb +31 -0
- data/spec/filters/unsupported/language.rb +17 -0
- data/spec/filters/unsupported/matchdata.rb +30 -0
- data/spec/filters/unsupported/math.rb +3 -0
- data/spec/filters/unsupported/module.rb +5 -3
- data/spec/filters/unsupported/pathname.rb +3 -0
- data/spec/filters/unsupported/privacy.rb +136 -0
- data/spec/filters/unsupported/proc.rb +3 -0
- data/spec/filters/unsupported/regexp.rb +59 -0
- data/spec/filters/unsupported/set.rb +4 -0
- data/spec/filters/unsupported/{marshal.rb → singleton.rb} +4 -2
- data/spec/filters/unsupported/{mutable_strings.rb → string.rb} +456 -336
- data/spec/filters/unsupported/struct.rb +3 -0
- data/spec/filters/unsupported/symbol.rb +5 -0
- data/spec/filters/unsupported/taint.rb +16 -0
- data/spec/filters/unsupported/thread.rb +5 -0
- data/spec/filters/unsupported/time.rb +197 -16
- data/spec/lib/cli_spec.rb +14 -4
- data/spec/lib/compiler_spec.rb +9 -1
- data/spec/lib/parser/call_spec.rb +18 -0
- data/spec/lib/parser/not_spec.rb +2 -8
- data/spec/lib/sprockets_spec.rb +24 -0
- data/spec/opal/core/array/intersection_spec.rb +38 -0
- data/spec/opal/core/array/minus_spec.rb +38 -0
- data/spec/opal/core/array/union_spec.rb +38 -0
- data/spec/opal/core/array/uniq_spec.rb +49 -0
- data/spec/opal/core/exception_spec.rb +7 -0
- data/spec/opal/core/fixtures/require_tree_with_dot/file 1.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_with_dot/file 2.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_with_dot/file 3.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_with_dot/index.rb +3 -0
- data/spec/opal/core/hash/internals_spec.rb +332 -0
- data/spec/opal/core/helpers_spec.rb +14 -0
- data/spec/opal/core/kernel/freeze_spec.rb +1 -1
- data/spec/opal/core/kernel/raise_spec.rb +13 -0
- data/spec/opal/core/kernel/require_tree_spec.rb +9 -0
- data/spec/opal/core/language/class_spec.rb +55 -0
- data/spec/opal/core/language/fixtures/send.rb +1 -0
- data/spec/opal/core/language/keyword_arguments_spec.rb +11 -0
- data/spec/opal/core/language/send_spec.rb +5 -0
- data/spec/opal/core/method/to_proc_spec.rb +28 -0
- data/spec/opal/core/module/name_spec.rb +0 -17
- data/spec/opal/core/runtime/bridged_classes_spec.rb +2 -2
- data/spec/opal/core/runtime/eval_spec.rb +1 -1
- data/spec/opal/core/runtime/method_missing_spec.rb +6 -0
- data/spec/opal/core/runtime_spec.rb +51 -0
- data/spec/opal/stdlib/js_spec.rb +66 -0
- data/spec/opal/stdlib/native/hash_spec.rb +36 -0
- data/spec/rubyspecs +152 -273
- data/spec/spec_helper.rb +10 -11
- data/stdlib/base64.rb +9 -9
- data/stdlib/benchmark.rb +551 -4
- data/stdlib/console.rb +94 -0
- data/stdlib/date.rb +1 -1
- data/stdlib/encoding.rb +1 -170
- data/stdlib/js.rb +56 -0
- data/stdlib/json.rb +9 -14
- data/stdlib/math.rb +1 -370
- data/stdlib/native.rb +133 -63
- data/stdlib/nodejs/file.rb +5 -0
- data/stdlib/nodejs/fileutils.rb +13 -6
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +1 -1
- data/stdlib/opal-parser.rb +1 -2
- data/stdlib/ostruct.rb +65 -6
- data/stdlib/pp.rb +2 -4
- data/stdlib/rbconfig.rb +1 -3
- data/stdlib/strscan.rb +164 -28
- data/tasks/benchmarking.rake +88 -0
- data/tasks/testing.rake +181 -55
- data/{lib/mspec/opal/special_calls.rb → tasks/testing/mspec_special_calls.rb} +1 -1
- data/{lib/mspec/opal/sprockets.js → tasks/testing/phantomjs1-sprockets.js} +17 -6
- data/test/opal/test_keyword.rb +590 -0
- data/vendored-minitest/minitest.rb +2 -2
- data/vendored-minitest/test/unit.rb +5 -0
- metadata +229 -62
- data/benchmarks/operators.rb +0 -11
- data/benchmarks/prova.js.rb +0 -13
- data/docs/libraries.md +0 -36
- data/lib/mspec/opal/new.html.erb +0 -1
- data/lib/mspec/opal/rake_task.rb +0 -248
- data/opal/corelib/match_data.rb +0 -128
- data/spec/filters/bugs/math.rb +0 -95
- data/spec/filters/bugs/nil.rb +0 -7
- data/spec/filters/bugs/opal.rb +0 -9
- data/spec/filters/bugs/regular_expressions.rb +0 -41
- data/spec/filters/bugs/stringscanner.rb +0 -33
- data/spec/filters/unsupported/encoding.rb +0 -102
- data/spec/filters/unsupported/frozen.rb +0 -92
- data/spec/filters/unsupported/hash_compare_by_identity.rb +0 -16
- data/spec/filters/unsupported/integer_size.rb +0 -59
- data/spec/filters/unsupported/method_added.rb +0 -10
- data/spec/filters/unsupported/private_constants.rb +0 -30
- data/spec/filters/unsupported/private_methods.rb +0 -55
- data/spec/filters/unsupported/random.rb +0 -4
- data/spec/filters/unsupported/rational_numbers.rb +0 -4
- data/spec/filters/unsupported/regular_expressions.rb +0 -137
- data/spec/filters/unsupported/ruby_exe.rb +0 -5
- data/spec/filters/unsupported/symbols.rb +0 -17
- data/spec/filters/unsupported/tainted.rb +0 -180
- data/spec/filters/unsupported/trusted.rb +0 -88
- data/stdlib/process.rb +0 -10
- data/tasks/documenting.rake +0 -37
data/benchmarks/operators.rb
DELETED
data/benchmarks/prova.js.rb
DELETED
data/docs/libraries.md
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
# Using external libraries in your Opal app
|
2
|
-
|
3
|
-
As described in the getting started docs, opal uses a load path which works
|
4
|
-
with sprockets to create a set of locations which opal can require files
|
5
|
-
from. If you want to add a directory to this load path, you can add it to
|
6
|
-
either the global environment, or a sprockets instance.
|
7
|
-
|
8
|
-
### Global Environment
|
9
|
-
|
10
|
-
In the `Opal` module, a property `paths` is used to hold the load paths which
|
11
|
-
`Opal` uses to require files from. You can add a directory to this:
|
12
|
-
|
13
|
-
```ruby
|
14
|
-
Opal.append_path '../my_lib'
|
15
|
-
```
|
16
|
-
|
17
|
-
Now, any ruby files in this directory can be discovered.
|
18
|
-
|
19
|
-
### Sprockets instances
|
20
|
-
|
21
|
-
`Opal::Environment` is a subclass of the sprockets environment class which
|
22
|
-
can have instance specific paths added to it. This class will inherit all
|
23
|
-
global paths, but you can also add your instance paths as:
|
24
|
-
|
25
|
-
```ruby
|
26
|
-
env = Opal::Environment.new
|
27
|
-
env.append_path '../my_lib'
|
28
|
-
```
|
29
|
-
|
30
|
-
## with Opal::Builder
|
31
|
-
|
32
|
-
_WIP_
|
33
|
-
|
34
|
-
## With opal-sprockets
|
35
|
-
|
36
|
-
_WIP_
|
data/lib/mspec/opal/new.html.erb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
|
data/lib/mspec/opal/rake_task.rb
DELETED
@@ -1,248 +0,0 @@
|
|
1
|
-
require 'opal'
|
2
|
-
require 'rack'
|
3
|
-
require 'webrick'
|
4
|
-
require 'mspec/opal/special_calls'
|
5
|
-
|
6
|
-
module MSpec
|
7
|
-
module Opal
|
8
|
-
DEFAULT_BASEDIR = 'spec'
|
9
|
-
|
10
|
-
require 'rake'
|
11
|
-
require 'rake/tasklib'
|
12
|
-
class RakeTask < ::Rake::TaskLib
|
13
|
-
include ::Rake::DSL if defined?(::Rake::DSL)
|
14
|
-
|
15
|
-
def initialize(name, &task_block)
|
16
|
-
namespace name do
|
17
|
-
desc 'Run MSpec::Opal code examples' unless ::Rake.application.last_comment
|
18
|
-
task :default do
|
19
|
-
puts 'Starting MSpec Runner...'
|
20
|
-
runner = Runner.new(&task_block)
|
21
|
-
runner.run
|
22
|
-
end
|
23
|
-
|
24
|
-
desc 'Build specs to build/specs.js and build/specs.min.js'
|
25
|
-
task :build do
|
26
|
-
require 'opal/util'
|
27
|
-
path = './build/specs.js'
|
28
|
-
min_path = './build/specs.min.js'
|
29
|
-
Environment.new.build_specs(path)
|
30
|
-
min = ::Opal::Util.uglify File.read(path)
|
31
|
-
File.open(min_path, 'w') { |f| f << min_path }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
task name => "#{name}:default"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
class Runner
|
40
|
-
def initialize &block
|
41
|
-
@app = Rack::Builder.new do
|
42
|
-
::Opal::Processor.arity_check_enabled = true
|
43
|
-
::Opal::Processor.dynamic_require_severity = :error
|
44
|
-
|
45
|
-
use Rack::ShowExceptions
|
46
|
-
use Rack::ShowStatus
|
47
|
-
use MSpec::Opal::Index
|
48
|
-
run MSpec::Opal::Environment.new
|
49
|
-
end
|
50
|
-
|
51
|
-
@port = 9999
|
52
|
-
end
|
53
|
-
|
54
|
-
attr_reader :app, :server
|
55
|
-
attr_accessor :port
|
56
|
-
|
57
|
-
def passed?
|
58
|
-
@passed
|
59
|
-
end
|
60
|
-
|
61
|
-
def run
|
62
|
-
start_server
|
63
|
-
start_phantomjs
|
64
|
-
|
65
|
-
exit 1 unless passed?
|
66
|
-
rescue => e
|
67
|
-
puts e.message
|
68
|
-
ensure
|
69
|
-
stop_server if server
|
70
|
-
end
|
71
|
-
|
72
|
-
def stop_server
|
73
|
-
server.kill
|
74
|
-
end
|
75
|
-
|
76
|
-
require 'opal/util'
|
77
|
-
class PhantomJS < ::Opal::Util::Command
|
78
|
-
require 'shellwords'
|
79
|
-
|
80
|
-
def initialize(runner, url)
|
81
|
-
runner = runner.shellescape
|
82
|
-
url = url.shellescape
|
83
|
-
super 'phantomjs', "#{runner} #{url}", '. Please install PhantomJS'
|
84
|
-
end
|
85
|
-
|
86
|
-
def run
|
87
|
-
system "#{command} #{options}"
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def start_phantomjs
|
92
|
-
runner = File.expand_path('../sprockets.js', __FILE__).shellescape
|
93
|
-
url = "http://localhost:#{port}/".shellescape
|
94
|
-
command = PhantomJS.new(runner, url)
|
95
|
-
@passed = command.run
|
96
|
-
end
|
97
|
-
|
98
|
-
def start_server
|
99
|
-
@server = Thread.new { Rack::Server.start(:app => app, :Port => port) }
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
class Environment < ::Sprockets::Environment
|
104
|
-
attr_reader :basedir, :pattern
|
105
|
-
|
106
|
-
def initialize(basedir = nil, pattern = nil)
|
107
|
-
@pattern = pattern
|
108
|
-
@basedir = basedir = File.expand_path(basedir || DEFAULT_BASEDIR)
|
109
|
-
|
110
|
-
::Opal.append_path basedir
|
111
|
-
::Opal.use_gem 'mspec'
|
112
|
-
|
113
|
-
stubs.each do |asset|
|
114
|
-
::Opal::Processor.stub_file asset
|
115
|
-
end
|
116
|
-
|
117
|
-
ENV['OPAL_SPEC'] ||= files_to_run(pattern).join(',')
|
118
|
-
|
119
|
-
super()
|
120
|
-
|
121
|
-
::Opal.paths.each { |p| append_path p }
|
122
|
-
end
|
123
|
-
|
124
|
-
def stubs
|
125
|
-
# missing stdlib
|
126
|
-
stubs = %w[fileutils iconv yaml]
|
127
|
-
|
128
|
-
# use x-strings which generate bad javascript
|
129
|
-
stubs << "mspec/helpers/tmp"
|
130
|
-
stubs << "mspec/helpers/environment"
|
131
|
-
stubs << "mspec/guards/block_device"
|
132
|
-
stubs << "mspec/guards/endian"
|
133
|
-
|
134
|
-
stubs
|
135
|
-
end
|
136
|
-
|
137
|
-
def specs
|
138
|
-
@specs ||= self['mspec/opal/main'] || raise("Cannot find mspec/opal/main inside #{paths.inspect}")
|
139
|
-
end
|
140
|
-
|
141
|
-
def build_min file = "#{basedir}/build/specs.min.js"
|
142
|
-
require 'opal/util'
|
143
|
-
build ::Opal::Util.uglify(specs.to_s), file
|
144
|
-
end
|
145
|
-
|
146
|
-
def files
|
147
|
-
@files ||= []
|
148
|
-
end
|
149
|
-
|
150
|
-
def add_files specs, tag = ''
|
151
|
-
tag = "[#{tag}] "
|
152
|
-
puts "#{tag}Adding #{specs.size} spec files..."
|
153
|
-
specs = specs.flatten.map do |path|
|
154
|
-
dirname = File.join([basedir, path])
|
155
|
-
if File.directory? dirname
|
156
|
-
rubyspec_paths_in_dir(dirname, path)
|
157
|
-
else
|
158
|
-
path
|
159
|
-
end
|
160
|
-
end.flatten
|
161
|
-
files.concat specs
|
162
|
-
end
|
163
|
-
|
164
|
-
def paths_from_glob pattern
|
165
|
-
Dir.glob(File.expand_path(pattern)).map do |s|
|
166
|
-
s.sub(/\A#{basedir}\//, '').sub(/\.rb\z/, '')
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
def rubyspec_paths_in_dir(dirname, path)
|
171
|
-
Dir.entries(dirname).select do |spec|
|
172
|
-
spec.end_with? '.rb'
|
173
|
-
end.map do |spec|
|
174
|
-
File.join path, spec
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
def rubyspec_white_list
|
179
|
-
File.read("#{basedir}/rubyspecs").split("\n").reject do |line|
|
180
|
-
line.sub(/#.*/, '').strip.empty? ||
|
181
|
-
(line.start_with?('!') && rubyspec_black_list.push(line.sub('!', '') + '.rb'))
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
def rubyspec_black_list
|
186
|
-
@rubyspec_black_list ||= []
|
187
|
-
end
|
188
|
-
|
189
|
-
def files_to_run(pattern=nil)
|
190
|
-
# add any filters in spec/filters of specs we dont want to run
|
191
|
-
add_files paths_from_glob("#{basedir}/filters/**/*.rb"), :filters
|
192
|
-
|
193
|
-
if pattern
|
194
|
-
# add custom opal specs from spec/
|
195
|
-
add_files paths_from_glob(pattern) & rubyspec_white_list, :rubyspec_custom
|
196
|
-
add_files paths_from_glob(pattern).grep(/(?!spec\/(corelib|stdlib)\/)/), :other_custom
|
197
|
-
|
198
|
-
else
|
199
|
-
# add opal specific specs
|
200
|
-
add_files paths_from_glob("#{basedir}/opal/**/*_spec.rb"), :shared
|
201
|
-
add_files paths_from_glob("#{basedir}/lib/lexer_spec.rb"), :lexer
|
202
|
-
add_files paths_from_glob("#{basedir}/lib/parser/**/*_spec.rb"), :parser
|
203
|
-
|
204
|
-
# add any rubyspecs we want to run (defined in spec/rubyspecs)
|
205
|
-
add_files rubyspec_white_list, :rubyspecs
|
206
|
-
end
|
207
|
-
|
208
|
-
files - rubyspec_black_list
|
209
|
-
end
|
210
|
-
|
211
|
-
def build_specs file = "#{basedir}/build/specs.js"
|
212
|
-
code = specs.to_s
|
213
|
-
FileUtils.mkdir_p File.dirname(file)
|
214
|
-
puts "Building #{file}..."
|
215
|
-
File.open(file, 'w+') { |o| o << code }
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
class Index
|
220
|
-
HTML = <<-HTML
|
221
|
-
<!DOCTYPE html>
|
222
|
-
<html>
|
223
|
-
<head>
|
224
|
-
<meta charset="UTF-8" />
|
225
|
-
<title>Opal Specs</title>
|
226
|
-
</head>
|
227
|
-
<body>
|
228
|
-
<script src="/mspec/opal/main.js"></script>
|
229
|
-
<script>Opal.load('mspec/opal/main');</script>
|
230
|
-
</body>
|
231
|
-
</html>
|
232
|
-
HTML
|
233
|
-
|
234
|
-
def initialize(app)
|
235
|
-
@app = app
|
236
|
-
end
|
237
|
-
|
238
|
-
def call(env)
|
239
|
-
if %w[/ /index.html].include? env['PATH_INFO']
|
240
|
-
[200, { 'Content-Type' => 'text/html' }, [HTML]]
|
241
|
-
else
|
242
|
-
@app.call env
|
243
|
-
end
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
end
|
248
|
-
end
|
data/opal/corelib/match_data.rb
DELETED
@@ -1,128 +0,0 @@
|
|
1
|
-
class MatchData
|
2
|
-
attr_reader :post_match, :pre_match, :regexp, :string
|
3
|
-
|
4
|
-
def initialize(regexp, match_groups)
|
5
|
-
$~ = self
|
6
|
-
@regexp = regexp
|
7
|
-
@begin = `match_groups.index`
|
8
|
-
@string = `match_groups.input`
|
9
|
-
@pre_match = `match_groups.input.slice(0, match_groups.index)`
|
10
|
-
@post_match = `match_groups.input.slice(match_groups.index + match_groups[0].length)`
|
11
|
-
@matches = []
|
12
|
-
|
13
|
-
%x{
|
14
|
-
for (var i = 0, length = match_groups.length; i < length; i++) {
|
15
|
-
var group = match_groups[i];
|
16
|
-
|
17
|
-
if (group == null) {
|
18
|
-
#@matches.push(nil);
|
19
|
-
}
|
20
|
-
else {
|
21
|
-
#@matches.push(group);
|
22
|
-
}
|
23
|
-
}
|
24
|
-
}
|
25
|
-
end
|
26
|
-
|
27
|
-
def [](*args)
|
28
|
-
@matches[*args]
|
29
|
-
end
|
30
|
-
|
31
|
-
def offset(n)
|
32
|
-
%x{
|
33
|
-
if (n !== 0) {
|
34
|
-
#{raise ArgumentError, 'MatchData#offset only supports 0th element'}
|
35
|
-
}
|
36
|
-
return [self.begin, self.begin + self.matches[n].length];
|
37
|
-
}
|
38
|
-
end
|
39
|
-
|
40
|
-
def ==(other)
|
41
|
-
return false unless MatchData === other
|
42
|
-
|
43
|
-
`self.string == other.string` &&
|
44
|
-
`self.regexp.toString() == other.regexp.toString()` &&
|
45
|
-
`self.pre_match == other.pre_match` &&
|
46
|
-
`self.post_match == other.post_match` &&
|
47
|
-
`self.begin == other.begin`
|
48
|
-
end
|
49
|
-
|
50
|
-
alias eql? ==
|
51
|
-
|
52
|
-
def begin(n)
|
53
|
-
%x{
|
54
|
-
if (n !== 0) {
|
55
|
-
#{raise ArgumentError, 'MatchData#begin only supports 0th element'}
|
56
|
-
}
|
57
|
-
return self.begin;
|
58
|
-
}
|
59
|
-
end
|
60
|
-
|
61
|
-
def end(n)
|
62
|
-
%x{
|
63
|
-
if (n !== 0) {
|
64
|
-
#{raise ArgumentError, 'MatchData#end only supports 0th element'}
|
65
|
-
}
|
66
|
-
return self.begin + self.matches[n].length;
|
67
|
-
}
|
68
|
-
end
|
69
|
-
|
70
|
-
def captures
|
71
|
-
`#@matches.slice(1)`
|
72
|
-
end
|
73
|
-
|
74
|
-
def inspect
|
75
|
-
%x{
|
76
|
-
var str = "#<MatchData " + #{`#@matches[0]`.inspect};
|
77
|
-
|
78
|
-
for (var i = 1, length = #@matches.length; i < length; i++) {
|
79
|
-
str += " " + i + ":" + #{`#@matches[i]`.inspect};
|
80
|
-
}
|
81
|
-
|
82
|
-
return str + ">";
|
83
|
-
}
|
84
|
-
end
|
85
|
-
|
86
|
-
def length
|
87
|
-
`#@matches.length`
|
88
|
-
end
|
89
|
-
|
90
|
-
alias size length
|
91
|
-
|
92
|
-
def to_a
|
93
|
-
@matches
|
94
|
-
end
|
95
|
-
|
96
|
-
def to_s
|
97
|
-
`#@matches[0]`
|
98
|
-
end
|
99
|
-
|
100
|
-
def values_at(*args)
|
101
|
-
%x{
|
102
|
-
var i, a, index, values = [];
|
103
|
-
|
104
|
-
for (i = 0; i < args.length; i++) {
|
105
|
-
|
106
|
-
if (args[i].$$is_range) {
|
107
|
-
a = #{`args[i]`.to_a};
|
108
|
-
a.unshift(i, 1);
|
109
|
-
Array.prototype.splice.apply(args, a);
|
110
|
-
}
|
111
|
-
|
112
|
-
index = #{Opal.coerce_to!(`args[i]`, Integer, :to_int)};
|
113
|
-
|
114
|
-
if (index < 0) {
|
115
|
-
index += #@matches.length;
|
116
|
-
if (index < 0) {
|
117
|
-
values.push(nil);
|
118
|
-
continue;
|
119
|
-
}
|
120
|
-
}
|
121
|
-
|
122
|
-
values.push(#@matches[index]);
|
123
|
-
}
|
124
|
-
|
125
|
-
return values;
|
126
|
-
}
|
127
|
-
end
|
128
|
-
end
|
data/spec/filters/bugs/math.rb
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
opal_filter "Math" do
|
2
|
-
fails "Math.erf returns a float"
|
3
|
-
fails "Math.erf returns the error function of the argument"
|
4
|
-
fails "Math.erf raises a TypeError if the argument cannot be coerced with Float()"
|
5
|
-
fails "Math.erf returns NaN given NaN"
|
6
|
-
fails "Math.erf raises a TypeError if the argument is nil"
|
7
|
-
fails "Math.erf accepts any argument that can be coerced with Float()"
|
8
|
-
fails "Math#erf is accessible as a private instance method"
|
9
|
-
|
10
|
-
fails "Math.erfc returns the complementary error function of the argument"
|
11
|
-
|
12
|
-
fails "Math.frexp returns the normalized fraction and exponent"
|
13
|
-
fails "Math.frexp raises a TypeError if the argument cannot be coerced with Float()"
|
14
|
-
fails "Math.frexp returns NaN given NaN"
|
15
|
-
fails "Math.frexp raises a TypeError if the argument is nil"
|
16
|
-
fails "Math.frexp accepts any argument that can be coerced with Float()"
|
17
|
-
fails "Math#frexp is accessible as a private instance method"
|
18
|
-
|
19
|
-
fails "Math.erfc returns a float"
|
20
|
-
fails "Math.erfc returns the complimentary error function of the argument"
|
21
|
-
fails "Math.erfc raises a TypeError if the argument cannot be coerced with Float()"
|
22
|
-
fails "Math.erfc returns NaN given NaN"
|
23
|
-
fails "Math.erfc raises a TypeError if the argument is nil"
|
24
|
-
fails "Math.erfc accepts any argument that can be coerced with Float()"
|
25
|
-
fails "Math#erfc is accessible as a private instance method"
|
26
|
-
|
27
|
-
fails "Math.ldexp returns a float"
|
28
|
-
fails "Math.ldexp returns the argument multiplied by 2**n"
|
29
|
-
fails "Math.ldexp raises a TypeError if the first argument cannot be coerced with Float()"
|
30
|
-
fails "Math.ldexp returns NaN given NaN"
|
31
|
-
fails "Math.ldexp raises RangeError if NaN is given as the second arg"
|
32
|
-
fails "Math.ldexp raises a TypeError if the second argument cannot be coerced with Integer()"
|
33
|
-
fails "Math.ldexp raises a TypeError if the first argument is nil"
|
34
|
-
fails "Math.ldexp raises a TypeError if the second argument is nil"
|
35
|
-
fails "Math.ldexp accepts any first argument that can be coerced with Float()"
|
36
|
-
fails "Math.ldexp accepts any second argument that can be coerced with Integer()"
|
37
|
-
fails "Math#ldexp is accessible as a private instance method"
|
38
|
-
|
39
|
-
fails "Math.cbrt returns a float"
|
40
|
-
fails "Math.cbrt returns the cubic root of the argument"
|
41
|
-
fails "Math.cbrt raises a TypeError if the argument cannot be coerced with Float()"
|
42
|
-
fails "Math.cbrt raises a TypeError if the argument is nil"
|
43
|
-
fails "Math.cbrt accepts any argument that can be coerced with Float()"
|
44
|
-
|
45
|
-
fails "Math.gamma returns +infinity given 0"
|
46
|
-
fails "Math.gamma returns -infinity given -0.0"
|
47
|
-
fails "Math.gamma returns Math.sqrt(Math::PI) given 0.5"
|
48
|
-
fails "Math.gamma returns exactly 1! given 2"
|
49
|
-
fails "Math.gamma returns exactly 2! given 3"
|
50
|
-
fails "Math.gamma returns exactly 3! given 4"
|
51
|
-
fails "Math.gamma returns exactly 4! given 5"
|
52
|
-
fails "Math.gamma returns exactly 5! given 6"
|
53
|
-
fails "Math.gamma returns exactly 6! given 7"
|
54
|
-
fails "Math.gamma returns exactly 7! given 8"
|
55
|
-
fails "Math.gamma returns exactly 8! given 9"
|
56
|
-
fails "Math.gamma returns exactly 9! given 10"
|
57
|
-
fails "Math.gamma returns exactly 10! given 11"
|
58
|
-
fails "Math.gamma returns exactly 11! given 12"
|
59
|
-
fails "Math.gamma returns exactly 12! given 13"
|
60
|
-
fails "Math.gamma returns exactly 13! given 14"
|
61
|
-
fails "Math.gamma returns exactly 14! given 15"
|
62
|
-
fails "Math.gamma returns exactly 15! given 16"
|
63
|
-
fails "Math.gamma returns exactly 16! given 17"
|
64
|
-
fails "Math.gamma returns exactly 17! given 18"
|
65
|
-
fails "Math.gamma returns exactly 18! given 19"
|
66
|
-
fails "Math.gamma returns exactly 19! given 20"
|
67
|
-
fails "Math.gamma returns exactly 20! given 21"
|
68
|
-
fails "Math.gamma returns exactly 21! given 22"
|
69
|
-
fails "Math.gamma returns exactly 22! given 23"
|
70
|
-
fails "Math.gamma returns approximately 23! given 24"
|
71
|
-
fails "Math.gamma returns approximately 24! given 25"
|
72
|
-
fails "Math.gamma returns approximately 25! given 26"
|
73
|
-
fails "Math.gamma returns approximately 26! given 27"
|
74
|
-
fails "Math.gamma returns approximately 27! given 28"
|
75
|
-
fails "Math.gamma returns approximately 28! given 29"
|
76
|
-
fails "Math.gamma returns approximately 29! given 30"
|
77
|
-
fails "Math.gamma returns good numerical approximation for gamma(3.2)"
|
78
|
-
fails "Math.gamma returns good numerical approximation for gamma(-2.15)"
|
79
|
-
fails "Math.gamma returns good numerical approximation for gamma(0.00001)"
|
80
|
-
fails "Math.gamma returns good numerical approximation for gamma(-0.00001)"
|
81
|
-
fails "Math.gamma raises Math::DomainError given -1"
|
82
|
-
fails "Math.gamma returns +infinity given +infinity"
|
83
|
-
fails "Math.gamma raises Math::DomainError given negative infinity"
|
84
|
-
fails "Math.gamma returns NaN given NaN"
|
85
|
-
|
86
|
-
fails "Math.lgamma returns [Infinity, 1] when passed 0"
|
87
|
-
fails "Math.lgamma returns [Infinity, 1] when passed -1"
|
88
|
-
fails "Math.lgamma returns [log(sqrt(PI)), 1] when passed 0.5"
|
89
|
-
fails "Math.lgamma returns [log(2/3*PI, 1] when passed 6.0"
|
90
|
-
fails "Math.lgamma returns an approximate value when passed -0.5"
|
91
|
-
fails "Math.lgamma returns an approximate value when passed -1.5"
|
92
|
-
fails "Math.lgamma raises Math::DomainError when passed -Infinity"
|
93
|
-
fails "Math.lgamma returns [Infinity, 1] when passed Infinity"
|
94
|
-
fails "Math.lgamma returns [NaN, 1] when passed NaN"
|
95
|
-
end
|