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,13 @@
|
|
|
1
|
+
describe "Missing constants" do
|
|
2
|
+
it "should raise a NameError when trying to access an undefined constant" do
|
|
3
|
+
lambda { ThisConstantDoesNotExist }.should raise_error(NameError)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
it "raises an error for missing constants on base constant scope" do
|
|
7
|
+
lambda { Object::SomeRandomObjectName }.should raise_error(NameError)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "raises an error for missing constants on root constant scope" do
|
|
11
|
+
lambda { ::YetAnotherMissingConstant }.should raise_error(NameError)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
$OPAL_TOP_LEVEL_OBJECT = self
|
|
4
|
+
|
|
5
|
+
def self.some_main_method
|
|
6
|
+
3.142
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def some_top_level_method_is_defined
|
|
10
|
+
42
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "Defining normal methods at the top level" do
|
|
14
|
+
it "should define them on Object, not main" do
|
|
15
|
+
Object.new.some_top_level_method_is_defined.should == 42
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe "Defining singleton methods on main" do
|
|
20
|
+
it "should define it on main directly" do
|
|
21
|
+
$OPAL_TOP_LEVEL_OBJECT.some_main_method.should == 3.142
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should not define the method for all Objects" do
|
|
25
|
+
lambda { Object.new.some_main_method }.should raise_error(NoMethodError)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
module MethodMissingSpecs
|
|
4
|
+
class A
|
|
5
|
+
def method_missing(mid, *args)
|
|
6
|
+
[mid, args]
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class B
|
|
11
|
+
def method_missing(mid, *args, &block)
|
|
12
|
+
[mid, block]
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class BridgedClass < `(function NativeConstructor(){})`
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "method_missing" do
|
|
21
|
+
before do
|
|
22
|
+
@obj = MethodMissingSpecs::A.new
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should pass the missing method name as first argument" do
|
|
26
|
+
@obj.foo.should == [:foo, []]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should correctly pass arguments to method_missing" do
|
|
30
|
+
@obj.bar(1, 2, 3).should == [:bar, [1, 2, 3]]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should pass blocks to method_missing" do
|
|
34
|
+
obj = MethodMissingSpecs::B.new
|
|
35
|
+
proc = proc { 1 }
|
|
36
|
+
obj.baz(1, 2, &proc).should == [:baz, proc]
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe "BasicObject#method_missing" do
|
|
41
|
+
it "raises an error for the missing method" do
|
|
42
|
+
lambda {
|
|
43
|
+
BasicObject.new.foo_bar_baz
|
|
44
|
+
}.should raise_error(Exception)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe "Array#method_missing" do
|
|
49
|
+
it "raises an error for the missing method" do
|
|
50
|
+
lambda {
|
|
51
|
+
BasicObject.new.foo_bar_baz
|
|
52
|
+
}.should raise_error(Exception)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
describe "<BridgedClass>#method_missing" do
|
|
57
|
+
it "raises an error for the missing method" do
|
|
58
|
+
lambda {
|
|
59
|
+
BridgedClass.new.foo_bar_baz
|
|
60
|
+
}.should raise_error(Exception)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module OpalMethodSpec
|
|
4
|
+
class C
|
|
5
|
+
def foo; :C; end
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
module M
|
|
9
|
+
def foo; :M; end
|
|
10
|
+
def bar; :M; end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module N
|
|
14
|
+
def bar; :N; end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class C
|
|
18
|
+
include M
|
|
19
|
+
include N
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe "Including modules in a class with methods already defined in class" do
|
|
24
|
+
it "should always call the method defined in a class first" do
|
|
25
|
+
OpalMethodSpec::C.new.foo.should == :C
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should call the method from the last module included unless class defines method" do
|
|
29
|
+
OpalMethodSpec::C.new.bar.should == :N
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "Parens" do
|
|
4
|
+
it "can be used to group expressions" do
|
|
5
|
+
(self.class; self.to_s; 42).should == 42
|
|
6
|
+
(3.142).should == 3.142
|
|
7
|
+
().should == nil
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "generates code that contains the expression in precedence" do
|
|
11
|
+
foo = 100
|
|
12
|
+
((foo += 42) == 142).should == true
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class RescueReturningSpec
|
|
4
|
+
def single
|
|
5
|
+
begin
|
|
6
|
+
raise "ERROR"
|
|
7
|
+
rescue
|
|
8
|
+
:foo
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def multiple
|
|
13
|
+
begin
|
|
14
|
+
raise "ERROR"
|
|
15
|
+
rescue
|
|
16
|
+
to_s
|
|
17
|
+
:bar
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def empty_rescue
|
|
22
|
+
begin
|
|
23
|
+
raise "ERROR"
|
|
24
|
+
rescue
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe "The rescue keyword" do
|
|
30
|
+
it "returns last value of expression evaluated" do
|
|
31
|
+
RescueReturningSpec.new.single.should == :foo
|
|
32
|
+
RescueReturningSpec.new.multiple.should == :bar
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "returns nil if no expr given in rescue body" do
|
|
36
|
+
RescueReturningSpec.new.empty_rescue.should be_nil
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class OpalReturnSpec
|
|
4
|
+
def returning_expression
|
|
5
|
+
(false || return)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def returning_block
|
|
9
|
+
@values = []
|
|
10
|
+
|
|
11
|
+
[1, 2, 3, 4, 5].each do |n|
|
|
12
|
+
return if n == 3
|
|
13
|
+
@values << n
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
attr_reader :values
|
|
18
|
+
|
|
19
|
+
def returning_block_value
|
|
20
|
+
[1, 2, 3, 4, 5].each { return :foo }
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe "The return statement" do
|
|
25
|
+
it "can be used as an expression" do
|
|
26
|
+
OpalReturnSpec.new.returning_expression.should be_nil
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "can return from a method when inside a block" do
|
|
30
|
+
spec = OpalReturnSpec.new
|
|
31
|
+
spec.returning_block
|
|
32
|
+
spec.values.size.should == 2
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "returns the return value from a method returning by block" do
|
|
36
|
+
OpalReturnSpec.new.returning_block_value.should == :foo
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
class RuntimeOpalSendSpec
|
|
2
|
+
def simple
|
|
3
|
+
42
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def args *a
|
|
7
|
+
a
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def method_missing sym, *args
|
|
11
|
+
[sym, args]
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
describe "Opal.send()" do
|
|
17
|
+
before do
|
|
18
|
+
@obj = RuntimeOpalSendSpec.new
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "calls receiver with given method" do
|
|
22
|
+
`Opal.send(#{@obj}, "simple")`.should == 42
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "sends any arguments to the method" do
|
|
26
|
+
`Opal.send(#{@obj}, "args", 1, 2, 3)`.should == [1, 2, 3]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "calls method_missing on the object if method doesnt exist" do
|
|
30
|
+
`Opal.send(#{@obj}, "blah")`.should == [:blah, []]
|
|
31
|
+
`Opal.send(#{@obj}, "bleh", 1)`.should == [:bleh, [1]]
|
|
32
|
+
`Opal.send(#{@obj}, "blih", 1, 2)`.should == [:blih, [1, 2]]
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class SingletonClassConstantsSpec
|
|
4
|
+
class << self
|
|
5
|
+
$singleton_class_constant_spec = String
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "Singleton Classes" do
|
|
10
|
+
it "looks up constants in body" do
|
|
11
|
+
$singleton_class_constant_spec.should == String
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class SingletonMethodSuperSpec
|
|
4
|
+
def meth
|
|
5
|
+
"bar"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def passing_block(*args, &block)
|
|
9
|
+
[args, block_given?]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.pass_block(&block)
|
|
13
|
+
block_given?
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def super_args(*a)
|
|
17
|
+
block_given?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.super_args(*a)
|
|
21
|
+
block_given?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def with_splat_args(*a)
|
|
25
|
+
a
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class A < SingletonMethodSuperSpec
|
|
29
|
+
def passing_block(*a)
|
|
30
|
+
super
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.pass_block
|
|
34
|
+
super
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def super_args(*a)
|
|
38
|
+
super(*a)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.super_args(*a)
|
|
42
|
+
super()
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def with_splat_args
|
|
46
|
+
super 2, *[3, 4]
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class MultipleSuperSpec
|
|
52
|
+
def to_s
|
|
53
|
+
if true
|
|
54
|
+
super
|
|
55
|
+
else
|
|
56
|
+
super()
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# FIXME: we cant make a better test case than this??? For some reason, a single test cannot be deduced
|
|
62
|
+
describe "The 'super' keyword" do
|
|
63
|
+
it "passes the right arguments when a variable rewrites special `arguments` js object" do
|
|
64
|
+
Struct.new(:a, :b, :c).new(1, 2, 3).b.should == 2
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "calls super method on object that defines singleton method calling super" do
|
|
68
|
+
obj = SingletonMethodSuperSpec.new
|
|
69
|
+
def obj.meth; "foo " + super; end
|
|
70
|
+
obj.meth.should == "foo bar"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
describe "with no arguments or parens" do
|
|
74
|
+
before do
|
|
75
|
+
@obj = SingletonMethodSuperSpec::A.new
|
|
76
|
+
@kls = SingletonMethodSuperSpec::A
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "passes the block to super" do
|
|
80
|
+
@obj.passing_block(1, 2, 3).should == [[1, 2, 3], false]
|
|
81
|
+
@obj.passing_block(1, 2, 3) { }.should == [[1, 2, 3], true]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "passes the block to super on singleton methods" do
|
|
85
|
+
@kls.pass_block.should be_false
|
|
86
|
+
@kls.pass_block { }.should be_true
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
describe "with arguments or empty parens" do
|
|
91
|
+
before do
|
|
92
|
+
@obj = SingletonMethodSuperSpec::A.new
|
|
93
|
+
@kls = SingletonMethodSuperSpec::A
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "does not pass the block to super" do
|
|
97
|
+
@obj.super_args(1, 2, 3) { }.should be_false
|
|
98
|
+
@kls.super_args() { }.should be_false
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "handles splat args" do
|
|
103
|
+
SingletonMethodSuperSpec::A.new.with_splat_args.should == [2, 3, 4]
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
describe "inside a class body" do
|
|
107
|
+
it "does not break when multiple super statements are in body" do
|
|
108
|
+
lambda { MultipleSuperSpec.new.to_s }.should_not raise_error
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
module OpalSuperSpecs
|
|
115
|
+
class A
|
|
116
|
+
def foo
|
|
117
|
+
'a'
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def self.bar
|
|
121
|
+
'x'
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
class B < A
|
|
126
|
+
def foo
|
|
127
|
+
super + 'b'
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def self.bar
|
|
131
|
+
super + 'y'
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
class C < B
|
|
136
|
+
def foo
|
|
137
|
+
super + 'c'
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def self.bar
|
|
141
|
+
super + 'z'
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
module M1
|
|
146
|
+
def chain(out)
|
|
147
|
+
out << 'M1'
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
module M2
|
|
152
|
+
def chain(out)
|
|
153
|
+
out << 'M2'
|
|
154
|
+
super out
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
module M3
|
|
159
|
+
def chain(out)
|
|
160
|
+
out << 'M3'
|
|
161
|
+
super out
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
class C1
|
|
166
|
+
include M1
|
|
167
|
+
include M2
|
|
168
|
+
include M3
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
class C2
|
|
172
|
+
include M1
|
|
173
|
+
include M2
|
|
174
|
+
|
|
175
|
+
def chain(out)
|
|
176
|
+
out << 'C2'
|
|
177
|
+
super out
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
class C3
|
|
182
|
+
def chain(out)
|
|
183
|
+
out << 'C3'
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
class C4 < C3
|
|
188
|
+
include M2
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
describe "Super chains" do
|
|
193
|
+
it "searches entire class hierarchys for instance methods" do
|
|
194
|
+
OpalSuperSpecs::C.new.foo.should == 'abc'
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it "searches entire class hierarchys for class methods" do
|
|
198
|
+
OpalSuperSpecs::C.bar.should == 'xyz'
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
it "calls methods for every module included in a class" do
|
|
202
|
+
OpalSuperSpecs::C1.new.chain([]).should == ['M3', 'M2', 'M1']
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
it "calls method defined in class before modules" do
|
|
206
|
+
OpalSuperSpecs::C2.new.chain([]).should == ['C2', 'M2', 'M1']
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
it "calls method defined on superclass after modules included by child" do
|
|
210
|
+
OpalSuperSpecs::C4.new.chain([]).should == ['M2', 'C3']
|
|
211
|
+
end
|
|
212
|
+
end
|