opal-cj 0.7.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 +7 -0
- data/.gitignore +10 -0
- data/.gitmodules +27 -0
- data/.rspec +3 -0
- data/.spectator +2 -0
- data/.spectator-mspec +3 -0
- data/.travis.yml +45 -0
- data/CHANGELOG.md +406 -0
- data/CONTRIBUTING.md +41 -0
- data/Gemfile +27 -0
- data/Guardfile +77 -0
- data/LICENSE +19 -0
- data/README.md +178 -0
- data/Rakefile +116 -0
- data/benchmarks/operators.rb +11 -0
- data/bin/opal +22 -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/examples/rack/Gemfile +3 -0
- data/examples/rack/app/application.rb +13 -0
- data/examples/rack/app/user.rb +21 -0
- data/examples/rack/config.ru +7 -0
- data/examples/rack/index.html.erb +10 -0
- data/examples/sinatra/Gemfile +4 -0
- data/examples/sinatra/app/application.rb +7 -0
- data/examples/sinatra/config.ru +28 -0
- data/lib/mspec/opal/main.rb.erb +9 -0
- data/lib/mspec/opal/rake_task.rb +278 -0
- data/lib/mspec/opal/runner.rb +206 -0
- data/lib/mspec/opal/sprockets.js +57 -0
- data/lib/opal.rb +11 -0
- data/lib/opal/builder.rb +135 -0
- data/lib/opal/builder_processors.rb +165 -0
- data/lib/opal/cli.rb +145 -0
- data/lib/opal/cli_options.rb +149 -0
- data/lib/opal/cli_runners.rb +10 -0
- data/lib/opal/cli_runners/nodejs.rb +56 -0
- data/lib/opal/cli_runners/phantom.js +35 -0
- data/lib/opal/cli_runners/phantomjs.rb +28 -0
- data/lib/opal/cli_runners/server.rb +54 -0
- data/lib/opal/compiler.rb +307 -0
- data/lib/opal/erb.rb +64 -0
- data/lib/opal/fragment.rb +41 -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 +283 -0
- data/lib/opal/nodes/call_special.rb +178 -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 +157 -0
- data/lib/opal/nodes/defined.rb +113 -0
- data/lib/opal/nodes/definitions.rb +168 -0
- data/lib/opal/nodes/for.rb +35 -0
- data/lib/opal/nodes/hash.rb +67 -0
- data/lib/opal/nodes/helpers.rb +114 -0
- data/lib/opal/nodes/if.rb +67 -0
- data/lib/opal/nodes/iter.rb +131 -0
- data/lib/opal/nodes/literal.rb +230 -0
- data/lib/opal/nodes/logic.rb +217 -0
- data/lib/opal/nodes/masgn.rb +62 -0
- data/lib/opal/nodes/module.rb +46 -0
- data/lib/opal/nodes/rescue.rb +135 -0
- data/lib/opal/nodes/runtime_helpers.rb +45 -0
- data/lib/opal/nodes/scope.rb +293 -0
- data/lib/opal/nodes/singleton_class.rb +25 -0
- data/lib/opal/nodes/super.rb +97 -0
- data/lib/opal/nodes/top.rb +101 -0
- data/lib/opal/nodes/variables.rb +158 -0
- data/lib/opal/nodes/while.rb +65 -0
- data/lib/opal/nodes/yield.rb +95 -0
- data/lib/opal/parser.rb +658 -0
- data/lib/opal/parser/grammar.rb +5452 -0
- data/lib/opal/parser/grammar.y +1684 -0
- data/lib/opal/parser/keywords.rb +66 -0
- data/lib/opal/parser/lexer.rb +1208 -0
- data/lib/opal/parser/parser_scope.rb +25 -0
- data/lib/opal/parser/sexp.rb +75 -0
- data/lib/opal/path_reader.rb +28 -0
- data/lib/opal/paths.rb +38 -0
- data/lib/opal/source_map.rb +70 -0
- data/lib/opal/sprockets.rb +4 -0
- data/lib/opal/sprockets/cache_key_fix.rb +17 -0
- data/lib/opal/sprockets/environment.rb +37 -0
- data/lib/opal/sprockets/erb.rb +37 -0
- data/lib/opal/sprockets/path_reader.rb +34 -0
- data/lib/opal/sprockets/processor.rb +124 -0
- data/lib/opal/sprockets/server.rb +180 -0
- data/lib/opal/util.rb +64 -0
- data/lib/opal/version.rb +3 -0
- data/opal.gemspec +36 -0
- data/opal/README.md +6 -0
- data/opal/corelib/array.rb +1556 -0
- data/opal/corelib/array/inheritance.rb +113 -0
- data/opal/corelib/basic_object.rb +73 -0
- data/opal/corelib/boolean.rb +41 -0
- data/opal/corelib/class.rb +55 -0
- data/opal/corelib/comparable.rb +56 -0
- data/opal/corelib/complex.rb +3 -0
- data/opal/corelib/dir.rb +20 -0
- data/opal/corelib/enumerable.rb +1132 -0
- data/opal/corelib/enumerator.rb +422 -0
- data/opal/corelib/error.rb +63 -0
- data/opal/corelib/file.rb +56 -0
- data/opal/corelib/hash.rb +728 -0
- data/opal/corelib/helpers.rb +102 -0
- data/opal/corelib/io.rb +59 -0
- data/opal/corelib/kernel.rb +569 -0
- data/opal/corelib/main.rb +7 -0
- data/opal/corelib/match_data.rb +114 -0
- data/opal/corelib/method.rb +58 -0
- data/opal/corelib/module.rb +462 -0
- data/opal/corelib/nil_class.rb +62 -0
- data/opal/corelib/numeric.rb +532 -0
- data/opal/corelib/proc.rb +52 -0
- data/opal/corelib/range.rb +116 -0
- data/opal/corelib/rational.rb +3 -0
- data/opal/corelib/regexp.rb +133 -0
- data/opal/corelib/runtime.js +1240 -0
- data/opal/corelib/string.rb +1212 -0
- data/opal/corelib/string/inheritance.rb +78 -0
- data/opal/corelib/struct.rb +141 -0
- data/opal/corelib/time.rb +584 -0
- data/opal/corelib/variables.rb +24 -0
- data/opal/opal.rb +32 -0
- data/package.json +9 -0
- data/spec/filters/bugs/array.rb +232 -0
- data/spec/filters/bugs/basic_object.rb +14 -0
- data/spec/filters/bugs/class.rb +21 -0
- data/spec/filters/bugs/enumerable.rb +69 -0
- data/spec/filters/bugs/enumerator.rb +3 -0
- data/spec/filters/bugs/hash.rb +128 -0
- data/spec/filters/bugs/kernel.rb +10 -0
- data/spec/filters/bugs/language.rb +415 -0
- data/spec/filters/bugs/math.rb +95 -0
- data/spec/filters/bugs/module.rb +14 -0
- data/spec/filters/bugs/nil.rb +7 -0
- data/spec/filters/bugs/numeric.rb +20 -0
- data/spec/filters/bugs/opal.rb +14 -0
- data/spec/filters/bugs/regexp.rb +11 -0
- data/spec/filters/bugs/set.rb +7 -0
- data/spec/filters/bugs/singleton.rb +6 -0
- data/spec/filters/bugs/string.rb +360 -0
- data/spec/filters/bugs/stringscanner.rb +22 -0
- data/spec/filters/bugs/struct.rb +45 -0
- data/spec/filters/bugs/time.rb +177 -0
- data/spec/filters/bugs/unknown.rb +11 -0
- data/spec/filters/unsupported/encoding.rb +95 -0
- data/spec/filters/unsupported/enumerator.rb +14 -0
- data/spec/filters/unsupported/float.rb +5 -0
- data/spec/filters/unsupported/frozen.rb +90 -0
- data/spec/filters/unsupported/hash_compare_by_identity.rb +16 -0
- data/spec/filters/unsupported/integer_size.rb +7 -0
- data/spec/filters/unsupported/method_added.rb +10 -0
- data/spec/filters/unsupported/mutable_strings.rb +361 -0
- data/spec/filters/unsupported/private_constants.rb +30 -0
- data/spec/filters/unsupported/private_methods.rb +44 -0
- data/spec/filters/unsupported/random.rb +4 -0
- data/spec/filters/unsupported/ruby_exe.rb +5 -0
- data/spec/filters/unsupported/tainted.rb +155 -0
- data/spec/filters/unsupported/time.rb +21 -0
- data/spec/filters/unsupported/trusted.rb +80 -0
- data/spec/lib/builder_processors_spec.rb +27 -0
- data/spec/lib/builder_spec.rb +66 -0
- data/spec/lib/cli_spec.rb +134 -0
- data/spec/lib/compiler_spec.rb +197 -0
- data/spec/lib/dependency_resolver_spec.rb +40 -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_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/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 +139 -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 +61 -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 +27 -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 +24 -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/environment_spec.rb +30 -0
- data/spec/lib/sprockets/erb_spec.rb +25 -0
- data/spec/lib/sprockets/path_reader_spec.rb +25 -0
- data/spec/lib/sprockets/processor_spec.rb +35 -0
- data/spec/lib/sprockets/server_spec.rb +20 -0
- data/spec/opal/compiler/irb_spec.rb +44 -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/date_spec.rb +122 -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/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/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 +7 -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 +85 -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/symbol_spec.rb +40 -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/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/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/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 +64 -0
- data/spec/opal/core/runtime/constants_spec.rb +13 -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/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/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_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/error_spec.rb +15 -0
- data/spec/opal/stdlib/promise/rescue_spec.rb +35 -0
- data/spec/opal/stdlib/promise/then_spec.rb +54 -0
- data/spec/opal/stdlib/promise/trace_spec.rb +35 -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 +329 -0
- data/spec/spec_helper.rb +42 -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 +10 -0
- data/stdlib/buffer.rb +40 -0
- data/stdlib/buffer/array.rb +66 -0
- data/stdlib/buffer/view.rb +70 -0
- data/stdlib/date.rb +170 -0
- data/stdlib/delegate.rb +29 -0
- data/stdlib/dir.rb +1 -0
- data/stdlib/encoding.rb +166 -0
- data/stdlib/enumerator.rb +1 -0
- data/stdlib/erb.rb +16 -0
- data/stdlib/file.rb +1 -0
- data/stdlib/forwardable.rb +71 -0
- data/stdlib/json.rb +182 -0
- data/stdlib/math.rb +370 -0
- data/stdlib/native.rb +530 -0
- data/stdlib/nodejs.rb +5 -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/process.rb +16 -0
- data/stdlib/nodejs/require.rb +32 -0
- data/stdlib/nodejs/rubygems.rb +68 -0
- data/stdlib/nodejs/runtime.rb +25 -0
- data/stdlib/nodejs/yaml.rb +11 -0
- data/stdlib/observer.rb +202 -0
- data/stdlib/opal-parser.rb +53 -0
- data/stdlib/opal-source-maps.rb +2 -0
- data/stdlib/ostruct.rb +69 -0
- data/stdlib/pathname.rb +31 -0
- data/stdlib/phantomjs.rb +8 -0
- data/stdlib/pp.rb +12 -0
- data/stdlib/process.rb +10 -0
- data/stdlib/promise.rb +300 -0
- data/stdlib/racc/parser.rb +215 -0
- data/stdlib/rbconfig.rb +20 -0
- data/stdlib/securerandom.rb +12 -0
- data/stdlib/set.rb +116 -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 +155 -0
- data/stdlib/template.rb +46 -0
- data/stdlib/thread.rb +160 -0
- data/stdlib/time.rb +9 -0
- data/tasks/github.rake +19 -0
- metadata +690 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
describe "Kernel#p" do
|
|
2
|
+
before { extend OutputSilencer }
|
|
3
|
+
|
|
4
|
+
it "returns nil if called with no arguments" do
|
|
5
|
+
silence_stdout { p.should == nil }
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "returns its argument if called with one argument" do
|
|
9
|
+
silence_stdout { p(123).should == 123 }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "returns all arguments as an Array if called with multiple arguments" do
|
|
13
|
+
silence_stdout { p(1,2,3).should == [1,2,3] }
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
describe "Kernel#printf" do
|
|
2
|
+
before { extend OutputSilencer }
|
|
3
|
+
|
|
4
|
+
it "returns nil if called with no arguments" do
|
|
5
|
+
silence_stdout { printf.should == nil }
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "returns nil if called with arguments" do
|
|
9
|
+
silence_stdout { printf("%d", 123).should == nil }
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
describe "Kernel#proc" do
|
|
2
|
+
it "returns a Proc object" do
|
|
3
|
+
proc { true }.kind_of?(Proc).should == true
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
it "raises an ArgumentError when no block is given" do
|
|
7
|
+
lambda { proc }.should raise_error(ArgumentError)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "is not a lambda" do
|
|
11
|
+
proc { true }.lambda?.should == false
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
describe "Kernel.rand" do
|
|
2
|
+
it "returns a float if no argument is passed" do
|
|
3
|
+
rand.should be_kind_of(Float)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
it "returns an integer for an integer argument" do
|
|
7
|
+
rand(77).should be_kind_of(Integer)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "return member from range" do
|
|
11
|
+
r = (1..10)
|
|
12
|
+
r.to_a.include?(rand(r)).should == true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should convert negative number and convert to integer" do
|
|
16
|
+
rand(-0.1).should == 0
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "returns a numeric in opal" do
|
|
20
|
+
rand.should be_kind_of(Numeric)
|
|
21
|
+
rand(77).should be_kind_of(Numeric)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
class RespondToSpecs
|
|
2
|
+
def self.bar
|
|
3
|
+
'done'
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def undefed_method
|
|
7
|
+
true
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
undef undefed_method
|
|
11
|
+
|
|
12
|
+
def some_method
|
|
13
|
+
:foo
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe "Kernel.respond_to?" do
|
|
18
|
+
it "indicates if a singleton object responds to a particular message" do
|
|
19
|
+
RespondToSpecs.respond_to?(:bar).should == true
|
|
20
|
+
RespondToSpecs.respond_to?(:baz).should == false
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe "Kernel#respond_to?" do
|
|
25
|
+
before :each do
|
|
26
|
+
@a = RespondToSpecs.new
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "returns true if a method exists" do
|
|
30
|
+
@a.respond_to?(:some_method).should be_true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "indicates if an object responds to a message" do
|
|
34
|
+
@a.respond_to?(:undefed_method).should be_false
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "returns false if a method exists, but is marked with a '$$stub' property" do
|
|
38
|
+
`#{@a}.$some_method.$$stub = true`
|
|
39
|
+
@a.respond_to?(:some_method).should be_false
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
module KernelSpecs
|
|
2
|
+
class Foo
|
|
3
|
+
def bar
|
|
4
|
+
'done'
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
alias :aka :bar
|
|
8
|
+
|
|
9
|
+
def baz(*args) args end
|
|
10
|
+
|
|
11
|
+
def foo(first, *rest) [first, *rest] end
|
|
12
|
+
|
|
13
|
+
def buz(first = true) first end
|
|
14
|
+
|
|
15
|
+
def self.bar
|
|
16
|
+
'done'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe "Kernel#send" do
|
|
22
|
+
it "invokes the named public method" do
|
|
23
|
+
KernelSpecs::Foo.new.send(:bar).should == 'done'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "invokes the named alias of a public method" do
|
|
27
|
+
KernelSpecs::Foo.new.send(:aka).should == 'done'
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe "Kernel#send" do
|
|
32
|
+
it "invokes the named method" do
|
|
33
|
+
KernelSpecs::Foo.new.send(:bar).should == 'done'
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "invokes a class method if called on a class" do
|
|
37
|
+
KernelSpecs::Foo.send(:bar).should == 'done'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "succeeds if passed an arbitrary number of arguments as a splat parameter" do
|
|
41
|
+
KernelSpecs::Foo.new.send(:baz).should == []
|
|
42
|
+
KernelSpecs::Foo.new.send(:baz, :quux).should == [:quux]
|
|
43
|
+
KernelSpecs::Foo.new.send(:baz, :quux, :foo).should == [:quux, :foo]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "succeeds when passing 1 or more arguments as a required and a splat parameter" do
|
|
47
|
+
KernelSpecs::Foo.new.send(:foo, :quux).should == [:quux]
|
|
48
|
+
KernelSpecs::Foo.new.send(:foo, :quux, :bar).should == [:quux, :bar]
|
|
49
|
+
KernelSpecs::Foo.new.send(:foo, :quux, :bar, :baz).should == [:quux, :bar, :baz]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "succeeds when passing 0 arguments to a method with one parameter with a default" do
|
|
53
|
+
KernelSpecs::Foo.new.send(:buz).should == true
|
|
54
|
+
KernelSpecs::Foo.new.send(:buz, :arg).should == :arg
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
require File.expand_path('../fixtures/block', __FILE__)
|
|
2
|
+
|
|
3
|
+
describe "A block" do
|
|
4
|
+
before :each do
|
|
5
|
+
@y = BlockSpecs::Yielder.new
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "captures locals from the surrounding scope" do
|
|
9
|
+
var = 1
|
|
10
|
+
@y.z { var }.should == 1
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "allows for a leading space before the arguments" do
|
|
14
|
+
# res = @y.s (:a){ 1 }
|
|
15
|
+
# res.should == 1
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "allows to define a block variable with the same name as the enclosing block" do
|
|
19
|
+
o = BlockSpecs::OverwriteBlockVariable.new
|
|
20
|
+
o.z { 1 }.should == 1
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
ruby_version_is ""..."1.9" do
|
|
24
|
+
it "overwrites a captured local when used as an argument" do
|
|
25
|
+
var = 1
|
|
26
|
+
@y.s(2) { |var| var }.should == 2
|
|
27
|
+
var.should == 2
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
ruby_version_is "1.9" do
|
|
32
|
+
it "does not capture a local when an argument has the same name" do
|
|
33
|
+
var = 1
|
|
34
|
+
@y.s(2) { |var| var }.should == 2
|
|
35
|
+
var.should == 1
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe "taking zero arguments" do
|
|
40
|
+
it "does not raise an exception when no values are yielded" do
|
|
41
|
+
@y.z { 1 }.should == 1
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "does not raise an exception when values are yielded" do
|
|
45
|
+
@y.s(0) { 1 }.should == 1
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe "taking || arguments" do
|
|
50
|
+
it "does not raise an exception when no values are yielded" do
|
|
51
|
+
@y.z { || 1 }.should == 1
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "does not raise an exception when values are yielded" do
|
|
55
|
+
@y.s(0) { || 1 }.should == 1
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe "taking |a| arguments" do
|
|
60
|
+
it "assigns nil to the argument when no values are yielded" do
|
|
61
|
+
@y.z { |a| a }.should be_nil
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "assigns the value yielded to the argument" do
|
|
65
|
+
@y.s(1) { |a| a }.should == 1
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "does not call #to_ary to convert a single yielded object to an Array" do
|
|
69
|
+
obj = mock("block yield to_ary")
|
|
70
|
+
obj.should_not_receive(:to_ary)
|
|
71
|
+
|
|
72
|
+
@y.s(obj) { |a| a }.should equal(obj)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
ruby_version_is ""..."1.9" do
|
|
76
|
+
it "assigns all the values yielded to the argument as an Array" do
|
|
77
|
+
@y.m(1, 2) { |a| a }.should == [1, 2]
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
ruby_version_is "1.9" do
|
|
82
|
+
it "assigns the first value yielded to the argument" do
|
|
83
|
+
@y.m(1, 2) { |a| a }.should == 1
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "does not destructure a single Array value" do
|
|
88
|
+
@y.s([1, 2]) { |a| a }.should == [1, 2]
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
describe "taking |a, b| arguments" do
|
|
93
|
+
it "assgins nil to the arguments when no values are yielded" do
|
|
94
|
+
@y.z { |a, b| [a, b] }.should == [nil, nil]
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "assigns one value yielded to the first argument" do
|
|
98
|
+
@y.s(1) { |a, b| [a, b] }.should == [1, nil]
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "assigns the first two values yielded to the arguments" do
|
|
102
|
+
@y.m(1, 2, 3) { |a, b| [a, b] }.should == [1, 2]
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "does not destructure an Array value as one of several values yielded" do
|
|
106
|
+
@y.m([1, 2], 3, 4) { |a, b| [a, b] }.should == [[1, 2], 3]
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "assigns 'nil' and 'nil' to the arguments when a single, empty Array is yielded" do
|
|
110
|
+
@y.s([]) { |a, b| [a, b] }.should == [nil, nil]
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it "assigns the element of a single element Array to the first argument" do
|
|
114
|
+
@y.s([1]) { |a, b| [a, b] }.should == [1, nil]
|
|
115
|
+
@y.s([nil]) { |a, b| [a, b] }.should == [nil, nil]
|
|
116
|
+
@y.s([[]]) { |a, b| [a, b] }.should == [[], nil]
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "destructures a single Array value yielded" do
|
|
120
|
+
@y.s([1, 2, 3]) { |a, b| [a, b] }.should == [1, 2]
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
ruby_version_is ""..."1.9" do
|
|
124
|
+
it "does not destructure a splatted Array" do
|
|
125
|
+
@y.r([[]]) { |a, b| [a, b] }.should == [[], nil]
|
|
126
|
+
@y.r([[1]]) { |a, b| [a, b] }.should == [[1], nil]
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
ruby_version_is "1.9" do
|
|
131
|
+
it "destructures a splatted Array" do
|
|
132
|
+
@y.r([[]]) { |a, b| [a, b] }.should == [nil, nil]
|
|
133
|
+
@y.r([[1]]) { |a, b| [a, b] }.should == [1, nil]
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "calls #to_ary to convert a single yielded object to an Array" do
|
|
138
|
+
obj = mock("block yield to_ary")
|
|
139
|
+
obj.should_receive(:to_ary).and_return([1, 2])
|
|
140
|
+
|
|
141
|
+
@y.s(obj) { |a, b| [a, b] }.should == [1, 2]
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it "does not call #to_ary if the single yielded object is an Array" do
|
|
145
|
+
obj = [1, 2]
|
|
146
|
+
obj.should_not_receive(:to_ary)
|
|
147
|
+
|
|
148
|
+
@y.s(obj) { |a, b| [a, b] }.should == [1, 2]
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it "does not call #to_ary if the object does not respond to #to_ary" do
|
|
152
|
+
obj = mock("block yield no to_ary")
|
|
153
|
+
|
|
154
|
+
@y.s(obj) { |a, b| [a, b] }.should == [obj, nil]
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "raises an TypeError if #to_ary does not return an Array" do
|
|
158
|
+
obj = mock("block yield to_ary invalid")
|
|
159
|
+
obj.should_receive(:to_ary).and_return(1)
|
|
160
|
+
|
|
161
|
+
lambda { @y.s(obj) { |a, b| } }.should raise_error(TypeError)
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
describe "taking |a, *b| arguments" do
|
|
166
|
+
it "assigns 'nil' and '[]' to the arguments when no values are yielded" do
|
|
167
|
+
@y.z { |a, *b| [a, b] }.should == [nil, []]
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it "assigns all yielded values after the first to the rest argument" do
|
|
171
|
+
@y.m(1, 2, 3) { |a, *b| [a, b] }.should == [1, [2, 3]]
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it "assigns 'nil' and '[]' to the arguments when a single, empty Array is yielded" do
|
|
175
|
+
@y.s([]) { |a, *b| [a, b] }.should == [nil, []]
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it "assigns the element of a single element Array to the first argument" do
|
|
179
|
+
@y.s([1]) { |a, *b| [a, b] }.should == [1, []]
|
|
180
|
+
@y.s([nil]) { |a, *b| [a, b] }.should == [nil, []]
|
|
181
|
+
@y.s([[]]) { |a, *b| [a, b] }.should == [[], []]
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
ruby_version_is ""..."1.9" do
|
|
185
|
+
it "does not destructure a splatted Array" do
|
|
186
|
+
@y.r([[]]) { |a, *b| [a, b] }.should == [[], []]
|
|
187
|
+
@y.r([[1]]) { |a, *b| [a, b] }.should == [[1], []]
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
ruby_version_is "1.9" do
|
|
192
|
+
it "destructures a splatted Array" do
|
|
193
|
+
@y.r([[]]) { |a, *b| [a, b] }.should == [nil, []]
|
|
194
|
+
@y.r([[1]]) { |a, *b| [a, b] }.should == [1, []]
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
it "destructures a single Array value assigning the remaining values to the rest argument" do
|
|
199
|
+
@y.s([1, 2, 3]) { |a, *b| [a, b] }.should == [1, [2, 3]]
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
it "calls #to_ary to convert a single yielded object to an Array" do
|
|
203
|
+
obj = mock("block yield to_ary")
|
|
204
|
+
obj.should_receive(:to_ary).and_return([1, 2])
|
|
205
|
+
|
|
206
|
+
@y.s(obj) { |a, *b| [a, b] }.should == [1, [2]]
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
it "does not call #to_ary if the single yielded object is an Array" do
|
|
210
|
+
obj = [1, 2]
|
|
211
|
+
obj.should_not_receive(:to_ary)
|
|
212
|
+
|
|
213
|
+
@y.s(obj) { |a, *b| [a, b] }.should == [1, [2]]
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
it "does not call #to_ary if the object does not respond to #to_ary" do
|
|
217
|
+
obj = mock("block yield no to_ary")
|
|
218
|
+
|
|
219
|
+
@y.s(obj) { |a, *b| [a, b] }.should == [obj, []]
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
it "raises an TypeError if #to_ary does not return an Array" do
|
|
223
|
+
obj = mock("block yield to_ary invalid")
|
|
224
|
+
obj.should_receive(:to_ary).and_return(1)
|
|
225
|
+
|
|
226
|
+
lambda { @y.s(obj) { |a, *b| } }.should raise_error(TypeError)
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
describe "taking |*| arguments" do
|
|
231
|
+
it "does not raise an exception when no values are yielded" do
|
|
232
|
+
# @y.z { |*| 1 }.should == 1
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
it "does not raise an exception when values are yielded" do
|
|
236
|
+
# @y.s(0) { |*| 1 }.should == 1
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
it "does not call #to_ary if the single yielded object is an Array" do
|
|
240
|
+
obj = [1, 2]
|
|
241
|
+
obj.should_not_receive(:to_ary)
|
|
242
|
+
|
|
243
|
+
# @y.s(obj) { |*| 1 }.should == 1
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
it "does not call #to_ary if the object does not respond to #to_ary" do
|
|
247
|
+
obj = mock("block yield no to_ary")
|
|
248
|
+
|
|
249
|
+
# @y.s(obj) { |*| 1 }.should == 1
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
ruby_version_is ""..."1.9" do
|
|
253
|
+
it "calls #to_ary to convert a single yielded object to an Array" do
|
|
254
|
+
obj = mock("block yield to_ary")
|
|
255
|
+
obj.should_receive(:to_ary).and_return([1, 2])
|
|
256
|
+
|
|
257
|
+
# @y.s(obj) { |*| 1 }.should == 1
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
it "does not raise a TypeError if #to_ary returns nil" do
|
|
261
|
+
obj = mock("block yield to_ary nil")
|
|
262
|
+
obj.should_receive(:to_ary).and_return(nil)
|
|
263
|
+
|
|
264
|
+
# @y.s(obj) { |*o| o }.should == [obj]
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
it "raises an TypeError if #to_ary does not return an Array" do
|
|
268
|
+
obj = mock("block yield to_ary invalid")
|
|
269
|
+
obj.should_receive(:to_ary).and_return(1)
|
|
270
|
+
|
|
271
|
+
# lambda { @y.s(obj) { |*| } }.should raise_error(TypeError)
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
ruby_version_is "1.9" do
|
|
276
|
+
it "does not call #to_ary to convert a single yielded object to an Array" do
|
|
277
|
+
obj = mock("block yield to_ary")
|
|
278
|
+
obj.should_not_receive(:to_ary)
|
|
279
|
+
|
|
280
|
+
# @y.s(obj) { |*| 1 }.should == 1
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
describe "taking |*a| arguments" do
|
|
286
|
+
it "assigns '[]' to the argument when no values are yielded" do
|
|
287
|
+
@y.z { |*a| a }.should == []
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
it "assigns a single value yielded to the argument as an Array" do
|
|
291
|
+
@y.s(1) { |*a| a }.should == [1]
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
it "assigns all the values passed to the argument as an Array" do
|
|
295
|
+
@y.m(1, 2, 3) { |*a| a }.should == [1, 2, 3]
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
it "assigns '[[]]' to the argument when passed an empty Array" do
|
|
299
|
+
@y.s([]) { |*a| a }.should == [[]]
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
it "assigns a single Array value passed to the argument by wrapping it in an Array" do
|
|
303
|
+
@y.s([1, 2, 3]) { |*a| a }.should == [[1, 2, 3]]
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
it "does not call #to_ary if the single yielded object is an Array" do
|
|
307
|
+
obj = [1, 2]
|
|
308
|
+
obj.should_not_receive(:to_ary)
|
|
309
|
+
|
|
310
|
+
@y.s(obj) { |*a| a }.should == [[1, 2]]
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
it "does not call #to_ary if the object does not respond to #to_ary" do
|
|
314
|
+
obj = mock("block yield no to_ary")
|
|
315
|
+
|
|
316
|
+
@y.s(obj) { |*a| a }.should == [obj]
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
ruby_version_is ""..."1.9" do
|
|
320
|
+
it "calls #to_ary to convert a single yielded object to an Array" do
|
|
321
|
+
obj = mock("block yield to_ary")
|
|
322
|
+
obj.should_receive(:to_ary).and_return([1, 2])
|
|
323
|
+
|
|
324
|
+
@y.s(obj) { |*a| a }.should == [obj]
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
it "raises an TypeError if #to_ary does not return an Array" do
|
|
328
|
+
obj = mock("block yield to_ary invalid")
|
|
329
|
+
obj.should_receive(:to_ary).and_return(1)
|
|
330
|
+
|
|
331
|
+
lambda { @y.s(obj) { |*a| } }.should raise_error(TypeError)
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
ruby_version_is "1.9" do
|
|
336
|
+
it "does not call #to_ary to convert a single yielded object to an Array" do
|
|
337
|
+
obj = mock("block yield to_ary")
|
|
338
|
+
obj.should_not_receive(:to_ary)
|
|
339
|
+
|
|
340
|
+
@y.s(obj) { |*a| a }.should == [obj]
|
|
341
|
+
end
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
describe "taking |a, | arguments" do
|
|
346
|
+
it "assigns nil to the argument when no values are yielded" do
|
|
347
|
+
# @y.z { |a, | a }.should be_nil
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
it "assgins the argument a single value yielded" do
|
|
351
|
+
# @y.s(1) { |a, | a }.should == 1
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
it "assigns the argument the first value yielded" do
|
|
355
|
+
# @y.m(1, 2) { |a, | a }.should == 1
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
it "assigns the argument the first of several values yielded when it is an Array" do
|
|
359
|
+
# @y.m([1, 2], 3) { |a, | a }.should == [1, 2]
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
it "assigns nil to the argument when passed an empty Array" do
|
|
363
|
+
# @y.s([]) { |a, | a }.should be_nil
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
it "assigns the argument the first element of the Array when passed a single Array" do
|
|
367
|
+
# @y.s([1, 2]) { |a, | a }.should == 1
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
it "calls #to_ary to convert a single yielded object to an Array" do
|
|
371
|
+
# obj = mock("block yield to_ary")
|
|
372
|
+
# obj.should_receive(:to_ary).and_return([1, 2])
|
|
373
|
+
|
|
374
|
+
# @y.s(obj) { |a, | a }.should == 1
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
it "does not call #to_ary if the single yielded object is an Array" do
|
|
378
|
+
# obj = [1, 2]
|
|
379
|
+
# obj.should_not_receive(:to_ary)
|
|
380
|
+
|
|
381
|
+
# @y.s(obj) { |a, | a }.should == 1
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
it "does not call #to_ary if the object does not respond to #to_ary" do
|
|
385
|
+
# obj = mock("block yield no to_ary")
|
|
386
|
+
|
|
387
|
+
# @y.s(obj) { |a, | a }.should == obj
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
it "raises an TypeError if #to_ary does not return an Array" do
|
|
391
|
+
# obj = mock("block yield to_ary invalid")
|
|
392
|
+
# obj.should_receive(:to_ary).and_return(1)
|
|
393
|
+
|
|
394
|
+
# lambda { @y.s(obj) { |a, | } }.should raise_error(TypeError)
|
|
395
|
+
end
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
describe "taking |(a, b)| arguments" do
|
|
399
|
+
it "assigns nil to the arguments when yielded no values" do
|
|
400
|
+
@y.z { |(a, b)| [a, b] }.should == [nil, nil]
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
it "destructures a single Array value yielded" do
|
|
404
|
+
@y.s([1, 2]) { |(a, b)| [a, b] }.should == [1, 2]
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
it "calls #to_ary to convert a single yielded object to an Array" do
|
|
408
|
+
obj = mock("block yield to_ary")
|
|
409
|
+
obj.should_receive(:to_ary).and_return([1, 2])
|
|
410
|
+
|
|
411
|
+
@y.s(obj) { |(a, b)| [a, b] }.should == [1, 2]
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
it "does not call #to_ary if the single yielded object is an Array" do
|
|
415
|
+
obj = [1, 2]
|
|
416
|
+
obj.should_not_receive(:to_ary)
|
|
417
|
+
|
|
418
|
+
@y.s(obj) { |(a, b)| [a, b] }.should == [1, 2]
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
it "does not call #to_ary if the object does not respond to #to_ary" do
|
|
422
|
+
obj = mock("block yield no to_ary")
|
|
423
|
+
|
|
424
|
+
@y.s(obj) { |(a, b)| [a, b] }.should == [obj, nil]
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
it "raises an TypeError if #to_ary does not return an Array" do
|
|
428
|
+
obj = mock("block yield to_ary invalid")
|
|
429
|
+
obj.should_receive(:to_ary).and_return(1)
|
|
430
|
+
|
|
431
|
+
lambda { @y.s(obj) { |(a, b)| } }.should raise_error(TypeError)
|
|
432
|
+
end
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
describe "taking |(a, b), c| arguments" do
|
|
436
|
+
it "assigns nil to the arguments when yielded no values" do
|
|
437
|
+
@y.z { |(a, b), c| [a, b, c] }.should == [nil, nil, nil]
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
it "destructures a single one-level Array value yielded" do
|
|
441
|
+
@y.s([1, 2]) { |(a, b), c| [a, b, c] }.should == [1, nil, 2]
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
it "destructures a single multi-level Array value yielded" do
|
|
445
|
+
@y.s([[1, 2, 3], 4]) { |(a, b), c| [a, b, c] }.should == [1, 2, 4]
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
it "calls #to_ary to convert a single yielded object to an Array" do
|
|
449
|
+
obj = mock("block yield to_ary")
|
|
450
|
+
obj.should_receive(:to_ary).and_return([1, 2])
|
|
451
|
+
|
|
452
|
+
@y.s(obj) { |(a, b), c| [a, b, c] }.should == [1, nil, 2]
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
it "does not call #to_ary if the single yielded object is an Array" do
|
|
456
|
+
obj = [1, 2]
|
|
457
|
+
obj.should_not_receive(:to_ary)
|
|
458
|
+
|
|
459
|
+
@y.s(obj) { |(a, b), c| [a, b, c] }.should == [1, nil, 2]
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
it "does not call #to_ary if the object does not respond to #to_ary" do
|
|
463
|
+
obj = mock("block yield no to_ary")
|
|
464
|
+
|
|
465
|
+
@y.s(obj) { |(a, b), c| [a, b, c] }.should == [obj, nil, nil]
|
|
466
|
+
end
|
|
467
|
+
|
|
468
|
+
it "raises an TypeError if #to_ary does not return an Array" do
|
|
469
|
+
obj = mock("block yield to_ary invalid")
|
|
470
|
+
obj.should_receive(:to_ary).and_return(1)
|
|
471
|
+
|
|
472
|
+
lambda { @y.s(obj) { |(a, b), c| } }.should raise_error(TypeError)
|
|
473
|
+
end
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
describe "taking nested |a, (b, (c, d))|" do
|
|
477
|
+
it "assigns nil to the arguments when yielded no values" do
|
|
478
|
+
# @y.m { |a, (b, (c, d))| [a, b, c, d] }.should == [nil, nil, nil, nil]
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
it "destructures separate yielded values" do
|
|
482
|
+
# @y.m(1, 2) { |a, (b, (c, d))| [a, b, c, d] }.should == [1, 2, nil, nil]
|
|
483
|
+
end
|
|
484
|
+
|
|
485
|
+
it "destructures a single multi-level Array value yielded" do
|
|
486
|
+
# @y.m(1, [2, 3]) { |a, (b, (c, d))| [a, b, c, d] }.should == [1, 2, 3, nil]
|
|
487
|
+
end
|
|
488
|
+
|
|
489
|
+
it "destructures a single multi-level Array value yielded" do
|
|
490
|
+
# @y.m(1, [2, [3, 4]]) { |a, (b, (c, d))| [a, b, c, d] }.should == [1, 2, 3, 4]
|
|
491
|
+
end
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
describe "taking nested |a, ((b, c), d)|" do
|
|
495
|
+
it "assigns nil to the arguments when yielded no values" do
|
|
496
|
+
# @y.m { |a, ((b, c), d)| [a, b, c, d] }.should == [nil, nil, nil, nil]
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
it "destructures separate yielded values" do
|
|
500
|
+
# @y.m(1, 2) { |a, ((b, c), d)| [a, b, c, d] }.should == [1, 2, nil, nil]
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
it "destructures a single multi-level Array value yielded" do
|
|
504
|
+
# @y.m(1, [2, 3]) { |a, ((b, c), d)| [a, b, c, d] }.should == [1, 2, nil, 3]
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
it "destructures a single multi-level Array value yielded" do
|
|
508
|
+
# @y.m(1, [[2, 3], 4]) { |a, ((b, c), d)| [a, b, c, d] }.should == [1, 2, 3, 4]
|
|
509
|
+
end
|
|
510
|
+
end
|
|
511
|
+
|
|
512
|
+
describe "arguments with _" do
|
|
513
|
+
|
|
514
|
+
ruby_version_is ""..."1.9" do
|
|
515
|
+
it "extracts arguments with _" do
|
|
516
|
+
@y.m([[1, 2, 3], 4]) { |(_, a, _), _| a }.should == 4
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
it "assigns the last variable named" do
|
|
520
|
+
@y.m(1, 2) { |_, _| _ }.should == 2
|
|
521
|
+
end
|
|
522
|
+
end
|
|
523
|
+
|
|
524
|
+
ruby_version_is "1.9" do
|
|
525
|
+
it "extracts arguments with _" do
|
|
526
|
+
@y.m([[1, 2, 3], 4]) { |(_, a, _), _| a }.should == 2
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
it "assigns the first variable named" do
|
|
530
|
+
@y.m(1, 2) { |_, _| _ }.should == 1
|
|
531
|
+
end
|
|
532
|
+
end
|
|
533
|
+
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
end
|
|
537
|
+
|
|
538
|
+
language_version __FILE__, "block"
|