opal-wedge 0.9.0.dev
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 +7 -0
- data/.gitignore +14 -0
- data/.gitmodules +7 -0
- data/.inch.yml +19 -0
- data/.jshintrc +48 -0
- data/.rspec +3 -0
- data/.spectator +2 -0
- data/.spectator-mspec +3 -0
- data/.travis.yml +60 -0
- data/.yardopts +6 -0
- data/CHANGELOG.md +571 -0
- data/CODE_OF_CONDUCT.md +15 -0
- data/CONTRIBUTING.md +192 -0
- data/Gemfile +26 -0
- data/Guardfile +77 -0
- data/LICENSE +19 -0
- data/README.md +167 -0
- data/Rakefile +15 -0
- data/benchmark/benchmarks +103 -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_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 +37 -0
- data/bin/opal +27 -0
- data/bin/opal-build +77 -0
- data/bin/opal-mspec +10 -0
- data/bin/opal-repl +72 -0
- data/config.ru +14 -0
- data/docs/compiler_directives.md +127 -0
- data/examples/rack/.gitignore +1 -0
- data/examples/rack/Gemfile +3 -0
- data/examples/rack/app/application.rb +13 -0
- data/examples/rack/app/user.rb +22 -0
- data/examples/rack/config.ru +20 -0
- data/examples/rack/index.html.erb +10 -0
- data/examples/sinatra/Gemfile +5 -0
- data/examples/sinatra/app/application.rb +7 -0
- data/examples/sinatra/config.ru +38 -0
- data/lib/mspec/opal/main.rb.erb +9 -0
- data/lib/mspec/opal/new.html.erb +1 -0
- data/lib/mspec/opal/rake_task.rb +248 -0
- data/lib/mspec/opal/runner.rb +281 -0
- data/lib/mspec/opal/special_calls.rb +44 -0
- data/lib/mspec/opal/sprockets.js +57 -0
- data/lib/opal-wedge.rb +4 -0
- data/lib/opal.rb +11 -0
- data/lib/opal/builder.rb +161 -0
- data/lib/opal/builder_processors.rb +149 -0
- data/lib/opal/cli.rb +162 -0
- data/lib/opal/cli_options.rb +158 -0
- data/lib/opal/cli_runners.rb +11 -0
- data/lib/opal/cli_runners/apple_script.rb +65 -0
- data/lib/opal/cli_runners/nodejs.rb +63 -0
- data/lib/opal/cli_runners/phantom.js +44 -0
- data/lib/opal/cli_runners/phantomjs.rb +28 -0
- data/lib/opal/cli_runners/server.rb +56 -0
- data/lib/opal/compiler.rb +381 -0
- data/lib/opal/config.rb +48 -0
- data/lib/opal/erb.rb +84 -0
- data/lib/opal/fragment.rb +53 -0
- data/lib/opal/hike_path_finder.rb +18 -0
- data/lib/opal/nodes.rb +26 -0
- data/lib/opal/nodes/arglist.rb +56 -0
- data/lib/opal/nodes/array.rb +54 -0
- data/lib/opal/nodes/base.rb +151 -0
- data/lib/opal/nodes/call.rb +290 -0
- data/lib/opal/nodes/call_special.rb +252 -0
- data/lib/opal/nodes/case.rb +96 -0
- data/lib/opal/nodes/class.rb +42 -0
- data/lib/opal/nodes/constants.rb +78 -0
- data/lib/opal/nodes/def.rb +281 -0
- data/lib/opal/nodes/defined.rb +113 -0
- data/lib/opal/nodes/definitions.rb +168 -0
- data/lib/opal/nodes/for.rb +48 -0
- data/lib/opal/nodes/hash.rb +67 -0
- data/lib/opal/nodes/helpers.rb +116 -0
- data/lib/opal/nodes/if.rb +81 -0
- data/lib/opal/nodes/iter.rb +136 -0
- data/lib/opal/nodes/literal.rb +247 -0
- data/lib/opal/nodes/logic.rb +217 -0
- data/lib/opal/nodes/masgn.rb +62 -0
- data/lib/opal/nodes/module.rb +45 -0
- data/lib/opal/nodes/rescue.rb +143 -0
- data/lib/opal/nodes/runtime_helpers.rb +45 -0
- data/lib/opal/nodes/scope.rb +281 -0
- data/lib/opal/nodes/singleton_class.rb +26 -0
- data/lib/opal/nodes/super.rb +97 -0
- data/lib/opal/nodes/top.rb +103 -0
- data/lib/opal/nodes/variables.rb +191 -0
- data/lib/opal/nodes/while.rb +65 -0
- data/lib/opal/nodes/yield.rb +95 -0
- data/lib/opal/parser.rb +742 -0
- data/lib/opal/parser/grammar.rb +5723 -0
- data/lib/opal/parser/grammar.y +1787 -0
- data/lib/opal/parser/keywords.rb +66 -0
- data/lib/opal/parser/lexer.rb +1260 -0
- data/lib/opal/parser/parser_scope.rb +28 -0
- data/lib/opal/parser/sexp.rb +81 -0
- data/lib/opal/path_reader.rb +35 -0
- data/lib/opal/paths.rb +55 -0
- data/lib/opal/regexp_anchors.rb +5 -0
- data/lib/opal/source_map.rb +70 -0
- data/lib/opal/sprockets.rb +3 -0
- data/lib/opal/sprockets/cache_key_fix.rb +17 -0
- data/lib/opal/sprockets/environment.rb +31 -0
- data/lib/opal/sprockets/erb.rb +23 -0
- data/lib/opal/sprockets/path_reader.rb +36 -0
- data/lib/opal/sprockets/processor.rb +167 -0
- data/lib/opal/sprockets/server.rb +160 -0
- data/lib/opal/sprockets/source_map_header_patch.rb +41 -0
- data/lib/opal/sprockets/source_map_server.rb +115 -0
- data/lib/opal/util.rb +69 -0
- data/lib/opal/version.rb +5 -0
- data/lib/tilt/opal.rb +54 -0
- data/opal.gemspec +37 -0
- data/opal/README.md +6 -0
- data/opal/corelib/array.rb +2073 -0
- data/opal/corelib/array/inheritance.rb +127 -0
- data/opal/corelib/basic_object.rb +82 -0
- data/opal/corelib/boolean.rb +47 -0
- data/opal/corelib/class.rb +55 -0
- data/opal/corelib/comparable.rb +57 -0
- data/opal/corelib/complex.rb +3 -0
- data/opal/corelib/dir.rb +20 -0
- data/opal/corelib/enumerable.rb +1138 -0
- data/opal/corelib/enumerator.rb +426 -0
- data/opal/corelib/error.rb +77 -0
- data/opal/corelib/file.rb +59 -0
- data/opal/corelib/hash.rb +951 -0
- data/opal/corelib/helpers.rb +102 -0
- data/opal/corelib/io.rb +73 -0
- data/opal/corelib/kernel.rb +1124 -0
- data/opal/corelib/main.rb +7 -0
- data/opal/corelib/match_data.rb +128 -0
- data/opal/corelib/method.rb +62 -0
- data/opal/corelib/module.rb +553 -0
- data/opal/corelib/nil_class.rb +57 -0
- data/opal/corelib/numeric.rb +564 -0
- data/opal/corelib/proc.rb +105 -0
- data/opal/corelib/process.rb +27 -0
- data/opal/corelib/range.rb +116 -0
- data/opal/corelib/rational.rb +3 -0
- data/opal/corelib/regexp.rb +203 -0
- data/opal/corelib/runtime.js +1637 -0
- data/opal/corelib/string.rb +1762 -0
- data/opal/corelib/string/inheritance.rb +117 -0
- data/opal/corelib/struct.rb +159 -0
- data/opal/corelib/time.rb +746 -0
- data/opal/corelib/variables.rb +28 -0
- data/opal/opal.rb +33 -0
- data/spec/README.md +8 -0
- data/spec/filters/bugs/array.rb +77 -0
- data/spec/filters/bugs/basicobject.rb +33 -0
- data/spec/filters/bugs/class.rb +15 -0
- data/spec/filters/bugs/comparable.rb +4 -0
- data/spec/filters/bugs/date.rb +173 -0
- data/spec/filters/bugs/enumerable.rb +62 -0
- data/spec/filters/bugs/enumerator.rb +45 -0
- data/spec/filters/bugs/exception.rb +84 -0
- data/spec/filters/bugs/fixnum.rb +35 -0
- data/spec/filters/bugs/float.rb +100 -0
- data/spec/filters/bugs/hash.rb +17 -0
- data/spec/filters/bugs/integer.rb +63 -0
- data/spec/filters/bugs/kernel.rb +395 -0
- data/spec/filters/bugs/language.rb +246 -0
- data/spec/filters/bugs/math.rb +89 -0
- data/spec/filters/bugs/method.rb +5 -0
- data/spec/filters/bugs/module.rb +372 -0
- data/spec/filters/bugs/nil.rb +7 -0
- data/spec/filters/bugs/numeric.rb +123 -0
- data/spec/filters/bugs/proc.rb +65 -0
- data/spec/filters/bugs/range.rb +148 -0
- data/spec/filters/bugs/regexp.rb +252 -0
- data/spec/filters/bugs/set.rb +51 -0
- data/spec/filters/bugs/singleton.rb +6 -0
- data/spec/filters/bugs/string.rb +99 -0
- data/spec/filters/bugs/strscan.rb +106 -0
- data/spec/filters/bugs/struct.rb +22 -0
- data/spec/filters/bugs/time.rb +28 -0
- data/spec/filters/bugs/unboundmethod.rb +22 -0
- data/spec/filters/unsupported/array.rb +176 -0
- data/spec/filters/unsupported/basicobject.rb +12 -0
- data/spec/filters/unsupported/class.rb +4 -0
- data/spec/filters/unsupported/delegator.rb +5 -0
- data/spec/filters/unsupported/enumerable.rb +8 -0
- data/spec/filters/unsupported/enumerator.rb +13 -0
- data/spec/filters/unsupported/fixnum.rb +15 -0
- data/spec/filters/unsupported/float.rb +6 -0
- data/spec/filters/unsupported/hash.rb +55 -0
- data/spec/filters/unsupported/integer.rb +3 -0
- data/spec/filters/unsupported/kernel.rb +22 -0
- data/spec/filters/unsupported/language.rb +31 -0
- data/spec/filters/unsupported/matchdata.rb +33 -0
- data/spec/filters/unsupported/math.rb +3 -0
- data/spec/filters/unsupported/module.rb +36 -0
- data/spec/filters/unsupported/pathname.rb +3 -0
- data/spec/filters/unsupported/regexp.rb +94 -0
- data/spec/filters/unsupported/set.rb +4 -0
- data/spec/filters/unsupported/singleton.rb +6 -0
- data/spec/filters/unsupported/string.rb +538 -0
- data/spec/filters/unsupported/struct.rb +3 -0
- data/spec/filters/unsupported/time.rb +208 -0
- data/spec/lib/builder_processors_spec.rb +27 -0
- data/spec/lib/builder_spec.rb +72 -0
- data/spec/lib/cli_spec.rb +150 -0
- data/spec/lib/compiler/pre_processed_conditionals_spec.rb +87 -0
- data/spec/lib/compiler_spec.rb +131 -0
- data/spec/lib/dependency_resolver_spec.rb +40 -0
- data/spec/lib/fixtures/complex_sprockets.js.rb.erb +4 -0
- data/spec/lib/fixtures/file_with_directives.js +2 -0
- data/spec/lib/fixtures/jst_file.js.jst +1 -0
- data/spec/lib/fixtures/no_requires.rb +1 -0
- data/spec/lib/fixtures/opal_file.rb +2 -0
- data/spec/lib/fixtures/require_tree_test.rb +3 -0
- data/spec/lib/fixtures/required_file.js +1 -0
- data/spec/lib/fixtures/required_tree_test/required_file1.rb +1 -0
- data/spec/lib/fixtures/required_tree_test/required_file2.rb +1 -0
- data/spec/lib/fixtures/requires.rb +7 -0
- data/spec/lib/fixtures/source_map.rb +1 -0
- data/spec/lib/fixtures/source_map/subfolder/other_file.rb +1 -0
- data/spec/lib/fixtures/sprockets_file.js.rb +3 -0
- data/spec/lib/fixtures/sprockets_require_tree_test.rb +3 -0
- data/spec/lib/hike_path_finder_spec.rb +23 -0
- data/spec/lib/lexer_spec.rb +110 -0
- data/spec/lib/parser/alias_spec.rb +26 -0
- data/spec/lib/parser/and_spec.rb +13 -0
- data/spec/lib/parser/attrasgn_spec.rb +28 -0
- data/spec/lib/parser/begin_spec.rb +42 -0
- data/spec/lib/parser/block_spec.rb +12 -0
- data/spec/lib/parser/break_spec.rb +17 -0
- data/spec/lib/parser/call_spec.rb +165 -0
- data/spec/lib/parser/class_spec.rb +35 -0
- data/spec/lib/parser/comments_spec.rb +11 -0
- data/spec/lib/parser/def_spec.rb +80 -0
- data/spec/lib/parser/if_spec.rb +26 -0
- data/spec/lib/parser/iter_spec.rb +59 -0
- data/spec/lib/parser/lambda_spec.rb +64 -0
- data/spec/lib/parser/literal_spec.rb +118 -0
- data/spec/lib/parser/masgn_spec.rb +37 -0
- data/spec/lib/parser/module_spec.rb +27 -0
- data/spec/lib/parser/not_spec.rb +21 -0
- data/spec/lib/parser/op_asgn1_spec.rb +23 -0
- data/spec/lib/parser/op_asgn2_spec.rb +23 -0
- data/spec/lib/parser/or_spec.rb +13 -0
- data/spec/lib/parser/return_spec.rb +17 -0
- data/spec/lib/parser/sclass_spec.rb +21 -0
- data/spec/lib/parser/string_spec.rb +276 -0
- data/spec/lib/parser/super_spec.rb +20 -0
- data/spec/lib/parser/unary_spec.rb +48 -0
- data/spec/lib/parser/undef_spec.rb +15 -0
- data/spec/lib/parser/unless_spec.rb +13 -0
- data/spec/lib/parser/variables_spec.rb +92 -0
- data/spec/lib/parser/while_spec.rb +15 -0
- data/spec/lib/parser/yield_spec.rb +20 -0
- data/spec/lib/path_reader_spec.rb +36 -0
- data/spec/lib/shared/path_finder_shared.rb +19 -0
- data/spec/lib/shared/path_reader_shared.rb +31 -0
- data/spec/lib/spec_helper.rb +9 -0
- data/spec/lib/sprockets/erb_spec.rb +38 -0
- data/spec/lib/sprockets/path_reader_spec.rb +41 -0
- data/spec/lib/sprockets/processor_spec.rb +67 -0
- data/spec/lib/sprockets/server_spec.rb +102 -0
- data/spec/lib/tilt/opal_spec.rb +37 -0
- data/spec/opal/compiler/irb_spec.rb +44 -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/select_spec.rb +14 -0
- data/spec/opal/core/array/set_range_to_array_spec.rb +7 -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/date_spec.rb +177 -0
- data/spec/opal/core/enumerable/all_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/any_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/collect_break_spec.rb +13 -0
- data/spec/opal/core/enumerable/count_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/detect_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/drop_while_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/each_slice_break.rb +6 -0
- data/spec/opal/core/enumerable/each_with_index_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/each_with_object_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/find_all_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/find_index_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/grep_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/max_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/max_by_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/min_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/min_by_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/none_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/one_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/reduce_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/take_while_break_spec.rb +5 -0
- data/spec/opal/core/exception_spec.rb +13 -0
- data/spec/opal/core/fixtures/class.rb +124 -0
- data/spec/opal/core/fixtures/class_variables.rb +0 -0
- data/spec/opal/core/fixtures/constants.rb +33 -0
- data/spec/opal/core/fixtures/require_tree_files/file 1.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/file 2.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/file 3.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/file 4.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/file 5.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/nested/nested 1.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/nested/nested 2.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/other/other 1.rb +1 -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/has_value_spec.rb +13 -0
- data/spec/opal/core/hash/internals_spec.rb +332 -0
- data/spec/opal/core/kernel/Array_spec.rb +10 -0
- data/spec/opal/core/kernel/block_given_spec.rb +30 -0
- data/spec/opal/core/kernel/class_spec.rb +6 -0
- data/spec/opal/core/kernel/define_singleton_method_spec.rb +21 -0
- data/spec/opal/core/kernel/equal_value_spec.rb +12 -0
- data/spec/opal/core/kernel/extend_spec.rb +21 -0
- data/spec/opal/core/kernel/format_spec.rb +122 -0
- data/spec/opal/core/kernel/freeze_spec.rb +15 -0
- data/spec/opal/core/kernel/instance_eval_spec.rb +28 -0
- data/spec/opal/core/kernel/instance_variable_defined_spec.rb +15 -0
- data/spec/opal/core/kernel/instance_variable_get_spec.rb +14 -0
- data/spec/opal/core/kernel/instance_variable_set_spec.rb +10 -0
- data/spec/opal/core/kernel/loop_spec.rb +23 -0
- data/spec/opal/core/kernel/match_spec.rb +5 -0
- data/spec/opal/core/kernel/method_spec.rb +31 -0
- data/spec/opal/core/kernel/methods_spec.rb +25 -0
- data/spec/opal/core/kernel/nil_spec.rb +7 -0
- data/spec/opal/core/kernel/p_spec.rb +15 -0
- data/spec/opal/core/kernel/printf_spec.rb +11 -0
- data/spec/opal/core/kernel/proc_spec.rb +13 -0
- data/spec/opal/core/kernel/rand_spec.rb +23 -0
- data/spec/opal/core/kernel/require_tree_spec.rb +18 -0
- data/spec/opal/core/kernel/respond_to_spec.rb +41 -0
- data/spec/opal/core/kernel/send_spec.rb +56 -0
- data/spec/opal/core/kernel/sprintf_spec.rb +5 -0
- data/spec/opal/core/language/block_spec.rb +538 -0
- data/spec/opal/core/language/fixtures/array.rb +11 -0
- data/spec/opal/core/language/fixtures/block.rb +57 -0
- data/spec/opal/core/language/fixtures/break.rb +240 -0
- data/spec/opal/core/language/fixtures/ensure.rb +72 -0
- data/spec/opal/core/language/fixtures/literal_lambda.rb +7 -0
- data/spec/opal/core/language/fixtures/metaclass.rb +33 -0
- data/spec/opal/core/language/fixtures/module.rb +24 -0
- data/spec/opal/core/language/fixtures/next.rb +128 -0
- data/spec/opal/core/language/fixtures/return.rb +118 -0
- data/spec/opal/core/language/fixtures/send.rb +110 -0
- data/spec/opal/core/language/fixtures/send_1.9.rb +22 -0
- data/spec/opal/core/language/fixtures/super.rb +308 -0
- data/spec/opal/core/language/fixtures/variables.rb +58 -0
- data/spec/opal/core/language/fixtures/yield.rb +28 -0
- data/spec/opal/core/language/predefined_spec.rb +138 -0
- data/spec/opal/core/language/proc_spec.rb +263 -0
- data/spec/opal/core/language/regexp_spec.rb +20 -0
- data/spec/opal/core/language/send_spec.rb +225 -0
- data/spec/opal/core/language/string_spec.rb +44 -0
- data/spec/opal/core/language/variables_spec.rb +1366 -0
- data/spec/opal/core/language/versions/array_1.9.rb +39 -0
- data/spec/opal/core/language/versions/block_1.9.rb +0 -0
- data/spec/opal/core/language/versions/break_1.9.rb +0 -0
- data/spec/opal/core/language/versions/case_1.9.rb +20 -0
- data/spec/opal/core/language/versions/def_2_0_spec.rb +62 -0
- data/spec/opal/core/language/versions/hash_1.9.rb +18 -0
- data/spec/opal/core/language/versions/literal_lambda_1.9.rb +143 -0
- data/spec/opal/core/language/versions/not_1.9.rb +22 -0
- data/spec/opal/core/language/versions/send_1.9.rb +241 -0
- data/spec/opal/core/language/versions/symbol_1.9.rb +15 -0
- data/spec/opal/core/language/versions/variables_1.9.rb +8 -0
- data/spec/opal/core/language_spec.rb +23 -0
- data/spec/opal/core/method/to_proc_spec.rb +28 -0
- data/spec/opal/core/module/alias_method_spec.rb +28 -0
- data/spec/opal/core/module/ancestors_spec.rb +11 -0
- data/spec/opal/core/module/append_features_spec.rb +14 -0
- data/spec/opal/core/module/attr_accessor_spec.rb +26 -0
- data/spec/opal/core/module/const_defined_spec.rb +85 -0
- data/spec/opal/core/module/const_get_spec.rb +85 -0
- data/spec/opal/core/module/const_missing_spec.rb +17 -0
- data/spec/opal/core/module/const_set_spec.rb +64 -0
- data/spec/opal/core/module/constants_spec.rb +49 -0
- data/spec/opal/core/module/fixtures/classes.rb +434 -0
- data/spec/opal/core/module/method_defined_spec.rb +48 -0
- data/spec/opal/core/module/module_function_spec.rb +25 -0
- data/spec/opal/core/module/name_spec.rb +52 -0
- data/spec/opal/core/module/public_method_defined_spec.rb +18 -0
- data/spec/opal/core/module/remove_const_spec.rb +22 -0
- data/spec/opal/core/module/undef_method_spec.rb +66 -0
- data/spec/opal/core/numeric/bit_and_spec.rb +7 -0
- data/spec/opal/core/numeric/bit_or_spec.rb +8 -0
- data/spec/opal/core/numeric/bit_xor_spec.rb +6 -0
- data/spec/opal/core/numeric/ceil_spec.rb +8 -0
- data/spec/opal/core/numeric/chr_spec.rb +8 -0
- data/spec/opal/core/numeric/comparison_spec.rb +24 -0
- data/spec/opal/core/numeric/complement_spec.rb +8 -0
- data/spec/opal/core/numeric/divide_spec.rb +10 -0
- data/spec/opal/core/numeric/eql_spec.rb +9 -0
- data/spec/opal/core/numeric/exponent_spec.rb +33 -0
- data/spec/opal/core/numeric/floor_spec.rb +8 -0
- data/spec/opal/core/numeric/gt_spec.rb +11 -0
- data/spec/opal/core/numeric/gte_spec.rb +12 -0
- data/spec/opal/core/numeric/integer_spec.rb +9 -0
- data/spec/opal/core/numeric/left_shift_spec.rb +21 -0
- data/spec/opal/core/numeric/lt_spec.rb +11 -0
- data/spec/opal/core/numeric/lte_spec.rb +12 -0
- data/spec/opal/core/numeric/minus_spec.rb +8 -0
- data/spec/opal/core/numeric/modulo_spec.rb +19 -0
- data/spec/opal/core/numeric/multiply_spec.rb +9 -0
- data/spec/opal/core/numeric/next_spec.rb +9 -0
- data/spec/opal/core/numeric/ord_spec.rb +9 -0
- data/spec/opal/core/numeric/plus_spec.rb +8 -0
- data/spec/opal/core/numeric/pred_spec.rb +7 -0
- data/spec/opal/core/numeric/right_shift_spec.rb +25 -0
- data/spec/opal/core/numeric/step_spec.rb +11 -0
- data/spec/opal/core/numeric/succ_spec.rb +9 -0
- data/spec/opal/core/numeric/times_spec.rb +36 -0
- data/spec/opal/core/numeric/to_f_spec.rb +7 -0
- data/spec/opal/core/numeric/to_i_spec.rb +7 -0
- data/spec/opal/core/numeric/to_json_spec.rb +8 -0
- data/spec/opal/core/numeric/to_s_spec.rb +26 -0
- data/spec/opal/core/numeric/uminus_spec.rb +9 -0
- data/spec/opal/core/numeric/upto_spec.rb +19 -0
- data/spec/opal/core/numeric/zero_spec.rb +7 -0
- data/spec/opal/core/object_id_spec.rb +56 -0
- data/spec/opal/core/proc/call_spec.rb +21 -0
- data/spec/opal/core/proc/element_reference_spec.rb +21 -0
- data/spec/opal/core/proc/proc_tricks_spec.rb +7 -0
- data/spec/opal/core/runtime/begin_spec.rb +39 -0
- data/spec/opal/core/runtime/block_send_spec.rb +28 -0
- data/spec/opal/core/runtime/block_spec.rb +23 -0
- data/spec/opal/core/runtime/bridged_classes_spec.rb +111 -0
- data/spec/opal/core/runtime/constants_spec.rb +13 -0
- data/spec/opal/core/runtime/donate_spec.rb +53 -0
- data/spec/opal/core/runtime/eval_spec.rb +5 -0
- data/spec/opal/core/runtime/main_methods_spec.rb +27 -0
- data/spec/opal/core/runtime/method_missing_spec.rb +62 -0
- data/spec/opal/core/runtime/method_spec.rb +31 -0
- data/spec/opal/core/runtime/operator_call_spec.rb +13 -0
- data/spec/opal/core/runtime/paren_spec.rb +14 -0
- data/spec/opal/core/runtime/rescue_spec.rb +38 -0
- data/spec/opal/core/runtime/return_spec.rb +38 -0
- data/spec/opal/core/runtime/send_spec.rb +34 -0
- data/spec/opal/core/runtime/singleton_class_spec.rb +13 -0
- data/spec/opal/core/runtime/super_spec.rb +212 -0
- data/spec/opal/core/runtime/truthy_spec.rb +23 -0
- data/spec/opal/core/runtime/variables_spec.rb +20 -0
- data/spec/opal/core/runtime_spec.rb +58 -0
- data/spec/opal/core/source_map_spec.rb +15 -0
- data/spec/opal/core/string_spec.rb +11 -0
- data/spec/opal/stdlib/erb/erb_spec.rb +30 -0
- data/spec/opal/stdlib/erb/inline_block.opalerb +3 -0
- data/spec/opal/stdlib/erb/quoted.opalerb +1 -0
- data/spec/opal/stdlib/erb/simple.opalerb +1 -0
- data/spec/opal/stdlib/js_spec.rb +66 -0
- data/spec/opal/stdlib/json/ext_spec.rb +48 -0
- data/spec/opal/stdlib/json/parse_spec.rb +33 -0
- data/spec/opal/stdlib/native/alias_native_spec.rb +27 -0
- data/spec/opal/stdlib/native/each_spec.rb +13 -0
- data/spec/opal/stdlib/native/element_reference_spec.rb +16 -0
- data/spec/opal/stdlib/native/exposure_spec.rb +33 -0
- data/spec/opal/stdlib/native/ext_spec.rb +19 -0
- data/spec/opal/stdlib/native/initialize_spec.rb +17 -0
- data/spec/opal/stdlib/native/method_missing_spec.rb +51 -0
- data/spec/opal/stdlib/native/native_alias_spec.rb +19 -0
- data/spec/opal/stdlib/native/native_class_spec.rb +18 -0
- data/spec/opal/stdlib/native/native_module_spec.rb +13 -0
- data/spec/opal/stdlib/native/native_reader_spec.rb +22 -0
- data/spec/opal/stdlib/native/native_writer_spec.rb +30 -0
- data/spec/opal/stdlib/native/new_spec.rb +8 -0
- data/spec/opal/stdlib/promise/always_spec.rb +30 -0
- data/spec/opal/stdlib/promise/error_spec.rb +15 -0
- data/spec/opal/stdlib/promise/rescue_spec.rb +44 -0
- data/spec/opal/stdlib/promise/then_spec.rb +71 -0
- data/spec/opal/stdlib/promise/trace_spec.rb +52 -0
- data/spec/opal/stdlib/promise/value_spec.rb +15 -0
- data/spec/opal/stdlib/promise/when_spec.rb +34 -0
- data/spec/opal/stdlib/template/paths_spec.rb +10 -0
- data/spec/opal/stdlib/thread/mutex_spec.rb +40 -0
- data/spec/opal/stdlib/thread/thread_queue_spec.rb +32 -0
- data/spec/opal/stdlib/thread/thread_spec.rb +60 -0
- data/spec/rubyspecs +144 -0
- data/spec/spec_helper.rb +53 -0
- data/spec/support/mspec_rspec_adapter.rb +33 -0
- data/spec/support/parser_helpers.rb +37 -0
- data/stdlib/README.md +3 -0
- data/stdlib/base64.rb +152 -0
- data/stdlib/benchmark.rb +557 -0
- data/stdlib/buffer.rb +41 -0
- data/stdlib/buffer/array.rb +66 -0
- data/stdlib/buffer/view.rb +70 -0
- data/stdlib/date.rb +248 -0
- data/stdlib/delegate.rb +29 -0
- data/stdlib/dir.rb +1 -0
- data/stdlib/encoding.rb +170 -0
- data/stdlib/enumerator.rb +1 -0
- data/stdlib/erb.rb +16 -0
- data/stdlib/file.rb +1 -0
- data/stdlib/fileutils.rb +0 -0
- data/stdlib/forwardable.rb +71 -0
- data/stdlib/iconv.rb +0 -0
- data/stdlib/js.rb +56 -0
- data/stdlib/json.rb +190 -0
- data/stdlib/math.rb +370 -0
- data/stdlib/native.rb +530 -0
- data/stdlib/nodejs.rb +7 -0
- data/stdlib/nodejs/dir.rb +13 -0
- data/stdlib/nodejs/file.rb +98 -0
- data/stdlib/nodejs/fileutils.rb +26 -0
- data/stdlib/nodejs/io.rb +2 -0
- data/stdlib/nodejs/irb.rb +45 -0
- data/stdlib/nodejs/kernel.rb +33 -0
- data/stdlib/nodejs/node_modules/.bin/js-yaml +140 -0
- data/stdlib/nodejs/node_modules/glob/LICENSE +15 -0
- data/stdlib/nodejs/node_modules/glob/README.md +357 -0
- data/stdlib/nodejs/node_modules/glob/common.js +177 -0
- data/stdlib/nodejs/node_modules/glob/glob.js +649 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/.eslintrc +17 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/LICENSE +15 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/README.md +37 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/inflight.js +44 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/LICENSE +15 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/README.md +36 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json +52 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js +51 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/wrappy.js +33 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/package.json +61 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/test.js +97 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inherits/LICENSE +16 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inherits/README.md +42 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inherits/inherits.js +1 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inherits/inherits_browser.js +23 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inherits/package.json +51 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/inherits/test.js +25 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/.npmignore +1 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/.travis.yml +4 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/LICENSE +23 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/README.md +216 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/benchmark.js +15 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/browser.js +1181 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/minimatch.js +845 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore +2 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml +3 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md +121 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js +8 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js +191 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore +2 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml +4 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile +6 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md +80 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js +5 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js +38 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json +73 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js +56 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml +4 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE +18 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown +62 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js +6 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js +13 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json +83 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js +39 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json +75 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js +32 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt +1075 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt +182 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js +9 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js +10 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh +24 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js +15 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js +16 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js +10 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js +13 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js +7 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js +50 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/package.json +60 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/basic.js +399 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/brace-expand.js +45 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/defaults.js +274 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js +8 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/once/LICENSE +27 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/once/README.md +51 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/LICENSE +15 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/README.md +36 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/package.json +52 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js +51 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js +33 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/once/once.js +21 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/once/package.json +60 -0
- data/stdlib/nodejs/node_modules/glob/node_modules/once/test/once.js +23 -0
- data/stdlib/nodejs/node_modules/glob/package.json +72 -0
- data/stdlib/nodejs/node_modules/glob/sync.js +409 -0
- data/stdlib/nodejs/node_modules/js-yaml/HISTORY.md +277 -0
- data/stdlib/nodejs/node_modules/js-yaml/LICENSE +21 -0
- data/stdlib/nodejs/node_modules/js-yaml/README.md +288 -0
- data/stdlib/nodejs/node_modules/js-yaml/bin/js-yaml.js +140 -0
- data/stdlib/nodejs/node_modules/js-yaml/bower.json +23 -0
- data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.js +3666 -0
- data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.min.js +3 -0
- data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.js +102 -0
- data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.yml +18 -0
- data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.js +31 -0
- data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.json +22 -0
- data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.js +18 -0
- data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.yml +197 -0
- data/stdlib/nodejs/node_modules/js-yaml/index.js +7 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml.js +39 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/common.js +62 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/dumper.js +554 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/exception.js +25 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/loader.js +1581 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/mark.js +78 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema.js +103 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/core.js +18 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +25 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +28 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +17 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/json.js +25 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type.js +61 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/binary.js +133 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/bool.js +37 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/float.js +110 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/int.js +183 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/function.js +85 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +84 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +27 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/map.js +8 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/merge.js +12 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/null.js +36 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/omap.js +56 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/pairs.js +61 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/seq.js +8 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/set.js +33 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/str.js +8 -0
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +98 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/.bin/esparse +117 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/.bin/esvalidate +177 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/HISTORY.md +115 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/LICENSE +21 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +239 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/arguments.js +36 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/choice.js +22 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/constants.js +59 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/help.js +13 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/nargs.js +33 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/parents.js +28 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js +23 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js +49 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sum.js +35 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js +270 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/index.js +1 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action.js +146 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append.js +55 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js +47 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/count.js +40 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/help.js +48 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store.js +50 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js +43 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js +27 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js +26 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js +148 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/version.js +50 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action_container.js +481 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argparse.js +14 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js +50 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js +54 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js +75 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js +1168 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/const.js +18 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js +88 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js +798 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/namespace.js +77 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.npmignore +2 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.travis.yml +8 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown +825 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/bower.json +33 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json +11 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/foo.js +10 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/gulpfile.js +26 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js +673 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/libpeerconnection.log +0 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json +107 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE +23 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md +22 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json +69 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js +6 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js +1415 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/package.json +62 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/README.md +73 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esparse.js +117 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js +177 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/esprima.js +3908 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/package.json +69 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/compat.js +239 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/reflect.js +422 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/run.js +66 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/runner.js +387 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/test.js +20238 -0
- data/stdlib/nodejs/node_modules/js-yaml/package.json +83 -0
- data/stdlib/nodejs/package.json +6 -0
- data/stdlib/nodejs/require.rb +30 -0
- data/stdlib/nodejs/rubygems.rb +68 -0
- data/stdlib/nodejs/yaml.rb +11 -0
- data/stdlib/observer.rb +202 -0
- data/stdlib/opal-parser.rb +54 -0
- data/stdlib/opal-source-maps.rb +2 -0
- data/stdlib/ostruct.rb +69 -0
- data/stdlib/pathname.rb +55 -0
- data/stdlib/phantomjs.rb +3 -0
- data/stdlib/pp.rb +35 -0
- data/stdlib/promise.rb +427 -0
- data/stdlib/racc/parser.rb +215 -0
- data/stdlib/rbconfig.rb +18 -0
- data/stdlib/securerandom.rb +12 -0
- data/stdlib/set.rb +170 -0
- data/stdlib/singleton.rb +40 -0
- data/stdlib/source_map.rb +5 -0
- data/stdlib/source_map/map.rb +220 -0
- data/stdlib/source_map/mapping.rb +26 -0
- data/stdlib/source_map/offset.rb +88 -0
- data/stdlib/source_map/version.rb +3 -0
- data/stdlib/source_map/vlq.rb +98 -0
- data/stdlib/sourcemap.rb +1 -0
- data/stdlib/stringio.rb +181 -0
- data/stdlib/strscan.rb +166 -0
- data/stdlib/template.rb +46 -0
- data/stdlib/thread.rb +164 -0
- data/stdlib/time.rb +9 -0
- data/stdlib/yaml.rb +1 -0
- data/tasks/benchmarking.rake +88 -0
- data/tasks/building.rake +58 -0
- data/tasks/documenting.rake +37 -0
- data/tasks/github.rake +19 -0
- data/tasks/linting.rake +18 -0
- data/tasks/testing.rake +125 -0
- data/vendored-minitest/minitest.rb +780 -0
- data/vendored-minitest/minitest/assertions.rb +662 -0
- data/vendored-minitest/minitest/autorun.rb +12 -0
- data/vendored-minitest/minitest/benchmark.rb +426 -0
- data/vendored-minitest/minitest/expectations.rb +281 -0
- data/vendored-minitest/minitest/hell.rb +11 -0
- data/vendored-minitest/minitest/mock.rb +220 -0
- data/vendored-minitest/minitest/parallel.rb +65 -0
- data/vendored-minitest/minitest/pride.rb +4 -0
- data/vendored-minitest/minitest/pride_plugin.rb +142 -0
- data/vendored-minitest/minitest/spec.rb +310 -0
- data/vendored-minitest/minitest/test.rb +293 -0
- data/vendored-minitest/minitest/unit.rb +45 -0
- data/vendored-minitest/test/unit.rb +28 -0
- metadata +1058 -0
data/stdlib/time.rb
ADDED
data/stdlib/yaml.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'nodejs/yaml' if defined? NodeJS
|
@@ -0,0 +1,88 @@
|
|
1
|
+
namespace :bench do
|
2
|
+
directory "tmp/bench"
|
3
|
+
|
4
|
+
desc "Benchmark Opal"
|
5
|
+
task :opal => "tmp/bench" do |t, args|
|
6
|
+
files = Array(args[:files]) + args.extras
|
7
|
+
index = 0
|
8
|
+
begin
|
9
|
+
index += 1
|
10
|
+
report = "tmp/bench/Opal#{index}"
|
11
|
+
end while File.exist?(report)
|
12
|
+
sh "bundle exec opal benchmark/run.rb #{files.join(" ")} | tee #{report}"
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Benchmark Ruby"
|
16
|
+
task :ruby => "tmp/bench" do |t, args|
|
17
|
+
files = Array(args[:files]) + args.extras
|
18
|
+
index = 0
|
19
|
+
begin
|
20
|
+
index += 1
|
21
|
+
report = "tmp/bench/Ruby#{index}"
|
22
|
+
end while File.exist?(report)
|
23
|
+
sh "bundle exec ruby benchmark/run.rb #{files.join(" ")} | tee #{report}"
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "Delete all benchmark results"
|
27
|
+
task :clear do
|
28
|
+
sh "rm tmp/bench/*"
|
29
|
+
end
|
30
|
+
|
31
|
+
desc "Combined report of all benchmark results"
|
32
|
+
task :report do |t, args|
|
33
|
+
files = Array(args[:files]) + args.extras
|
34
|
+
if files.empty?
|
35
|
+
files = Dir["tmp/bench/*"]
|
36
|
+
else
|
37
|
+
files = files.map{|file| "tmp/bench/#{ file }"}
|
38
|
+
end
|
39
|
+
reports = []
|
40
|
+
benchmark_names = []
|
41
|
+
|
42
|
+
files.each do |file|
|
43
|
+
report_name = File.basename(file, File.extname(file))
|
44
|
+
report_results = {}
|
45
|
+
File.read(file).each_line do |line|
|
46
|
+
benchmark_name, benchmark_result = line.split(" ")
|
47
|
+
report_results[benchmark_name] = benchmark_result
|
48
|
+
benchmark_names << benchmark_name
|
49
|
+
end
|
50
|
+
reports << [report_name, report_results]
|
51
|
+
end
|
52
|
+
|
53
|
+
benchmark_names.uniq!
|
54
|
+
|
55
|
+
header = ["Benchmark"]
|
56
|
+
reports.each do |report_name, _|
|
57
|
+
header << report_name
|
58
|
+
end
|
59
|
+
|
60
|
+
table = [header]
|
61
|
+
benchmark_names.each do |benchmark_name|
|
62
|
+
row = [benchmark_name]
|
63
|
+
reports.each do |_, report_results|
|
64
|
+
if report_results[benchmark_name]
|
65
|
+
row << format("%0.3f", report_results[benchmark_name])
|
66
|
+
else
|
67
|
+
row << ""
|
68
|
+
end
|
69
|
+
end
|
70
|
+
table << row
|
71
|
+
end
|
72
|
+
|
73
|
+
fmt = ""
|
74
|
+
table.transpose.each_with_index do |column, index|
|
75
|
+
column_width = column.max_by{|string| string.length}.length
|
76
|
+
if index.zero?
|
77
|
+
fmt << "%-#{ column_width }s"
|
78
|
+
else
|
79
|
+
fmt << " %#{ column_width }s"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
fmt << "\n"
|
83
|
+
|
84
|
+
table.each do |row|
|
85
|
+
printf fmt, *row
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/tasks/building.rake
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'opal/version'
|
2
|
+
|
3
|
+
desc <<-DESC
|
4
|
+
Build *corelib* and *stdlib* to "build/"
|
5
|
+
|
6
|
+
You can restrict the file list with the FILES env var (comma separated)
|
7
|
+
and the destination dir with the DIR env var.
|
8
|
+
|
9
|
+
Example: rake dist DIR=/tmp/foo FILES='opal.rb,base64.rb'
|
10
|
+
Example: rake dist DIR=cdn/opal/#{Opal::VERSION}
|
11
|
+
Example: rake dist DIR=cdn/opal/master
|
12
|
+
DESC
|
13
|
+
task :dist do
|
14
|
+
require 'opal/util'
|
15
|
+
require 'opal/sprockets/environment'
|
16
|
+
|
17
|
+
Opal::Processor.arity_check_enabled = false
|
18
|
+
Opal::Processor.const_missing_enabled = false
|
19
|
+
Opal::Processor.dynamic_require_severity = :warning
|
20
|
+
env = Opal::Environment.new
|
21
|
+
|
22
|
+
build_dir = ENV['DIR'] || 'build'
|
23
|
+
files = ENV['FILES'] ? ENV['FILES'].split(',') :
|
24
|
+
Dir['{opal,stdlib}/*.rb'].map { |lib| File.basename(lib, '.rb') }
|
25
|
+
|
26
|
+
Dir.mkdir build_dir unless File.directory? build_dir
|
27
|
+
width = files.map(&:size).max
|
28
|
+
|
29
|
+
files.each do |lib|
|
30
|
+
print "* building #{lib}...".ljust(width+'* building ... '.size)
|
31
|
+
$stdout.flush
|
32
|
+
|
33
|
+
src = env[lib].to_s
|
34
|
+
min = Opal::Util.uglify src
|
35
|
+
gzp = Opal::Util.gzip min
|
36
|
+
|
37
|
+
File.open("#{build_dir}/#{lib}.js", 'w+') { |f| f << src }
|
38
|
+
File.open("#{build_dir}/#{lib}.min.js", 'w+') { |f| f << min } if min
|
39
|
+
File.open("#{build_dir}/#{lib}.min.js.gz", 'w+') { |f| f << gzp } if gzp
|
40
|
+
|
41
|
+
print "done. ("
|
42
|
+
print "development: #{('%.2f' % (src.size/1000.0)).rjust(6)}KB"
|
43
|
+
print ", minified: #{('%.2f' % (min.size/1000.0)).rjust(6)}KB" if min
|
44
|
+
print ", gzipped: #{('%.2f' % (gzp.size/1000.0)).rjust(6)}KB" if gzp
|
45
|
+
puts ")."
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
desc 'Rebuild grammar.rb for opal parser'
|
50
|
+
task :racc do
|
51
|
+
%x(racc -l lib/opal/parser/grammar.y -o lib/opal/parser/grammar.rb)
|
52
|
+
end
|
53
|
+
|
54
|
+
desc 'Remove any generated file.'
|
55
|
+
task :clobber do
|
56
|
+
rm_r './build'
|
57
|
+
end
|
58
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
namespace :doc do
|
2
|
+
doc_repo = Pathname(ENV['DOC_REPO'] || 'gh-pages')
|
3
|
+
doc_base = doc_repo.join('doc')
|
4
|
+
current_git_release = -> { `git rev-parse --abbrev-ref HEAD`.chomp }
|
5
|
+
template_option = "--template opal --template-path #{doc_repo.join('yard-templates')}"
|
6
|
+
|
7
|
+
directory doc_repo.to_s do
|
8
|
+
remote = ENV['DOC_REPO_REMOTE'] || '.'
|
9
|
+
sh 'git', 'clone', '-b', 'gh-pages', '--', remote, doc_repo.to_s
|
10
|
+
end
|
11
|
+
|
12
|
+
task :corelib => doc_repo.to_s do
|
13
|
+
git = current_git_release.call
|
14
|
+
name = 'corelib'
|
15
|
+
glob = 'opal/**/*.rb'
|
16
|
+
|
17
|
+
command = "doxx --template #{doc_repo.join('doxx-templates/opal.jade')} "\
|
18
|
+
"--source opal/corelib --target #{doc_base}/#{git}/#{name} "\
|
19
|
+
"--title \"Opal runtime.js Documentation\" --readme opal/README.md"
|
20
|
+
puts command; system command or $stderr.puts "Please install doxx with: npm install"
|
21
|
+
|
22
|
+
command = "yard doc #{glob} #{template_option} "\
|
23
|
+
"--readme opal/README.md -o #{doc_base}/#{git}/#{name}"
|
24
|
+
puts command; system command
|
25
|
+
end
|
26
|
+
|
27
|
+
task :stdlib => doc_repo do
|
28
|
+
git = current_git_release.call
|
29
|
+
name = 'stdlib'
|
30
|
+
glob = '{stdlib/**/*,opal/compiler,opal/erb,opal/version}.rb'
|
31
|
+
command = "yard doc #{glob} #{template_option} "\
|
32
|
+
"--readme stdlib/README.md -o gh-pages/doc/#{git}/#{name}"
|
33
|
+
puts command; system command
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
task :doc => ['doc:corelib', 'doc:stdlib']
|
data/tasks/github.rake
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
namespace :github do
|
2
|
+
desc "Upload assets to github"
|
3
|
+
task :upload_assets do
|
4
|
+
require 'octokit'
|
5
|
+
# https://github.com/octokit/octokit.rb#oauth-access-tokens
|
6
|
+
token_path = '.github_access_token'
|
7
|
+
File.exist?(token_path) or raise ArgumentError, "Please create a personal access token (https://github.com/settings/tokens/new) and paste it inside #{token_path.inspect}"
|
8
|
+
token = File.read(token_path).strip
|
9
|
+
client = Octokit::Client.new :access_token => token
|
10
|
+
tag_name = ENV['TAG'] || raise(ArgumentError, 'missing the TAG env variable (e.g. TAG=v0.4.4)')
|
11
|
+
release = client.releases('opal/opal').find{|r| p(r.id); p(r).tag_name == tag_name}
|
12
|
+
release_url = "https://api.github.com/repos/opal/opal/releases/#{release.id}"
|
13
|
+
%w[opal opal-parser].each do |name|
|
14
|
+
client.upload_asset release_url, "build/#{name}.js", :content_type => 'application/x-javascript'
|
15
|
+
client.upload_asset release_url, "build/#{name}.min.js", :content_type => 'application/x-javascript'
|
16
|
+
client.upload_asset release_url, "build/#{name}.min.js.gz", :content_type => 'application/octet-stream'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/tasks/linting.rake
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
directory 'tmp/lint'
|
2
|
+
|
3
|
+
desc "Build *corelib* and *stdlib* and lint the result"
|
4
|
+
task :lint => 'tmp/lint' do
|
5
|
+
require 'opal/sprockets/environment'
|
6
|
+
|
7
|
+
env = Opal::Environment.new
|
8
|
+
|
9
|
+
files = Dir['{opal,stdlib}/*.rb'].map { |lib| File.basename(lib, '.rb') }
|
10
|
+
|
11
|
+
files.each do |lib|
|
12
|
+
next if lib == 'minitest'
|
13
|
+
File.binwrite("tmp/lint/#{lib}.js", env[lib].to_s)
|
14
|
+
end
|
15
|
+
|
16
|
+
sh "jshint --verbose tmp/lint/*.js"
|
17
|
+
end
|
18
|
+
|
data/tasks/testing.rake
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'rspec/core/rake_task'
|
2
|
+
RSpec::Core::RakeTask.new(:rspec) do |t|
|
3
|
+
t.pattern = 'spec/lib/**/*_spec.rb'
|
4
|
+
end
|
5
|
+
|
6
|
+
require 'mspec/opal/rake_task'
|
7
|
+
MSpec::Opal::RakeTask.new(:mspec_phantom) do |config|
|
8
|
+
config.pattern = ENV['MSPEC_PATTERN'] if ENV['MSPEC_PATTERN']
|
9
|
+
config.basedir = ENV['MSPEC_BASEDIR'] if ENV['MSPEC_BASEDIR']
|
10
|
+
end
|
11
|
+
|
12
|
+
desc <<-DESC
|
13
|
+
Run the MSpec test suite on node
|
14
|
+
|
15
|
+
Use PATTERN and env var to manually set the glob for specs:
|
16
|
+
|
17
|
+
# Will run all specs matching the specified pattern.
|
18
|
+
# (Note: the rubyspecs filters will still apply)
|
19
|
+
rake mspec_node PATTERN=spec/rubyspec/core/module/class_variable*
|
20
|
+
DESC
|
21
|
+
task :mspec_node do
|
22
|
+
excepting = []
|
23
|
+
rubyspecs = File.read('spec/rubyspecs').lines.reject do |l|
|
24
|
+
l.strip!; l.start_with?('#') || l.empty? || (l.start_with?('!') && excepting.push(l.sub('!', 'spec/') + '.rb'))
|
25
|
+
end.flat_map do |path|
|
26
|
+
path = "spec/#{path}"
|
27
|
+
File.directory?(path) ? Dir[path+'/*.rb'] : "#{path}.rb"
|
28
|
+
end - excepting
|
29
|
+
|
30
|
+
filters = Dir['spec/filters/**/*.rb']
|
31
|
+
shared = Dir['spec/{opal,lib/parser}/**/*_spec.rb'] + ['spec/lib/lexer_spec.rb']
|
32
|
+
|
33
|
+
specs = []
|
34
|
+
add_specs = ->(name, new_specs) { p [new_specs.size, name]; specs + new_specs}
|
35
|
+
|
36
|
+
specs = add_specs.(:filters, filters)
|
37
|
+
pattern = ENV['PATTERN']
|
38
|
+
whitelist_pattern = !!ENV['RUBYSPECS']
|
39
|
+
|
40
|
+
if pattern
|
41
|
+
custom = Dir[pattern]
|
42
|
+
custom &= rubyspecs if whitelist_pattern
|
43
|
+
specs = add_specs.(:custom, custom)
|
44
|
+
else
|
45
|
+
specs = add_specs.(:shared, shared)
|
46
|
+
specs = add_specs.(:rubyspecs, rubyspecs)
|
47
|
+
end
|
48
|
+
|
49
|
+
requires = specs.map{|s| "require '#{s.sub(/^spec\//,'')}'"}
|
50
|
+
include_paths = '-Ispec -Ilib'
|
51
|
+
|
52
|
+
filename = 'tmp/mspec_node.rb'
|
53
|
+
js_filename = 'tmp/mspec_node.js'
|
54
|
+
mkdir_p File.dirname(filename)
|
55
|
+
|
56
|
+
if ENV['BM']
|
57
|
+
mkdir_p 'tmp/bench'
|
58
|
+
index = 0
|
59
|
+
begin
|
60
|
+
index += 1
|
61
|
+
bm_filepath = "tmp/bench/Spec#{index}"
|
62
|
+
end while File.exist?(bm_filepath)
|
63
|
+
enter_benchmarking_mode = "OSpecRunner.main.bm!(#{Integer(ENV['BM'])}, '#{bm_filepath}')"
|
64
|
+
end
|
65
|
+
|
66
|
+
File.write filename, <<-RUBY
|
67
|
+
require 'spec_helper'
|
68
|
+
#{enter_benchmarking_mode}
|
69
|
+
#{requires.join("\n ")}
|
70
|
+
OSpecRunner.main.did_finish
|
71
|
+
RUBY
|
72
|
+
|
73
|
+
stubs = '-smspec/helpers/tmp -smspec/helpers/environment -smspec/guards/block_device -smspec/guards/endian'
|
74
|
+
|
75
|
+
sh "ruby -rbundler/setup -rmspec/opal/special_calls "\
|
76
|
+
"bin/opal -gmspec #{include_paths} #{stubs} -rnodejs/io -rnodejs/kernel -Dwarning -A #{filename} -c > #{js_filename}"
|
77
|
+
sh "jshint --verbose #{js_filename}"
|
78
|
+
sh "NODE_PATH=stdlib/nodejs/node_modules node #{js_filename}"
|
79
|
+
|
80
|
+
if bm_filepath
|
81
|
+
puts "Benchmark results have been written to #{bm_filepath}"
|
82
|
+
puts "To view the results, run bundle exec rake bench:report"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
task :cruby_tests do
|
87
|
+
if ENV.key? 'FILES'
|
88
|
+
files = Dir[ENV['FILES'] || 'test/test_*.rb']
|
89
|
+
include_paths = '-Itest -I. -Itmp -Ilib'
|
90
|
+
else
|
91
|
+
include_paths = '-Itest/cruby/test'
|
92
|
+
test_dir = Pathname("#{__dir__}/../test/cruby/test")
|
93
|
+
files = %w[
|
94
|
+
benchmark/test_benchmark.rb
|
95
|
+
ruby/test_call.rb
|
96
|
+
].flat_map do |path|
|
97
|
+
if path.end_with?('.rb')
|
98
|
+
path
|
99
|
+
else
|
100
|
+
glob = test_dir.join(path+"/test_*.rb").to_s
|
101
|
+
size = test_dir.to_s.size
|
102
|
+
Dir[glob].map { |file| file[size+1..-1] }
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
include_paths << ' -Ivendored-minitest'
|
107
|
+
|
108
|
+
requires = files.map{|f| "require '#{f}'"}
|
109
|
+
filename = 'tmp/cruby_tests.rb'
|
110
|
+
js_filename = 'tmp/cruby_tests.js'
|
111
|
+
mkdir_p File.dirname(filename)
|
112
|
+
File.write filename, requires.join("\n")
|
113
|
+
|
114
|
+
stubs = "-soptparse -sio/console -stimeout -smutex_m -srubygems -stempfile -smonitor"
|
115
|
+
|
116
|
+
puts "== Running: #{files.join ", "}"
|
117
|
+
|
118
|
+
sh "ruby -rbundler/setup "\
|
119
|
+
"bin/opal #{include_paths} #{stubs} -rnodejs -Dwarning -A #{filename} -c > #{js_filename}"
|
120
|
+
sh "NODE_PATH=stdlib/nodejs/node_modules node #{js_filename}"
|
121
|
+
end
|
122
|
+
|
123
|
+
task :mspec => [:mspec_node, :mspec_phantom]
|
124
|
+
task :minitest => [:cruby_tests]
|
125
|
+
task :test_all => [:rspec, :mspec, :minitest]
|
@@ -0,0 +1,780 @@
|
|
1
|
+
require "optparse"
|
2
|
+
require "thread"
|
3
|
+
require "mutex_m"
|
4
|
+
require "minitest/parallel"
|
5
|
+
|
6
|
+
##
|
7
|
+
# :include: README.txt
|
8
|
+
|
9
|
+
module Minitest
|
10
|
+
VERSION = "5.5.1" # :nodoc:
|
11
|
+
ENCS = "".respond_to? :encoding # :nodoc:
|
12
|
+
|
13
|
+
@@installed_at_exit ||= false
|
14
|
+
@@after_run = []
|
15
|
+
@extensions = []
|
16
|
+
|
17
|
+
mc = (class << self; self; end)
|
18
|
+
|
19
|
+
##
|
20
|
+
# Parallel test executor
|
21
|
+
|
22
|
+
mc.send :attr_accessor, :parallel_executor
|
23
|
+
self.parallel_executor = Parallel::Executor.new((ENV['N'] || 2).to_i)
|
24
|
+
|
25
|
+
##
|
26
|
+
# Filter object for backtraces.
|
27
|
+
|
28
|
+
mc.send :attr_accessor, :backtrace_filter
|
29
|
+
|
30
|
+
##
|
31
|
+
# Reporter object to be used for all runs.
|
32
|
+
#
|
33
|
+
# NOTE: This accessor is only available during setup, not during runs.
|
34
|
+
|
35
|
+
mc.send :attr_accessor, :reporter
|
36
|
+
|
37
|
+
##
|
38
|
+
# Names of known extension plugins.
|
39
|
+
|
40
|
+
mc.send :attr_accessor, :extensions
|
41
|
+
|
42
|
+
##
|
43
|
+
# Registers Minitest to run at process exit
|
44
|
+
|
45
|
+
def self.autorun
|
46
|
+
at_exit {
|
47
|
+
next if $! and not ($!.kind_of? SystemExit and $!.success?)
|
48
|
+
|
49
|
+
exit_code = nil
|
50
|
+
|
51
|
+
at_exit {
|
52
|
+
@@after_run.reverse_each(&:call)
|
53
|
+
exit exit_code || false
|
54
|
+
}
|
55
|
+
|
56
|
+
exit_code = Minitest.run ARGV
|
57
|
+
} unless @@installed_at_exit
|
58
|
+
@@installed_at_exit = true
|
59
|
+
end
|
60
|
+
|
61
|
+
##
|
62
|
+
# A simple hook allowing you to run a block of code after everything
|
63
|
+
# is done running. Eg:
|
64
|
+
#
|
65
|
+
# Minitest.after_run { p $debugging_info }
|
66
|
+
|
67
|
+
def self.after_run &block
|
68
|
+
@@after_run << block
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.init_plugins options # :nodoc:
|
72
|
+
self.extensions.each do |name|
|
73
|
+
msg = "plugin_#{name}_init"
|
74
|
+
send msg, options if self.respond_to? msg
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.load_plugins # :nodoc:
|
79
|
+
# return unless self.extensions.empty?
|
80
|
+
#
|
81
|
+
# seen = {}
|
82
|
+
#
|
83
|
+
# require "rubygems" unless defined? Gem
|
84
|
+
#
|
85
|
+
# Gem.find_files("minitest/*_plugin.rb").each do |plugin_path|
|
86
|
+
# name = File.basename plugin_path, "_plugin.rb"
|
87
|
+
#
|
88
|
+
# next if seen[name]
|
89
|
+
# seen[name] = true
|
90
|
+
#
|
91
|
+
# require plugin_path
|
92
|
+
# self.extensions << name
|
93
|
+
# end
|
94
|
+
end
|
95
|
+
|
96
|
+
##
|
97
|
+
# This is the top-level run method. Everything starts from here. It
|
98
|
+
# tells each Runnable sub-class to run, and each of those are
|
99
|
+
# responsible for doing whatever they do.
|
100
|
+
#
|
101
|
+
# The overall structure of a run looks like this:
|
102
|
+
#
|
103
|
+
# Minitest.autorun
|
104
|
+
# Minitest.run(args)
|
105
|
+
# Minitest.__run(reporter, options)
|
106
|
+
# Runnable.runnables.each
|
107
|
+
# runnable.run(reporter, options)
|
108
|
+
# self.runnable_methods.each
|
109
|
+
# self.run_one_method(self, runnable_method, reporter)
|
110
|
+
# Minitest.run_one_method(klass, runnable_method, reporter)
|
111
|
+
# klass.new(runnable_method).run
|
112
|
+
|
113
|
+
def self.run args = []
|
114
|
+
self.load_plugins
|
115
|
+
|
116
|
+
options = process_args args
|
117
|
+
|
118
|
+
reporter = CompositeReporter.new
|
119
|
+
reporter << SummaryReporter.new(options[:io], options)
|
120
|
+
reporter << ProgressReporter.new(options[:io], options)
|
121
|
+
|
122
|
+
self.reporter = reporter # this makes it available to plugins
|
123
|
+
self.init_plugins options
|
124
|
+
self.reporter = nil # runnables shouldn't depend on the reporter, ever
|
125
|
+
|
126
|
+
reporter.start
|
127
|
+
__run reporter, options
|
128
|
+
self.parallel_executor.shutdown
|
129
|
+
reporter.report
|
130
|
+
|
131
|
+
reporter.passed?
|
132
|
+
end
|
133
|
+
|
134
|
+
##
|
135
|
+
# Internal run method. Responsible for telling all Runnable
|
136
|
+
# sub-classes to run.
|
137
|
+
#
|
138
|
+
# NOTE: this method is redefined in parallel_each.rb, which is
|
139
|
+
# loaded if a Runnable calls parallelize_me!.
|
140
|
+
|
141
|
+
def self.__run reporter, options
|
142
|
+
suites = Runnable.runnables.shuffle
|
143
|
+
parallel, serial = suites.partition { |s| s.test_order == :parallel }
|
144
|
+
|
145
|
+
# If we run the parallel tests before the serial tests, the parallel tests
|
146
|
+
# could run in parallel with the serial tests. This would be bad because
|
147
|
+
# the serial tests won't lock around Reporter#record. Run the serial tests
|
148
|
+
# first, so that after they complete, the parallel tests will lock when
|
149
|
+
# recording results.
|
150
|
+
serial.map { |suite| suite.run reporter, options } +
|
151
|
+
parallel.map { |suite| suite.run reporter, options }
|
152
|
+
end
|
153
|
+
|
154
|
+
def self.process_args args = [] # :nodoc:
|
155
|
+
options = {
|
156
|
+
:io => $stdout,
|
157
|
+
}
|
158
|
+
orig_args = args.dup
|
159
|
+
|
160
|
+
OptionParser.new do |opts|
|
161
|
+
opts.banner = "minitest options:"
|
162
|
+
opts.version = Minitest::VERSION
|
163
|
+
|
164
|
+
opts.on "-h", "--help", "Display this help." do
|
165
|
+
puts opts
|
166
|
+
exit
|
167
|
+
end
|
168
|
+
|
169
|
+
desc = "Sets random seed. Also via env. Eg: SEED=n rake"
|
170
|
+
opts.on "-s", "--seed SEED", Integer, desc do |m|
|
171
|
+
options[:seed] = m.to_i
|
172
|
+
end
|
173
|
+
|
174
|
+
opts.on "-v", "--verbose", "Verbose. Show progress processing files." do
|
175
|
+
options[:verbose] = true
|
176
|
+
end
|
177
|
+
|
178
|
+
opts.on "-n", "--name PATTERN","Filter run on /pattern/ or string." do |a|
|
179
|
+
options[:filter] = a
|
180
|
+
end
|
181
|
+
|
182
|
+
unless extensions.empty?
|
183
|
+
opts.separator ""
|
184
|
+
opts.separator "Known extensions: #{extensions.join(', ')}"
|
185
|
+
|
186
|
+
extensions.each do |meth|
|
187
|
+
msg = "plugin_#{meth}_options"
|
188
|
+
send msg, opts, options if self.respond_to?(msg)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
begin
|
193
|
+
opts.parse! args
|
194
|
+
rescue OptionParser::InvalidOption => e
|
195
|
+
puts
|
196
|
+
puts e
|
197
|
+
puts
|
198
|
+
puts opts
|
199
|
+
exit 1
|
200
|
+
end
|
201
|
+
|
202
|
+
orig_args -= args
|
203
|
+
end unless args.empty?
|
204
|
+
|
205
|
+
unless options[:seed] then
|
206
|
+
srand
|
207
|
+
options[:seed] = (ENV["SEED"] || srand).to_i % 0xFFFF
|
208
|
+
orig_args << "--seed" << options[:seed].to_s
|
209
|
+
end
|
210
|
+
|
211
|
+
srand options[:seed]
|
212
|
+
|
213
|
+
options[:args] = orig_args.map { |s|
|
214
|
+
s =~ /[\s|&<>$()]/ ? s.inspect : s
|
215
|
+
}.join " "
|
216
|
+
|
217
|
+
options
|
218
|
+
end
|
219
|
+
|
220
|
+
def self.filter_backtrace bt # :nodoc:
|
221
|
+
backtrace_filter.filter bt
|
222
|
+
end
|
223
|
+
|
224
|
+
##
|
225
|
+
# Represents anything "runnable", like Test, Spec, Benchmark, or
|
226
|
+
# whatever you can dream up.
|
227
|
+
#
|
228
|
+
# Subclasses of this are automatically registered and available in
|
229
|
+
# Runnable.runnables.
|
230
|
+
|
231
|
+
class Runnable
|
232
|
+
##
|
233
|
+
# Number of assertions executed in this run.
|
234
|
+
|
235
|
+
attr_accessor :assertions
|
236
|
+
|
237
|
+
##
|
238
|
+
# An assertion raised during the run, if any.
|
239
|
+
|
240
|
+
attr_accessor :failures
|
241
|
+
|
242
|
+
##
|
243
|
+
# Name of the run.
|
244
|
+
|
245
|
+
def name
|
246
|
+
@NAME
|
247
|
+
end
|
248
|
+
|
249
|
+
##
|
250
|
+
# Set the name of the run.
|
251
|
+
|
252
|
+
def name= o
|
253
|
+
@NAME = o
|
254
|
+
end
|
255
|
+
|
256
|
+
def self.inherited klass # :nodoc:
|
257
|
+
self.runnables << klass
|
258
|
+
super
|
259
|
+
end
|
260
|
+
|
261
|
+
##
|
262
|
+
# Returns all instance methods matching the pattern +re+.
|
263
|
+
|
264
|
+
def self.methods_matching re
|
265
|
+
public_instance_methods(true).grep(re).map(&:to_s)
|
266
|
+
end
|
267
|
+
|
268
|
+
def self.reset # :nodoc:
|
269
|
+
@@runnables = []
|
270
|
+
end
|
271
|
+
|
272
|
+
reset
|
273
|
+
|
274
|
+
##
|
275
|
+
# Responsible for running all runnable methods in a given class,
|
276
|
+
# each in its own instance. Each instance is passed to the
|
277
|
+
# reporter to record.
|
278
|
+
|
279
|
+
def self.run reporter, options = {}
|
280
|
+
filter = options[:filter] || '/./'
|
281
|
+
filter = Regexp.new $1 if filter =~ /\/(.*)\//
|
282
|
+
|
283
|
+
filtered_methods = self.runnable_methods.find_all { |m|
|
284
|
+
filter === m || filter === "#{self}##{m}"
|
285
|
+
}
|
286
|
+
|
287
|
+
with_info_handler reporter do
|
288
|
+
filtered_methods.each do |method_name|
|
289
|
+
run_one_method self, method_name, reporter
|
290
|
+
end
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
##
|
295
|
+
# Runs a single method and has the reporter record the result.
|
296
|
+
# This was considered internal API but is factored out of run so
|
297
|
+
# that subclasses can specialize the running of an individual
|
298
|
+
# test. See Minitest::ParallelTest::ClassMethods for an example.
|
299
|
+
|
300
|
+
def self.run_one_method klass, method_name, reporter
|
301
|
+
reporter.record Minitest.run_one_method(klass, method_name)
|
302
|
+
end
|
303
|
+
|
304
|
+
def self.with_info_handler reporter, &block # :nodoc:
|
305
|
+
handler = lambda do
|
306
|
+
unless reporter.passed? then
|
307
|
+
warn "Current results:"
|
308
|
+
warn ""
|
309
|
+
warn reporter.reporters.first
|
310
|
+
warn ""
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
on_signal "INFO", handler, &block
|
315
|
+
end
|
316
|
+
|
317
|
+
SIGNALS = {} # Signal.list # :nodoc:
|
318
|
+
|
319
|
+
def self.on_signal name, action # :nodoc:
|
320
|
+
supported = SIGNALS[name]
|
321
|
+
|
322
|
+
old_trap = trap name do
|
323
|
+
old_trap.call if old_trap.respond_to? :call
|
324
|
+
action.call
|
325
|
+
end if supported
|
326
|
+
|
327
|
+
yield
|
328
|
+
ensure
|
329
|
+
trap name, old_trap if supported
|
330
|
+
end
|
331
|
+
|
332
|
+
##
|
333
|
+
# Each subclass of Runnable is responsible for overriding this
|
334
|
+
# method to return all runnable methods. See #methods_matching.
|
335
|
+
|
336
|
+
def self.runnable_methods
|
337
|
+
raise NotImplementedError, "subclass responsibility"
|
338
|
+
end
|
339
|
+
|
340
|
+
##
|
341
|
+
# Returns all subclasses of Runnable.
|
342
|
+
|
343
|
+
def self.runnables
|
344
|
+
@@runnables
|
345
|
+
end
|
346
|
+
|
347
|
+
def marshal_dump # :nodoc:
|
348
|
+
[self.name, self.failures, self.assertions]
|
349
|
+
end
|
350
|
+
|
351
|
+
def marshal_load ary # :nodoc:
|
352
|
+
self.name, self.failures, self.assertions = ary
|
353
|
+
end
|
354
|
+
|
355
|
+
def failure # :nodoc:
|
356
|
+
self.failures.first
|
357
|
+
end
|
358
|
+
|
359
|
+
def initialize name # :nodoc:
|
360
|
+
self.name = name
|
361
|
+
self.failures = []
|
362
|
+
self.assertions = 0
|
363
|
+
end
|
364
|
+
|
365
|
+
##
|
366
|
+
# Runs a single method. Needs to return self.
|
367
|
+
|
368
|
+
def run
|
369
|
+
raise NotImplementedError, "subclass responsibility"
|
370
|
+
end
|
371
|
+
|
372
|
+
##
|
373
|
+
# Did this run pass?
|
374
|
+
#
|
375
|
+
# Note: skipped runs are not considered passing, but they don't
|
376
|
+
# cause the process to exit non-zero.
|
377
|
+
|
378
|
+
def passed?
|
379
|
+
raise NotImplementedError, "subclass responsibility"
|
380
|
+
end
|
381
|
+
|
382
|
+
##
|
383
|
+
# Returns a single character string to print based on the result
|
384
|
+
# of the run. Eg ".", "F", or "E".
|
385
|
+
|
386
|
+
def result_code
|
387
|
+
raise NotImplementedError, "subclass responsibility"
|
388
|
+
end
|
389
|
+
|
390
|
+
##
|
391
|
+
# Was this run skipped? See #passed? for more information.
|
392
|
+
|
393
|
+
def skipped?
|
394
|
+
raise NotImplementedError, "subclass responsibility"
|
395
|
+
end
|
396
|
+
end
|
397
|
+
|
398
|
+
##
|
399
|
+
# Defines the API for Reporters. Subclass this and override whatever
|
400
|
+
# you want. Go nuts.
|
401
|
+
|
402
|
+
class AbstractReporter
|
403
|
+
# include Mutex_m
|
404
|
+
|
405
|
+
##
|
406
|
+
# Starts reporting on the run.
|
407
|
+
|
408
|
+
def start
|
409
|
+
end
|
410
|
+
|
411
|
+
##
|
412
|
+
# Record a result and output the Runnable#result_code. Stores the
|
413
|
+
# result of the run if the run did not pass.
|
414
|
+
|
415
|
+
def record result
|
416
|
+
end
|
417
|
+
|
418
|
+
##
|
419
|
+
# Outputs the summary of the run.
|
420
|
+
|
421
|
+
def report
|
422
|
+
end
|
423
|
+
|
424
|
+
##
|
425
|
+
# Did this run pass?
|
426
|
+
|
427
|
+
def passed?
|
428
|
+
true
|
429
|
+
end
|
430
|
+
end
|
431
|
+
|
432
|
+
class Reporter < AbstractReporter # :nodoc:
|
433
|
+
##
|
434
|
+
# The IO used to report.
|
435
|
+
|
436
|
+
attr_accessor :io
|
437
|
+
|
438
|
+
##
|
439
|
+
# Command-line options for this run.
|
440
|
+
|
441
|
+
attr_accessor :options
|
442
|
+
|
443
|
+
def initialize io = $stdout, options = {} # :nodoc:
|
444
|
+
super()
|
445
|
+
self.io = io
|
446
|
+
self.options = options
|
447
|
+
end
|
448
|
+
end
|
449
|
+
|
450
|
+
##
|
451
|
+
# A very simple reporter that prints the "dots" during the run.
|
452
|
+
#
|
453
|
+
# This is added to the top-level CompositeReporter at the start of
|
454
|
+
# the run. If you want to change the output of minitest via a
|
455
|
+
# plugin, pull this out of the composite and replace it with your
|
456
|
+
# own.
|
457
|
+
|
458
|
+
class ProgressReporter < Reporter
|
459
|
+
def record result # :nodoc:
|
460
|
+
io.print "%s#%s = %.2f s = " % [result.class, result.name, result.time] if
|
461
|
+
options[:verbose]
|
462
|
+
io.print result.result_code
|
463
|
+
io.puts if options[:verbose]
|
464
|
+
end
|
465
|
+
end
|
466
|
+
|
467
|
+
##
|
468
|
+
# A reporter that gathers statistics about a test run. Does not do
|
469
|
+
# any IO because meant to be used as a parent class for a reporter
|
470
|
+
# that does.
|
471
|
+
#
|
472
|
+
# If you want to create an entirely different type of output (eg,
|
473
|
+
# CI, HTML, etc), this is the place to start.
|
474
|
+
|
475
|
+
class StatisticsReporter < Reporter
|
476
|
+
# :stopdoc:
|
477
|
+
attr_accessor :assertions
|
478
|
+
attr_accessor :count
|
479
|
+
attr_accessor :results
|
480
|
+
attr_accessor :start_time
|
481
|
+
attr_accessor :total_time
|
482
|
+
attr_accessor :failures
|
483
|
+
attr_accessor :errors
|
484
|
+
attr_accessor :skips
|
485
|
+
# :startdoc:
|
486
|
+
|
487
|
+
def initialize io = $stdout, options = {} # :nodoc:
|
488
|
+
super
|
489
|
+
|
490
|
+
self.assertions = 0
|
491
|
+
self.count = 0
|
492
|
+
self.results = []
|
493
|
+
self.start_time = nil
|
494
|
+
self.total_time = nil
|
495
|
+
self.failures = nil
|
496
|
+
self.errors = nil
|
497
|
+
self.skips = nil
|
498
|
+
end
|
499
|
+
|
500
|
+
def passed? # :nodoc:
|
501
|
+
results.all?(&:skipped?)
|
502
|
+
end
|
503
|
+
|
504
|
+
def start # :nodoc:
|
505
|
+
self.start_time = Time.now
|
506
|
+
end
|
507
|
+
|
508
|
+
def record result # :nodoc:
|
509
|
+
self.count += 1
|
510
|
+
self.assertions += result.assertions
|
511
|
+
|
512
|
+
results << result if not result.passed? or result.skipped?
|
513
|
+
end
|
514
|
+
|
515
|
+
def report # :nodoc:
|
516
|
+
aggregate = results.group_by { |r| r.failure.class }
|
517
|
+
aggregate.default = [] # dumb. group_by should provide this
|
518
|
+
|
519
|
+
self.total_time = Time.now - start_time
|
520
|
+
self.failures = aggregate[Assertion].size
|
521
|
+
self.errors = aggregate[UnexpectedError].size
|
522
|
+
self.skips = aggregate[Skip].size
|
523
|
+
end
|
524
|
+
end
|
525
|
+
|
526
|
+
##
|
527
|
+
# A reporter that prints the header, summary, and failure details at
|
528
|
+
# the end of the run.
|
529
|
+
#
|
530
|
+
# This is added to the top-level CompositeReporter at the start of
|
531
|
+
# the run. If you want to change the output of minitest via a
|
532
|
+
# plugin, pull this out of the composite and replace it with your
|
533
|
+
# own.
|
534
|
+
|
535
|
+
class SummaryReporter < StatisticsReporter
|
536
|
+
# :stopdoc:
|
537
|
+
attr_accessor :sync
|
538
|
+
attr_accessor :old_sync
|
539
|
+
# :startdoc:
|
540
|
+
|
541
|
+
def start # :nodoc:
|
542
|
+
super
|
543
|
+
|
544
|
+
io.puts "Run options: #{options[:args]}"
|
545
|
+
io.puts
|
546
|
+
io.puts "# Running:"
|
547
|
+
io.puts
|
548
|
+
|
549
|
+
self.sync = io.respond_to? :"sync=" # stupid emacs
|
550
|
+
self.old_sync, io.sync = io.sync, true if self.sync
|
551
|
+
end
|
552
|
+
|
553
|
+
def report # :nodoc:
|
554
|
+
super
|
555
|
+
|
556
|
+
io.sync = self.old_sync
|
557
|
+
|
558
|
+
io.puts unless options[:verbose] # finish the dots
|
559
|
+
io.puts
|
560
|
+
io.puts statistics
|
561
|
+
io.puts aggregated_results
|
562
|
+
io.puts summary
|
563
|
+
end
|
564
|
+
|
565
|
+
def statistics # :nodoc:
|
566
|
+
"Finished in %.6fs, %.4f runs/s, %.4f assertions/s." %
|
567
|
+
[total_time, count / total_time, assertions / total_time]
|
568
|
+
end
|
569
|
+
|
570
|
+
def aggregated_results # :nodoc:
|
571
|
+
filtered_results = results.dup
|
572
|
+
filtered_results.reject!(&:skipped?) unless options[:verbose]
|
573
|
+
|
574
|
+
s = filtered_results.each_with_index.map { |result, i|
|
575
|
+
"\n%3d) %s" % [i+1, result]
|
576
|
+
}.join("\n") + "\n"
|
577
|
+
|
578
|
+
s.force_encoding(io.external_encoding) if
|
579
|
+
ENCS and io.external_encoding and s.encoding != io.external_encoding
|
580
|
+
|
581
|
+
s
|
582
|
+
end
|
583
|
+
|
584
|
+
alias to_s aggregated_results
|
585
|
+
|
586
|
+
def summary # :nodoc:
|
587
|
+
extra = ""
|
588
|
+
|
589
|
+
extra = "\n\nYou have skipped tests. Run with --verbose for details." if
|
590
|
+
results.any?(&:skipped?) unless options[:verbose] or ENV["MT_NO_SKIP_MSG"]
|
591
|
+
|
592
|
+
"%d runs, %d assertions, %d failures, %d errors, %d skips%s" %
|
593
|
+
[count, assertions, failures, errors, skips, extra]
|
594
|
+
end
|
595
|
+
end
|
596
|
+
|
597
|
+
##
|
598
|
+
# Dispatch to multiple reporters as one.
|
599
|
+
|
600
|
+
class CompositeReporter < AbstractReporter
|
601
|
+
##
|
602
|
+
# The list of reporters to dispatch to.
|
603
|
+
|
604
|
+
attr_accessor :reporters
|
605
|
+
|
606
|
+
def initialize *reporters # :nodoc:
|
607
|
+
super()
|
608
|
+
self.reporters = reporters
|
609
|
+
end
|
610
|
+
|
611
|
+
##
|
612
|
+
# Add another reporter to the mix.
|
613
|
+
|
614
|
+
def << reporter
|
615
|
+
self.reporters << reporter
|
616
|
+
end
|
617
|
+
|
618
|
+
def passed? # :nodoc:
|
619
|
+
self.reporters.all?(&:passed?)
|
620
|
+
end
|
621
|
+
|
622
|
+
def start # :nodoc:
|
623
|
+
self.reporters.each(&:start)
|
624
|
+
end
|
625
|
+
|
626
|
+
def record result # :nodoc:
|
627
|
+
self.reporters.each do |reporter|
|
628
|
+
reporter.record result
|
629
|
+
end
|
630
|
+
end
|
631
|
+
|
632
|
+
def report # :nodoc:
|
633
|
+
self.reporters.each(&:report)
|
634
|
+
end
|
635
|
+
end
|
636
|
+
|
637
|
+
##
|
638
|
+
# Represents run failures.
|
639
|
+
|
640
|
+
class Assertion < Exception
|
641
|
+
def error # :nodoc:
|
642
|
+
self
|
643
|
+
end
|
644
|
+
|
645
|
+
##
|
646
|
+
# Where was this run before an assertion was raised?
|
647
|
+
|
648
|
+
def location
|
649
|
+
last_before_assertion = ""
|
650
|
+
self.backtrace.reverse_each do |s|
|
651
|
+
break if s =~ /in .(assert|refute|flunk|pass|fail|raise|must|wont)/
|
652
|
+
last_before_assertion = s
|
653
|
+
end
|
654
|
+
last_before_assertion.sub(/:in .*$/, "")
|
655
|
+
end
|
656
|
+
|
657
|
+
def result_code # :nodoc:
|
658
|
+
result_label[0, 1]
|
659
|
+
end
|
660
|
+
|
661
|
+
def result_label # :nodoc:
|
662
|
+
"Failure"
|
663
|
+
end
|
664
|
+
end
|
665
|
+
|
666
|
+
##
|
667
|
+
# Assertion raised when skipping a run.
|
668
|
+
|
669
|
+
class Skip < Assertion
|
670
|
+
def result_label # :nodoc:
|
671
|
+
"Skipped"
|
672
|
+
end
|
673
|
+
end
|
674
|
+
|
675
|
+
##
|
676
|
+
# Assertion wrapping an unexpected error that was raised during a run.
|
677
|
+
|
678
|
+
class UnexpectedError < Assertion
|
679
|
+
attr_accessor :exception # :nodoc:
|
680
|
+
|
681
|
+
def initialize exception # :nodoc:
|
682
|
+
super
|
683
|
+
self.exception = exception
|
684
|
+
end
|
685
|
+
|
686
|
+
def backtrace # :nodoc:
|
687
|
+
self.exception.backtrace
|
688
|
+
end
|
689
|
+
|
690
|
+
def error # :nodoc:
|
691
|
+
self.exception
|
692
|
+
end
|
693
|
+
|
694
|
+
def message # :nodoc:
|
695
|
+
bt = Minitest::filter_backtrace(self.backtrace).join "\n "
|
696
|
+
"#{self.exception.class}: #{self.exception.message}\n #{bt}"
|
697
|
+
end
|
698
|
+
|
699
|
+
def result_label # :nodoc:
|
700
|
+
"Error"
|
701
|
+
end
|
702
|
+
end
|
703
|
+
|
704
|
+
##
|
705
|
+
# Provides a simple set of guards that you can use in your tests
|
706
|
+
# to skip execution if it is not applicable. These methods are
|
707
|
+
# mixed into Test as both instance and class methods so you
|
708
|
+
# can use them inside or outside of the test methods.
|
709
|
+
#
|
710
|
+
# def test_something_for_mri
|
711
|
+
# skip "bug 1234" if jruby?
|
712
|
+
# # ...
|
713
|
+
# end
|
714
|
+
#
|
715
|
+
# if windows? then
|
716
|
+
# # ... lots of test methods ...
|
717
|
+
# end
|
718
|
+
|
719
|
+
module Guard
|
720
|
+
|
721
|
+
##
|
722
|
+
# Is this running on jruby?
|
723
|
+
|
724
|
+
def jruby? platform = RUBY_PLATFORM
|
725
|
+
"java" == platform
|
726
|
+
end
|
727
|
+
|
728
|
+
##
|
729
|
+
# Is this running on maglev?
|
730
|
+
|
731
|
+
def maglev? platform = defined?(RUBY_ENGINE) && RUBY_ENGINE
|
732
|
+
"maglev" == platform
|
733
|
+
end
|
734
|
+
|
735
|
+
##
|
736
|
+
# Is this running on mri?
|
737
|
+
|
738
|
+
def mri? platform = RUBY_DESCRIPTION
|
739
|
+
/^ruby/ =~ platform
|
740
|
+
end
|
741
|
+
|
742
|
+
##
|
743
|
+
# Is this running on rubinius?
|
744
|
+
|
745
|
+
def rubinius? platform = defined?(RUBY_ENGINE) && RUBY_ENGINE
|
746
|
+
"rbx" == platform
|
747
|
+
end
|
748
|
+
|
749
|
+
##
|
750
|
+
# Is this running on windows?
|
751
|
+
|
752
|
+
def windows? platform = RUBY_PLATFORM
|
753
|
+
/mswin|mingw/ =~ platform
|
754
|
+
end
|
755
|
+
end
|
756
|
+
|
757
|
+
class BacktraceFilter # :nodoc:
|
758
|
+
def filter bt
|
759
|
+
return ["No backtrace"] unless bt
|
760
|
+
|
761
|
+
return bt.dup if $DEBUG
|
762
|
+
|
763
|
+
new_bt = bt.take_while { |line| line !~ /lib\/minitest/ }
|
764
|
+
new_bt = bt.select { |line| line !~ /lib\/minitest/ } if new_bt.empty?
|
765
|
+
new_bt = bt.dup if new_bt.empty?
|
766
|
+
|
767
|
+
new_bt
|
768
|
+
end
|
769
|
+
end
|
770
|
+
|
771
|
+
self.backtrace_filter = BacktraceFilter.new
|
772
|
+
|
773
|
+
def self.run_one_method klass, method_name # :nodoc:
|
774
|
+
result = klass.new(method_name).run
|
775
|
+
raise "#{klass}#run _must_ return self" unless klass === result
|
776
|
+
result
|
777
|
+
end
|
778
|
+
end
|
779
|
+
|
780
|
+
require "minitest/test"
|