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 "A Symbol literal" do
|
|
2
|
+
it "can be an empty string" do
|
|
3
|
+
c = :''
|
|
4
|
+
c.should be_kind_of(Symbol)
|
|
5
|
+
c.inspect.should == ':""'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# These weren't allowed on 1.8
|
|
9
|
+
it "can be :!, :!=, or :!~" do
|
|
10
|
+
%w{'!', '!=', '!~'}.each do |sym|
|
|
11
|
+
lambda { sym.to_sym }.should_not raise_error(SyntaxError)
|
|
12
|
+
sym.to_sym.to_s.should == sym
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class AliasMethodSpec
|
|
2
|
+
module M
|
|
3
|
+
def something
|
|
4
|
+
3.142
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
alias_method :something_else, :something
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
include M
|
|
11
|
+
|
|
12
|
+
def foo; 'foo'; end
|
|
13
|
+
alias_method :bar, :foo
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe "Module#alias_method" do
|
|
17
|
+
it "makes a copy of the method" do
|
|
18
|
+
AliasMethodSpec.new.bar.should == 'foo'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe "inside a module" do
|
|
22
|
+
it "defined methods that get donated to a class when included" do
|
|
23
|
+
obj = AliasMethodSpec.new
|
|
24
|
+
obj.something.should == 3.142
|
|
25
|
+
obj.something_else.should == 3.142
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module ModuleAncestorsSpec
|
|
2
|
+
class A; end
|
|
3
|
+
class B < A; end
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
describe "Module#ancestors" do
|
|
7
|
+
it "returns a list of modules in self (including self)" do
|
|
8
|
+
ModuleAncestorsSpec::B.ancestors.include?(ModuleAncestorsSpec::B).should == true
|
|
9
|
+
ModuleAncestorsSpec::B.ancestors.include?(ModuleAncestorsSpec::A).should == true
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module AppendFeaturesSpec
|
|
2
|
+
class Klass; end
|
|
3
|
+
|
|
4
|
+
def self.append_features(mod)
|
|
5
|
+
ScratchPad.record mod
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "Module#append_features" do
|
|
10
|
+
it "gets called when self is included in another module/class" do
|
|
11
|
+
AppendFeaturesSpec::Klass.include AppendFeaturesSpec
|
|
12
|
+
ScratchPad.recorded.should == AppendFeaturesSpec::Klass
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module AttrAccessorSpec
|
|
4
|
+
module M
|
|
5
|
+
attr_accessor :foo
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class C
|
|
9
|
+
include M
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "Module#attr_accessor" do
|
|
14
|
+
it "can be passed a splat of arguments" do
|
|
15
|
+
eval "class OpalAttrAccessorSpec; attr_accessor *%w{foo bar baz}; end"
|
|
16
|
+
OpalAttrAccessorSpec.new.foo.should be_nil
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe "inside a module" do
|
|
20
|
+
it "defines methods that get donated to a class when included" do
|
|
21
|
+
obj = AttrAccessorSpec::C.new
|
|
22
|
+
obj.foo = 100
|
|
23
|
+
obj.foo.should == 100
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
require File.expand_path('../../fixtures/constants', __FILE__)
|
|
2
|
+
|
|
3
|
+
CD_CONST1 = :const1
|
|
4
|
+
|
|
5
|
+
module ConstDefinedSpecs
|
|
6
|
+
FOO = 100
|
|
7
|
+
|
|
8
|
+
module Bar
|
|
9
|
+
BAR = 200
|
|
10
|
+
|
|
11
|
+
module Baz
|
|
12
|
+
BAZ = 300
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class Dog
|
|
17
|
+
LEGS = 4
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Bloudhound < Dog
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe "Module#const_defined?" do
|
|
25
|
+
it "should consider constants with values that evaluate to false in a JavaScript conditional as defined" do
|
|
26
|
+
Object.const_defined?("CS_NIL").should be_true
|
|
27
|
+
Object.const_defined?("CS_ZERO").should be_true
|
|
28
|
+
Object.const_defined?("CS_BLANK").should be_true
|
|
29
|
+
Object.const_defined?("CS_FALSE").should be_true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "accepts a String or Symbol name" do
|
|
33
|
+
Object.const_defined?(:CD_CONST1).should be_true
|
|
34
|
+
Object.const_defined?("CD_CONST1").should be_true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should return false if no constant is defined in the search path" do
|
|
38
|
+
Object.const_defined?(:CS_CONSTX_BAD).should be_false
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "raises a NameError if the name does not start with a capital letter" do
|
|
42
|
+
lambda { ConstantSpecs.const_defined? "name" }.should raise_error(NameError)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "raises a NameError if the name starts with a non-alphabetic character" do
|
|
46
|
+
lambda { ConstantSpecs.const_defined? "__CONSTX__" }.should raise_error(NameError)
|
|
47
|
+
lambda { ConstantSpecs.const_defined? "@Name" }.should raise_error(NameError)
|
|
48
|
+
lambda { ConstantSpecs.const_defined? "!Name" }.should raise_error(NameError)
|
|
49
|
+
lambda { ConstantSpecs.const_defined? "::Name" }.should raise_error(NameError)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "raises a NameError if the name contains non-word characters" do
|
|
53
|
+
# underscore (i.e., _) is a valid word character
|
|
54
|
+
ConstantSpecs.const_defined?("CD_CONST1").should be_true
|
|
55
|
+
lambda { ConstantSpecs.const_defined? "Name=" }.should raise_error(NameError)
|
|
56
|
+
lambda { ConstantSpecs.const_defined? "Name?" }.should raise_error(NameError)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "searches parent scopes of classes and modules" do
|
|
60
|
+
Module.const_defined?(:ConstDefinedSpecs).should be_true
|
|
61
|
+
ConstDefinedSpecs.const_defined?(:ConstDefinedSpecs).should be_true
|
|
62
|
+
ConstDefinedSpecs::Bar::Baz.const_defined?(:BAZ).should be_true
|
|
63
|
+
ConstDefinedSpecs::Bar::Baz.const_defined?(:CD_CONST1).should be_true
|
|
64
|
+
ConstDefinedSpecs::Bar::Baz.const_defined?(:BAR).should be_false
|
|
65
|
+
ConstDefinedSpecs::Bar::Baz.const_defined?(:FOO).should be_false
|
|
66
|
+
ConstDefinedSpecs::Bar::Baz.const_defined?(:Bar).should be_false
|
|
67
|
+
ConstDefinedSpecs::Bar::Baz.const_defined?(:ConstDefinedSpecs).should be_true
|
|
68
|
+
ConstDefinedSpecs::Dog.const_defined?(:LEGS).should be_true
|
|
69
|
+
ConstDefinedSpecs::Dog.const_defined?(:Dog).should be_false
|
|
70
|
+
ConstDefinedSpecs::Bloudhound.const_defined?(:LEGS).should be_true
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "should not search parent scopes of classes and modules if inherit is false" do
|
|
74
|
+
Module.const_defined?(:ConstDefinedSpecs, false).should be_false
|
|
75
|
+
ConstDefinedSpecs.const_defined?(:ConstDefinedSpecs, false).should be_false
|
|
76
|
+
ConstDefinedSpecs::Dog.const_defined?(:LEGS, false).should be_true
|
|
77
|
+
ConstDefinedSpecs::Dog.const_defined?(:Dog, false).should be_false
|
|
78
|
+
ConstDefinedSpecs::Bloudhound.const_defined?(:LEGS, false).should be_false
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should search parent scopes of classes and modules for Object regardless of inherit value" do
|
|
82
|
+
Object.const_defined?(:ConstDefinedSpecs).should be_true
|
|
83
|
+
Object.const_defined?(:ConstDefinedSpecs, false).should be_true
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
require File.expand_path('../../fixtures/constants', __FILE__)
|
|
2
|
+
|
|
3
|
+
CS_CONST1 = :const1
|
|
4
|
+
|
|
5
|
+
module ConstGetSpecs
|
|
6
|
+
FOO = 100
|
|
7
|
+
|
|
8
|
+
module Bar
|
|
9
|
+
BAR = 200
|
|
10
|
+
|
|
11
|
+
module Baz
|
|
12
|
+
BAZ = 300
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class Dog
|
|
17
|
+
LEGS = 4
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Bloudhound < Dog
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe "Module#const_get" do
|
|
25
|
+
it "should get constants with values that evaluate to false in a JavaScript conditional" do
|
|
26
|
+
Object.const_get("CS_NIL").should be_nil
|
|
27
|
+
Object.const_get("CS_ZERO").should == 0
|
|
28
|
+
Object.const_get("CS_BLANK").should == ""
|
|
29
|
+
Object.const_get("CS_FALSE").should == false
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "accepts a String or Symbol name" do
|
|
33
|
+
Object.const_get(:CS_CONST1).should == :const1
|
|
34
|
+
Object.const_get("CS_CONST1").should == :const1
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "raises a NameError if no constant is defined in the search path" do
|
|
38
|
+
lambda { Object.const_get :CS_CONSTX_BAD }.should raise_error(NameError)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "raises a NameError if the name does not start with a capital letter" do
|
|
42
|
+
lambda { ConstantSpecs.const_get "name" }.should raise_error(NameError)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "raises a NameError if the name starts with a non-alphabetic character" do
|
|
46
|
+
lambda { ConstantSpecs.const_get "__CONSTX__" }.should raise_error(NameError)
|
|
47
|
+
lambda { ConstantSpecs.const_get "@Name" }.should raise_error(NameError)
|
|
48
|
+
lambda { ConstantSpecs.const_get "!Name" }.should raise_error(NameError)
|
|
49
|
+
lambda { ConstantSpecs.const_get "::Name" }.should raise_error(NameError)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "raises a NameError if the name contains non-word characters" do
|
|
53
|
+
# underscore (i.e., _) is a valid word character
|
|
54
|
+
ConstantSpecs.const_get("CS_CONST1").should == :const1
|
|
55
|
+
lambda { ConstantSpecs.const_get "Name=" }.should raise_error(NameError)
|
|
56
|
+
lambda { ConstantSpecs.const_get "Name?" }.should raise_error(NameError)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "searches parent scopes of classes and modules" do
|
|
60
|
+
Module.const_get(:ConstGetSpecs).should == ConstGetSpecs
|
|
61
|
+
ConstGetSpecs.const_get(:ConstGetSpecs).should == ConstGetSpecs
|
|
62
|
+
ConstGetSpecs::Bar::Baz.const_get(:BAZ).should == 300
|
|
63
|
+
ConstGetSpecs::Bar::Baz.const_get(:CS_CONST1).should == :const1
|
|
64
|
+
lambda { ConstGetSpecs::Bar::Baz.const_get(:BAR) }.should raise_error(NameError)
|
|
65
|
+
lambda { ConstGetSpecs::Bar::Baz.const_get(:FOO) }.should raise_error(NameError)
|
|
66
|
+
lambda { ConstGetSpecs::Bar::Baz.const_get(:Bar) }.should raise_error(NameError)
|
|
67
|
+
ConstGetSpecs::Bar::Baz.const_get(:ConstGetSpecs).should == ConstGetSpecs
|
|
68
|
+
ConstGetSpecs::Dog.const_get(:LEGS).should == 4
|
|
69
|
+
lambda { ConstGetSpecs::Dog.const_get(:Dog) }.should raise_error(NameError)
|
|
70
|
+
ConstGetSpecs::Bloudhound.const_get(:LEGS).should == 4
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "should not search parent scopes of classes and modules if inherit is false" do
|
|
74
|
+
lambda { Module.const_get(:ConstGetSpecs, false) }.should raise_error(NameError)
|
|
75
|
+
lambda { ConstGetSpecs.const_get(:ConstGetSpecs, false) }.should raise_error(NameError)
|
|
76
|
+
ConstGetSpecs::Dog.const_get(:LEGS, false).should == 4
|
|
77
|
+
lambda { ConstGetSpecs::Dog.const_get(:Dog, false) }.should raise_error(NameError)
|
|
78
|
+
lambda { ConstGetSpecs::Bloudhound.const_get(:LEGS, false) }.should raise_error(NameError)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should search parent scopes of classes and modules for Object regardless of inherit value" do
|
|
82
|
+
Object.const_get(:ConstGetSpecs).should == ConstGetSpecs
|
|
83
|
+
Object.const_get(:ConstGetSpecs, false).should == ConstGetSpecs
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require File.expand_path('../../fixtures/constants', __FILE__)
|
|
2
|
+
|
|
3
|
+
describe "Module#const_missing" do
|
|
4
|
+
it "is called when an undefined constant is referenced via literal form" do
|
|
5
|
+
ConstantSpecs::ClassA::CS_CONSTX.should == :CS_CONSTX
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "is called when an undefined constant is referenced via #const_get" do
|
|
9
|
+
ConstantSpecs::ClassA.const_get(:CS_CONSTX).should == :CS_CONSTX
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "raises NameError and includes the name of the value that wasn't found" do
|
|
13
|
+
lambda {
|
|
14
|
+
ConstantSpecs.const_missing("HelloMissing")
|
|
15
|
+
}.should raise_error(NameError, /ConstantSpecs::HelloMissing/)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require File.expand_path('../../fixtures/constants', __FILE__)
|
|
2
|
+
|
|
3
|
+
module ConstantSpecs
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
describe "Module#const_set" do
|
|
7
|
+
it "sets the constant specified by a String or Symbol to the given value" do
|
|
8
|
+
ConstantSpecs.const_set :CS_CONST401, :const401
|
|
9
|
+
ConstantSpecs::CS_CONST401.should == :const401
|
|
10
|
+
|
|
11
|
+
ConstantSpecs.const_set "CS_CONST402", :const402
|
|
12
|
+
ConstantSpecs.const_get(:CS_CONST402).should == :const402
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "returns the value set" do
|
|
16
|
+
ConstantSpecs.const_set(:CS_CONST403, :const403).should == :const403
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# PENDING: needs proper parser implementation
|
|
20
|
+
#
|
|
21
|
+
# it "sets the name of an anonymous module" do
|
|
22
|
+
# m = Module.new
|
|
23
|
+
# ConstantSpecs.const_set(:CS_CONST1000, m)
|
|
24
|
+
# m.name.should == "ConstantSpecs::CS_CONST1000"
|
|
25
|
+
# end
|
|
26
|
+
|
|
27
|
+
it "raises a NameError if the name does not start with a capital letter" do
|
|
28
|
+
lambda { ConstantSpecs.const_set "name", 1 }.should raise_error(NameError)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "raises a NameError if the name starts with a non-alphabetic character" do
|
|
32
|
+
lambda { ConstantSpecs.const_set "__CONSTX__", 1 }.should raise_error(NameError)
|
|
33
|
+
lambda { ConstantSpecs.const_set "@Name", 1 }.should raise_error(NameError)
|
|
34
|
+
lambda { ConstantSpecs.const_set "!Name", 1 }.should raise_error(NameError)
|
|
35
|
+
lambda { ConstantSpecs.const_set "::Name", 1 }.should raise_error(NameError)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "raises a NameError if the name contains non-word characters" do
|
|
39
|
+
# underscore (i.e., _) is a valid word character
|
|
40
|
+
ConstantSpecs.const_set("CS_CONST404", :const404).should == :const404
|
|
41
|
+
lambda { ConstantSpecs.const_set "Name=", 1 }.should raise_error(NameError)
|
|
42
|
+
lambda { ConstantSpecs.const_set "Name?", 1 }.should raise_error(NameError)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# PENDING: should_receive isn't available on opal-spec
|
|
46
|
+
#
|
|
47
|
+
# it "calls #to_str to convert the given name to a String" do
|
|
48
|
+
#
|
|
49
|
+
# name = mock("CS_CONST405")
|
|
50
|
+
# name.should_receive(:to_str).and_return("CS_CONST405")
|
|
51
|
+
# ConstantSpecs.const_set(name, :const405).should == :const405
|
|
52
|
+
# ConstantSpecs::CS_CONST405.should == :const405
|
|
53
|
+
# end
|
|
54
|
+
|
|
55
|
+
# PENDING: should_receive isn't available on opal-spec
|
|
56
|
+
#
|
|
57
|
+
# it "raises a TypeError if conversion to a String by calling #to_str fails" do
|
|
58
|
+
# name = mock('123')
|
|
59
|
+
# lambda { ConstantSpecs.const_set name, 1 }.should raise_error(TypeError)
|
|
60
|
+
#
|
|
61
|
+
# name.should_receive(:to_str).and_return(123)
|
|
62
|
+
# lambda { ConstantSpecs.const_set name, 1 }.should raise_error(TypeError)
|
|
63
|
+
# end
|
|
64
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module ConstantsSpecsModule
|
|
2
|
+
MOD_CONST1 = "1"
|
|
3
|
+
MOD_CONST2 = "2"
|
|
4
|
+
MOD_CONST3 = "3"
|
|
5
|
+
|
|
6
|
+
module Foo
|
|
7
|
+
FOO = "foo"
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class ConstantsSpecsClass
|
|
12
|
+
CLASS_CONST1 = "1"
|
|
13
|
+
CLASS_CONST2 = "2"
|
|
14
|
+
CLASS_CONST3 = "3"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class SubConstantsSpecsClass < ConstantsSpecsClass
|
|
18
|
+
CLASS_CONST4 = "4"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe "Module#constants" do
|
|
22
|
+
it "should return constants in global scope when called from Module or Class" do
|
|
23
|
+
result = Module.constants
|
|
24
|
+
result.should include("Module", "Object", "TrueClass", "FalseClass", "RUBY_ENGINE")
|
|
25
|
+
result2 = Class.constants
|
|
26
|
+
result.should == result2
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should only return constants and child modules defined directly on module" do
|
|
30
|
+
result = ConstantsSpecsModule.constants
|
|
31
|
+
result.size.should == 4
|
|
32
|
+
result.should include("MOD_CONST1", "MOD_CONST2", "MOD_CONST3", "Foo")
|
|
33
|
+
result = ConstantsSpecsModule::Foo.constants
|
|
34
|
+
result.size.should == 1
|
|
35
|
+
result.should include("FOO")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should only return constants defined directly on class" do
|
|
39
|
+
result = ConstantsSpecsClass.constants
|
|
40
|
+
result.size.should == 3
|
|
41
|
+
result.should include("CLASS_CONST1", "CLASS_CONST2", "CLASS_CONST3")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should include constants inherited from superclass" do
|
|
45
|
+
result = SubConstantsSpecsClass.constants
|
|
46
|
+
result.size.should == 4
|
|
47
|
+
result.should include("CLASS_CONST4", "CLASS_CONST1", "CLASS_CONST2", "CLASS_CONST3")
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
module ModuleSpecs
|
|
2
|
+
CONST = :plain_constant
|
|
3
|
+
|
|
4
|
+
class Subclass < Module
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
class SubclassSpec
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class RemoveClassVariable
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module LookupModInMod
|
|
14
|
+
INCS = :ethereal
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
module LookupMod
|
|
18
|
+
include LookupModInMod
|
|
19
|
+
|
|
20
|
+
MODS = :rockers
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class Lookup
|
|
24
|
+
include LookupMod
|
|
25
|
+
LOOKIE = :lookie
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class LookupChild < Lookup
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class Parent
|
|
32
|
+
# For private_class_method spec
|
|
33
|
+
#def self.private_method; end
|
|
34
|
+
#private_class_method :private_method
|
|
35
|
+
|
|
36
|
+
def undefed_method() end
|
|
37
|
+
undef_method :undefed_method
|
|
38
|
+
|
|
39
|
+
def parent_method; end
|
|
40
|
+
def another_parent_method; end
|
|
41
|
+
|
|
42
|
+
# For public_class_method spec
|
|
43
|
+
private
|
|
44
|
+
def self.public_method; end
|
|
45
|
+
# public_class_method :public_method
|
|
46
|
+
|
|
47
|
+
public
|
|
48
|
+
def public_parent() end
|
|
49
|
+
|
|
50
|
+
protected
|
|
51
|
+
def protected_parent() end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
def private_parent() end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
module Basic
|
|
58
|
+
def public_module() end
|
|
59
|
+
|
|
60
|
+
protected
|
|
61
|
+
def protected_module() end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
def private_module() end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
module Super
|
|
68
|
+
include Basic
|
|
69
|
+
|
|
70
|
+
def public_super_module() end
|
|
71
|
+
|
|
72
|
+
protected
|
|
73
|
+
def protected_super_module() end
|
|
74
|
+
|
|
75
|
+
private
|
|
76
|
+
def private_super_module() end
|
|
77
|
+
|
|
78
|
+
def super_included_method; end
|
|
79
|
+
|
|
80
|
+
class SuperChild
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
module Internal
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
class Child < Parent
|
|
88
|
+
include Super
|
|
89
|
+
|
|
90
|
+
class << self
|
|
91
|
+
# include Internal
|
|
92
|
+
end
|
|
93
|
+
attr_accessor :accessor_method
|
|
94
|
+
|
|
95
|
+
def undefed_child() end
|
|
96
|
+
|
|
97
|
+
def public_child() end
|
|
98
|
+
|
|
99
|
+
undef_method :parent_method
|
|
100
|
+
undef_method :another_parent_method
|
|
101
|
+
|
|
102
|
+
protected
|
|
103
|
+
def protected_child() end
|
|
104
|
+
|
|
105
|
+
private
|
|
106
|
+
def private_child() end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
class Grandchild < Child
|
|
110
|
+
undef_method :super_included_method
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
class Child2 < Parent
|
|
114
|
+
attr_reader :foo
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Be careful touching the Counts* classes as there used for testing
|
|
118
|
+
# private_instance_methods, public_instance_methods, etc. So adding, removing
|
|
119
|
+
# a method will break those tests.
|
|
120
|
+
module CountsMixin
|
|
121
|
+
def public_3; end
|
|
122
|
+
public :public_3
|
|
123
|
+
|
|
124
|
+
def private_3; end
|
|
125
|
+
private :private_3
|
|
126
|
+
|
|
127
|
+
def protected_3; end
|
|
128
|
+
protected :protected_3
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
class CountsParent
|
|
132
|
+
include CountsMixin
|
|
133
|
+
|
|
134
|
+
def public_2; end
|
|
135
|
+
|
|
136
|
+
private
|
|
137
|
+
def private_2; end
|
|
138
|
+
|
|
139
|
+
protected
|
|
140
|
+
def protected_2; end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
class CountsChild < CountsParent
|
|
144
|
+
def public_1; end
|
|
145
|
+
|
|
146
|
+
private
|
|
147
|
+
def private_1; end
|
|
148
|
+
|
|
149
|
+
protected
|
|
150
|
+
def protected_1; end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
module AddConstant
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
module A
|
|
157
|
+
CONSTANT_A = :a
|
|
158
|
+
OVERRIDE = :a
|
|
159
|
+
def ma(); :a; end
|
|
160
|
+
def self.cma(); :a; end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
module B
|
|
164
|
+
CONSTANT_B = :b
|
|
165
|
+
OVERRIDE = :b
|
|
166
|
+
include A
|
|
167
|
+
def mb(); :b; end
|
|
168
|
+
def self.cmb(); :b; end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
class C
|
|
172
|
+
OVERRIDE = :c
|
|
173
|
+
include B
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
module Z
|
|
177
|
+
MODULE_SPEC_TOPLEVEL_CONSTANT = 1
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
module Alias
|
|
181
|
+
def report() :report end
|
|
182
|
+
alias publish report
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
class Allonym
|
|
186
|
+
include ModuleSpecs::Alias
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
class Aliasing
|
|
190
|
+
def self.make_alias(*a)
|
|
191
|
+
alias_method(*a)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def public_one; 1; end
|
|
195
|
+
|
|
196
|
+
def public_two(n); n * 2; end
|
|
197
|
+
|
|
198
|
+
private
|
|
199
|
+
def private_one; 1; end
|
|
200
|
+
|
|
201
|
+
protected
|
|
202
|
+
def protected_one; 1; end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
module AliasingSuper
|
|
206
|
+
|
|
207
|
+
module Parent
|
|
208
|
+
def super_call(arg)
|
|
209
|
+
arg
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
module Child
|
|
214
|
+
include Parent
|
|
215
|
+
def super_call(arg)
|
|
216
|
+
super(arg)
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
class Target
|
|
221
|
+
include Child
|
|
222
|
+
alias_method :alias_super_call, :super_call
|
|
223
|
+
alias_method :super_call, :alias_super_call
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
module ReopeningModule
|
|
229
|
+
def foo; true; end
|
|
230
|
+
# module_function :foo
|
|
231
|
+
private :foo
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
# Yes, we want to re-open the module
|
|
235
|
+
module ReopeningModule
|
|
236
|
+
alias :foo2 :foo
|
|
237
|
+
# module_function :foo2
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
module Nesting
|
|
241
|
+
@tests = {}
|
|
242
|
+
def self.[](name); @tests[name]; end
|
|
243
|
+
def self.[]=(name, val); @tests[name] = val; end
|
|
244
|
+
def self.meta; class << self; self; end; end
|
|
245
|
+
|
|
246
|
+
# Nesting[:basic] = Module.nesting
|
|
247
|
+
|
|
248
|
+
module ::ModuleSpecs
|
|
249
|
+
# Nesting[:open_first_level] = Module.nesting
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
class << self
|
|
253
|
+
# Nesting[:open_meta] = Module.nesting
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
def self.called_from_module_method
|
|
257
|
+
# Module.nesting
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
class NestedClass
|
|
261
|
+
# Nesting[:nest_class] = Module.nesting
|
|
262
|
+
|
|
263
|
+
def self.called_from_class_method
|
|
264
|
+
# Module.nesting
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def called_from_inst_method
|
|
268
|
+
# Module.nesting
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
# Nesting[:first_level] = Module.nesting
|
|
275
|
+
|
|
276
|
+
module InstanceMethMod
|
|
277
|
+
def bar(); :bar; end
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
class InstanceMeth
|
|
281
|
+
include InstanceMethMod
|
|
282
|
+
def foo(); :foo; end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
class InstanceMethChild < InstanceMeth
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
module ClassVars
|
|
289
|
+
class A
|
|
290
|
+
@@a_cvar = :a_cvar
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
module M
|
|
294
|
+
@@m_cvar = :m_cvar
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
class B < A
|
|
298
|
+
include M
|
|
299
|
+
|
|
300
|
+
@@b_cvar = :b_cvar
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
class CVars
|
|
305
|
+
@@cls = :class
|
|
306
|
+
|
|
307
|
+
class << self
|
|
308
|
+
def cls
|
|
309
|
+
@@cls
|
|
310
|
+
end
|
|
311
|
+
@@meta = :meta
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
def self.meta
|
|
315
|
+
@@meta
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
def meta
|
|
319
|
+
@@meta
|
|
320
|
+
end
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
module MVars
|
|
324
|
+
@@mvar = :mvar
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
class SubModule < Module
|
|
328
|
+
attr_reader :special
|
|
329
|
+
def initialize
|
|
330
|
+
@special = 10
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
module MA; end
|
|
335
|
+
module MB
|
|
336
|
+
include MA
|
|
337
|
+
end
|
|
338
|
+
module MC; end
|
|
339
|
+
|
|
340
|
+
class MultipleIncludes
|
|
341
|
+
include MB
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
# empty modules
|
|
345
|
+
module M1; end
|
|
346
|
+
module M2; end
|
|
347
|
+
|
|
348
|
+
module Autoload
|
|
349
|
+
def self.use_ex1
|
|
350
|
+
begin
|
|
351
|
+
begin
|
|
352
|
+
raise "test exception"
|
|
353
|
+
rescue ModuleSpecs::Autoload::EX1
|
|
354
|
+
end
|
|
355
|
+
rescue RuntimeError
|
|
356
|
+
return :good
|
|
357
|
+
end
|
|
358
|
+
end
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
# This class isn't inherited from or included in anywhere. It exists to test
|
|
362
|
+
# 1.9's constant scoping rules
|
|
363
|
+
class Detached
|
|
364
|
+
DETATCHED_CONSTANT = :d
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
class ParentPrivateMethodRedef
|
|
368
|
+
private
|
|
369
|
+
def private_method_redefined
|
|
370
|
+
:before_redefinition
|
|
371
|
+
end
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
class ChildPrivateMethodMadePublic < ParentPrivateMethodRedef
|
|
375
|
+
public :private_method_redefined
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
class ParentPrivateMethodRedef
|
|
379
|
+
def private_method_redefined
|
|
380
|
+
:after_redefinition
|
|
381
|
+
end
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
module CyclicAppendA
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
module CyclicAppendB
|
|
388
|
+
include CyclicAppendA
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
module ExtendObject
|
|
392
|
+
C = :test
|
|
393
|
+
def test_method
|
|
394
|
+
"hello test"
|
|
395
|
+
end
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
module ExtendObjectPrivate
|
|
399
|
+
class << self
|
|
400
|
+
def extend_object(obj)
|
|
401
|
+
ScratchPad.record :extended
|
|
402
|
+
end
|
|
403
|
+
private :extend_object
|
|
404
|
+
end
|
|
405
|
+
end
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
class Object
|
|
409
|
+
def module_specs_public_method_on_object; end
|
|
410
|
+
|
|
411
|
+
def module_specs_private_method_on_object; end
|
|
412
|
+
private :module_specs_private_method_on_object
|
|
413
|
+
|
|
414
|
+
def module_specs_protected_method_on_object; end
|
|
415
|
+
protected :module_specs_private_method_on_object
|
|
416
|
+
|
|
417
|
+
def module_specs_private_method_on_object_for_kernel_public; end
|
|
418
|
+
private :module_specs_private_method_on_object_for_kernel_public
|
|
419
|
+
|
|
420
|
+
def module_specs_public_method_on_object_for_kernel_protected; end
|
|
421
|
+
def module_specs_public_method_on_object_for_kernel_private; end
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
module Kernel
|
|
425
|
+
def module_specs_public_method_on_kernel; end
|
|
426
|
+
|
|
427
|
+
alias_method :module_specs_alias_on_kernel, :module_specs_public_method_on_object
|
|
428
|
+
|
|
429
|
+
public :module_specs_private_method_on_object_for_kernel_public
|
|
430
|
+
protected :module_specs_public_method_on_object_for_kernel_protected
|
|
431
|
+
private :module_specs_public_method_on_object_for_kernel_private
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
# ModuleSpecs::Nesting[:root_level] = Module.nesting
|