opal 1.2.0 → 1.3.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.eslintrc.await.js +6 -0
- data/.eslintrc.js +34 -0
- data/.github/workflows/build.yml +8 -0
- data/.rubocop.yml +9 -0
- data/CHANGELOG.md +4 -0
- data/README.md +1 -1
- data/Rakefile +1 -0
- data/UNRELEASED.md +64 -38
- data/docs/async.md +109 -0
- data/docs/roda-sprockets.md +0 -2
- data/exe/opal +2 -0
- data/exe/opal-repl +2 -2
- data/lib/opal/builder.rb +5 -1
- data/lib/opal/builder_processors.rb +7 -2
- data/lib/opal/cache/file_cache.rb +119 -0
- data/lib/opal/cache.rb +71 -0
- data/lib/opal/cli.rb +35 -1
- data/lib/opal/cli_options.rb +21 -0
- data/lib/opal/cli_runners/chrome.rb +21 -14
- data/lib/opal/cli_runners/chrome_cdp_interface.js +30285 -0
- data/lib/opal/cli_runners/{chrome.js → chrome_cdp_interface.rb} +27 -6
- data/lib/opal/cli_runners/compiler.rb +2 -1
- data/lib/opal/cli_runners/gjs.rb +27 -0
- data/lib/opal/cli_runners/mini_racer.rb +36 -0
- data/lib/opal/cli_runners/source-map-support-browser.js +276 -91
- data/lib/opal/cli_runners/source-map-support-node.js +276 -91
- data/lib/opal/cli_runners/source-map-support.js +60 -18
- data/lib/opal/cli_runners.rb +2 -0
- data/lib/opal/compiler.rb +99 -10
- data/lib/opal/fragment.rb +77 -14
- data/lib/opal/nodes/args/extract_kwrestarg.rb +6 -4
- data/lib/opal/nodes/args/extract_restarg.rb +10 -12
- data/lib/opal/nodes/args.rb +28 -0
- data/lib/opal/nodes/base.rb +29 -5
- data/lib/opal/nodes/call.rb +123 -2
- data/lib/opal/nodes/case.rb +7 -1
- data/lib/opal/nodes/class.rb +12 -2
- data/lib/opal/nodes/def.rb +3 -23
- data/lib/opal/nodes/definitions.rb +21 -4
- data/lib/opal/nodes/helpers.rb +2 -2
- data/lib/opal/nodes/if.rb +39 -9
- data/lib/opal/nodes/iter.rb +15 -3
- data/lib/opal/nodes/lambda.rb +3 -1
- data/lib/opal/nodes/literal.rb +13 -7
- data/lib/opal/nodes/logic.rb +2 -2
- data/lib/opal/nodes/module.rb +12 -2
- data/lib/opal/nodes/rescue.rb +59 -34
- data/lib/opal/nodes/scope.rb +88 -6
- data/lib/opal/nodes/super.rb +52 -25
- data/lib/opal/nodes/top.rb +13 -7
- data/lib/opal/nodes/while.rb +7 -1
- data/lib/opal/parser/patch.rb +2 -1
- data/lib/opal/repl.rb +137 -49
- data/lib/opal/rewriters/binary_operator_assignment.rb +10 -10
- data/lib/opal/rewriters/block_to_iter.rb +3 -3
- data/lib/opal/rewriters/for_rewriter.rb +7 -7
- data/lib/opal/rewriters/js_reserved_words.rb +5 -3
- data/lib/opal/source_map/file.rb +7 -4
- data/lib/opal/source_map/map.rb +17 -3
- data/lib/opal/version.rb +1 -1
- data/opal/corelib/array.rb +2 -2
- data/opal/corelib/binding.rb +46 -0
- data/opal/corelib/boolean.rb +54 -4
- data/opal/corelib/class.rb +2 -0
- data/opal/corelib/constants.rb +2 -2
- data/opal/corelib/error.rb +98 -12
- data/opal/corelib/io.rb +250 -38
- data/opal/corelib/kernel/format.rb +5 -2
- data/opal/corelib/kernel.rb +44 -23
- data/opal/corelib/main.rb +5 -0
- data/opal/corelib/method.rb +1 -0
- data/opal/corelib/module.rb +28 -0
- data/opal/corelib/number.rb +12 -1
- data/opal/corelib/random/seedrandom.js.rb +2 -2
- data/opal/corelib/regexp.rb +47 -3
- data/opal/corelib/runtime.js +152 -12
- data/opal/corelib/string/encoding.rb +17 -17
- data/opal/corelib/string.rb +2 -0
- data/opal/corelib/struct.rb +10 -3
- data/opal/corelib/trace_point.rb +57 -0
- data/opal/opal/full.rb +2 -0
- data/package.json +3 -2
- data/spec/filters/bugs/array.rb +0 -1
- data/spec/filters/bugs/basicobject.rb +0 -1
- data/spec/filters/bugs/binding.rb +27 -0
- data/spec/filters/bugs/enumerator.rb +132 -0
- data/spec/filters/bugs/exception.rb +70 -93
- data/spec/filters/bugs/float.rb +0 -1
- data/spec/filters/bugs/kernel.rb +3 -9
- data/spec/filters/bugs/language.rb +15 -58
- data/spec/filters/bugs/main.rb +16 -0
- data/spec/filters/bugs/matrix.rb +39 -0
- data/spec/filters/bugs/method.rb +0 -2
- data/spec/filters/bugs/module.rb +36 -79
- data/spec/filters/bugs/proc.rb +0 -1
- data/spec/filters/bugs/regexp.rb +0 -16
- data/spec/filters/bugs/trace_point.rb +12 -0
- data/spec/filters/bugs/warnings.rb +0 -4
- data/spec/filters/unsupported/freeze.rb +2 -0
- data/spec/filters/unsupported/privacy.rb +4 -0
- data/spec/lib/compiler_spec.rb +7 -1
- data/spec/lib/repl_spec.rb +4 -2
- data/spec/lib/source_map/file_spec.rb +1 -1
- data/spec/mspec-opal/formatters.rb +18 -4
- data/spec/mspec-opal/runner.rb +2 -2
- data/spec/opal/core/boolean_spec.rb +44 -0
- data/spec/opal/core/hash_spec.rb +8 -0
- data/spec/opal/core/number/to_s_spec.rb +11 -0
- data/spec/opal/stdlib/json/ext_spec.rb +3 -3
- data/spec/opal/stdlib/logger/logger_spec.rb +10 -1
- data/spec/ruby_specs +18 -0
- data/stdlib/await.rb +83 -0
- data/stdlib/base64.rb +4 -4
- data/stdlib/bigdecimal/bignumber.js.rb +4 -2
- data/stdlib/bigdecimal.rb +1 -0
- data/stdlib/gjs/io.rb +33 -0
- data/stdlib/gjs/kernel.rb +5 -0
- data/stdlib/gjs.rb +2 -0
- data/stdlib/js.rb +4 -0
- data/stdlib/json.rb +3 -3
- data/stdlib/logger.rb +1 -1
- data/stdlib/nashorn/file.rb +2 -0
- data/stdlib/nodejs/env.rb +7 -0
- data/stdlib/nodejs/file.rb +6 -41
- data/stdlib/nodejs/io.rb +21 -5
- data/stdlib/nodejs/js-yaml-3-6-1.js +2 -2
- data/stdlib/opal/miniracer.rb +6 -0
- data/stdlib/opal/platform.rb +4 -0
- data/stdlib/opal/repl_js.rb +5 -0
- data/stdlib/opal/replutils.rb +271 -0
- data/stdlib/opal-parser.rb +24 -11
- data/stdlib/opal-platform.rb +8 -0
- data/stdlib/promise/v2.rb +16 -4
- data/stdlib/promise.rb +14 -0
- data/stdlib/stringio.rb +13 -110
- data/stdlib/thread.rb +29 -0
- data/tasks/building.rake +10 -4
- data/tasks/linting-parse-eslint-results.js +39 -0
- data/tasks/linting.rake +38 -28
- data/tasks/performance/asciidoctor_test.rb.erb +6 -0
- data/tasks/performance/optimization_status.rb +77 -0
- data/tasks/performance.rake +149 -0
- data/tasks/testing.rake +9 -1
- data/test/nodejs/test_await.rb +169 -0
- data/test/opal/promisev2/test_error.rb +9 -3
- data/test/opal/unsupported_and_bugs.rb +5 -0
- data/vendored-minitest/minitest/benchmark.rb +9 -7
- data/vendored-minitest/minitest/test.rb +14 -12
- data/vendored-minitest/minitest.rb +19 -16
- data/yarn.lock +686 -117
- metadata +60 -23
- data/.jshintrc +0 -41
- data/spec/filters/unsupported/refinements.rb +0 -8
- data/vendored-minitest/minitest/hell.rb +0 -11
- data/vendored-minitest/minitest/parallel.rb +0 -65
- data/vendored-minitest/minitest/pride.rb +0 -4
- data/vendored-minitest/minitest/pride_plugin.rb +0 -142
- data/vendored-minitest/minitest/unit.rb +0 -45
data/spec/filters/bugs/module.rb
CHANGED
@@ -71,8 +71,7 @@ opal_filter "Module" do
|
|
71
71
|
fails "Module#autoload when changing $LOAD_PATH does not reload a file due to a different load path"
|
72
72
|
fails "Module#autoload? returns nil if no file has been registered for a constant"
|
73
73
|
fails "Module#autoload? returns the name of the file that will be autoloaded"
|
74
|
-
fails "Module#class_eval activates refinements from the eval scope
|
75
|
-
fails "Module#class_eval activates refinements from the eval scope" # NoMethodError: undefined method `refine' for #<Module:0x90be>
|
74
|
+
fails "Module#class_eval activates refinements from the eval scope" # NoMethodError: undefined method `foo' for #<ModuleSpecs::NamedClass:0x4a168>
|
76
75
|
fails "Module#class_eval converts a non-string filename to a string using to_str"
|
77
76
|
fails "Module#class_eval converts non string eval-string to string using to_str"
|
78
77
|
fails "Module#class_eval raises a TypeError when the given eval-string can't be converted to string using to_str"
|
@@ -160,8 +159,7 @@ opal_filter "Module" do
|
|
160
159
|
fails "Module#method_defined? returns true if a public or private method with the given name is defined in self, self's ancestors or one of self's included modules"
|
161
160
|
fails "Module#method_defined? when passed false as a second optional argument checks only the class itself" # ArgumentError: [Child.method_defined?] wrong number of arguments(2 for 1)
|
162
161
|
fails "Module#method_defined? when passed true as a second optional argument performs a lookup in ancestors" # ArgumentError: [Child.method_defined?] wrong number of arguments(2 for 1)
|
163
|
-
fails "Module#module_eval activates refinements from the eval scope
|
164
|
-
fails "Module#module_eval activates refinements from the eval scope" # NoMethodError: undefined method `refine' for #<Module:0x88e4>
|
162
|
+
fails "Module#module_eval activates refinements from the eval scope" # NoMethodError: undefined method `foo' for #<ModuleSpecs::NamedClass:0x81f82>
|
165
163
|
fails "Module#module_eval converts a non-string filename to a string using to_str"
|
166
164
|
fails "Module#module_eval converts non string eval-string to string using to_str"
|
167
165
|
fails "Module#module_eval raises a TypeError when the given eval-string can't be converted to string using to_str"
|
@@ -197,62 +195,32 @@ opal_filter "Module" do
|
|
197
195
|
fails "Module#protected_method_defined? when passed false as a second optional argument checks only the class itself" # ArgumentError: [Child.private_method_defined?] wrong number of arguments(2 for 1)
|
198
196
|
fails "Module#protected_method_defined? when passed true as a second optional argument performs a lookup in ancestors" # ArgumentError: [Child.private_method_defined?] wrong number of arguments(2 for 1)
|
199
197
|
fails "Module#public_method_defined? raises a TypeError if passed an Integer" # Expected TypeError but no exception was raised (false was returned)
|
200
|
-
fails "Module#refine
|
201
|
-
fails "Module#refine
|
202
|
-
fails "Module#refine and
|
203
|
-
fails "Module#refine
|
204
|
-
fails "Module#refine
|
205
|
-
fails "Module#refine
|
206
|
-
fails "Module#refine
|
207
|
-
fails "Module#refine
|
208
|
-
fails "Module#refine
|
209
|
-
fails "Module#refine
|
210
|
-
fails "Module#refine
|
211
|
-
fails "Module#refine
|
212
|
-
fails "Module#refine for methods accessed indirectly is honored by
|
213
|
-
fails "Module#refine for methods accessed indirectly is honored by
|
214
|
-
fails "Module#refine
|
215
|
-
fails "Module#refine
|
216
|
-
fails "Module#refine
|
217
|
-
fails "Module#refine
|
218
|
-
fails "Module#refine
|
219
|
-
fails "Module#refine
|
220
|
-
fails "Module#refine
|
221
|
-
fails "Module#refine
|
222
|
-
fails "Module#refine
|
223
|
-
fails "Module#refine
|
224
|
-
fails "Module#refine
|
225
|
-
fails "Module#refine
|
226
|
-
fails "Module#refine for methods accessed indirectly is not honored by Kernel#public_send" # NoMethodError: undefined method `refine' for #<Module:0x21ea0>
|
227
|
-
fails "Module#refine for methods accessed indirectly is not honored by Kernel#respond_to?" # NoMethodError: undefined method `refine' for #<Module:0x3aea6>
|
228
|
-
fails "Module#refine makes available all refinements from the same module" # NoMethodError: undefined method `refine' for #<Module:0x3ae88>
|
229
|
-
fails "Module#refine method lookup looks in included modules from the refinement then" # NoMethodError: undefined method `refine' for #<Module:0x3aea0>
|
230
|
-
fails "Module#refine method lookup looks in later included modules of the refined module first" # NoMethodError: undefined method `refine' for #<Module:0x230>
|
231
|
-
fails "Module#refine method lookup looks in prepended modules from the refinement first" # NoMethodError: undefined method `refine' for #<Module:0x3ae98>
|
232
|
-
fails "Module#refine method lookup looks in refinement then" # NoMethodError: undefined method `refine' for #<Module:0x3ae94>
|
233
|
-
fails "Module#refine method lookup looks in the class then" # NoMethodError: undefined method `refine' for #<Module:0x3ae90>
|
234
|
-
fails "Module#refine method lookup looks in the included modules for builtin methods" # NoMethodError: undefined method `insert' for "rubyexe.rb"
|
235
|
-
fails "Module#refine method lookup looks in the object singleton class first" # NoMethodError: undefined method `refine' for #<Module:0x3ae9c>
|
236
|
-
fails "Module#refine module inclusion activates all refinements from all ancestors" # NoMethodError: undefined method `refine' for #<Module:0x3aed4>
|
237
|
-
fails "Module#refine module inclusion overrides methods of ancestors by methods in descendants" # NoMethodError: undefined method `refine' for #<Module:0x3aed0>
|
238
|
-
fails "Module#refine raises ArgumentError if not given a block" # NoMethodError: undefined method `refine' for #<Module:0x3ae5c>
|
239
|
-
fails "Module#refine raises ArgumentError if not passed an argument" # NoMethodError: undefined method `refine' for #<Module:0x3ae80>
|
240
|
-
fails "Module#refine raises TypeError if not passed a class" # NoMethodError: undefined method `refine' for #<Module:0x3ae6e>
|
241
|
-
fails "Module#refine returns created anonymous module" # NoMethodError: undefined method `refine' for #<Module:0x3ae68>
|
242
|
-
fails "Module#refine runs its block in an anonymous module" # NoMethodError: undefined method `refine' for #<Module:0x3ae76>
|
243
|
-
fails "Module#refine uses the same anonymous module for future refines of the same class" # NoMethodError: undefined method `refine' for #<Module:0x3ae84>
|
244
|
-
fails "Module#refine when super is called in a refinement does't have access to active refinements for C from included module" # NoMethodError: undefined method `refine' for #<Module:0x242>
|
245
|
-
fails "Module#refine when super is called in a refinement does't have access to other active refinements from included module" # NoMethodError: undefined method `refine' for #<Module:0x24a>
|
246
|
-
fails "Module#refine when super is called in a refinement looks in the another active refinement if super called from included modules" # NoMethodError: undefined method `refine' for #<Module:0x252>
|
247
|
-
fails "Module#refine when super is called in a refinement looks in the current active refinement from included modules" # NoMethodError: undefined method `refine' for #<Module:0x256>
|
248
|
-
fails "Module#refine when super is called in a refinement looks in the included to refinery module" # NoMethodError: undefined method `refine' for #<Module:0x3aec8>
|
249
|
-
fails "Module#refine when super is called in a refinement looks in the lexical scope refinements before other active refinements" # NoMethodError: undefined method `refine' for #<Module:0x236>
|
250
|
-
fails "Module#refine when super is called in a refinement looks in the refined ancestors from included module" # NoMethodError: undefined method `refine' for #<Module:0x23e>
|
251
|
-
fails "Module#refine when super is called in a refinement looks in the refined class even if there is another active refinement" # NoMethodError: undefined method `refine' for #<Module:0x3aec4>
|
252
|
-
fails "Module#refine when super is called in a refinement looks in the refined class first if called from refined method" # NoMethodError: undefined method `refine' for #<Module:0x246>
|
253
|
-
fails "Module#refine when super is called in a refinement looks in the refined class from included module" # NoMethodError: undefined method `refine' for #<Module:0x23a>
|
254
|
-
fails "Module#refine when super is called in a refinement looks in the refined class" # NoMethodError: undefined method `refine' for #<Module:0x3aecc>
|
255
|
-
fails "Module#refine when super is called in a refinement looks only in the refined class even if there is another active refinement" # NoMethodError: undefined method `refine' for #<Module:0x24e>
|
198
|
+
fails "Module#refine and alias aliases a method within a refinement module, but not outside it" # NameError: undefined method `count' for class `'
|
199
|
+
fails "Module#refine and alias_method aliases a method within a refinement module, but not outside it" # NameError: undefined method `count' for class `'
|
200
|
+
fails "Module#refine and instance_methods returns a list of methods including those of the refined module" # Expected ["to_json_format", "initialize", "&", "|", "*", "+", "-", "<<", "<=>", "==", "[]", "[]=", "any?", "assoc", "at", "bsearch_index", "bsearch", "cycle", "clear", "count", "initialize_copy", "collect", "collect!", "combination", "repeated_combination", "compact", "compact!", "concat", "delete", "delete_at", "delete_if", "difference", "dig", "drop", "dup", "each", "each_index", "empty?", "eql?", "fetch", "fill", "first", "flatten", "flatten!", "hash", "include?", "index", "insert", "inspect", "intersection", "join", "keep_if", "last", "length", "map", "map!", "max", "min", "permutation", "repeated_permutation", "pop", "product", "push", "append", "rassoc", "reject", "reject!", "replace", "reverse", "reverse!", "reverse_each", "rindex", "rotate", "rotate!", "sample", "select", "select!", "filter", "filter!", "shift", "size", "shuffle", "shuffle!", "slice", "slice!", "sort", "sort!", "sort_by!", "take", "take_while", "to_a", "to_ary", "to_h", "to_s", "transpose", "union", "uniq", "uniq!", "unshift", "prepend", "values_at", "zip", "instance_variables", "pack", "pretty_print", "pretty_print_cycle", "__marshal__", "deconstruct", "all?", "chunk", "chunk_while", "collect_concat", "detect", "drop_while", "each_cons", "each_entry", "each_slice", "each_with_index", "each_with_object", "entries", "filter_map", "find", "find_all", "find_index", "flat_map", "grep", "grep_v", "group_by", "inject", "lazy", "enumerator_size", "max_by", "member?", "min_by", "minmax", "minmax_by", "none?", "one?", "partition", "reduce", "slice_before", "slice_after", "slice_when", "sort_by", "sum", "tally", "to_set", "require", "using", "guard", "guard_not", "with_feature", "without_feature", "new_fd", "new_io", "should", "should_not", "version_is", "ruby_version_is", "suppress_warning", "suppress_keyword_warning", "should_receive", "should_not_receive", "stub!", "mock", "mock_int", "mock_numeric", "evaluate", "before", "after", "describe", "it", "it_should_behave_like", "context", "specify", "it_behaves_like", "ruby_bug", "conflicts_with", "big_endian", "little_endian", "platform_is", "platform_is_not", "quarantine!", "not_supported_on", "as_superuser", "as_user", "argf", "argv", "new_datetime", "with_timezone", "fixture", "flunk", "cp", "mkdir_p", "rm_r", "touch", "mock_to_path", "nan_value", "infinity_value", "bignum_value", "max_long", "min_long", "fixnum_max", "fixnum_min", "ruby_exe_options", "resolve_ruby_exe", "ruby_exe", "ruby_cmd", "opal_filter", "opal_unsupported_filter", "frozen_error_class", "pack_format", "module_specs_public_method_on_object", "module_specs_private_method_on_object", "module_specs_protected_method_on_object", "module_specs_private_method_on_object_for_kernel_public", "module_specs_public_method_on_object_for_kernel_protected", "module_specs_public_method_on_object_for_kernel_private", "unpack_format", "toplevel_define_other_method", "some_toplevel_method", "public_toplevel_method", "main_public_method", "main_public_method2", "main_private_method", "main_private_method2", "check_autoload", "defined_specs_method", "defined_specs_receiver", "expect", "eq", "pretty_print_instance_variables", "pretty_print_inspect", "method_missing", "=~", "!~", "===", "method", "methods", "public_methods", "Array", "at_exit", "caller", "class", "copy_instance_variables", "copy_singleton_methods", "clone", "initialize_clone", "define_singleton_method", "initialize_dup", "enum_for", "to_enum", "equal?", "exit", "extend", "instance_of?", "instance_variable_defined?", "instance_variable_get", "instance_variable_set", "remove_instance_variable", "Integer", "Float", "Hash", "is_a?", "itself", "kind_of?", "lambda", "load", "loop", "nil?", "object_id", "printf", "proc", "puts", "p", "print", "warn", "raise", "fail", "rand", "respond_to?", "respond_to_missing?", "require_relative", "require_tree", "send", "public_send", "singleton_class", "sleep", "srand", "String", "tap", "to_proc", "catch", "throw", "open", "yield_self", "then", "format", "sprintf", "Complex", "Rational", "freeze", "frozen?", "taint", "untaint", "tainted?", "private_methods", "private_instance_methods", "eval", "node_require", "Pathname", "require_remote", "pretty_inspect", "pp", "opal_parse", "eval_js", "binding", "BigDecimal", "module_specs_public_method_on_kernel", "module_specs_alias_on_kernel", "__send__", "!=", "__id__", "!", "instance_eval", "instance_exec", "singleton_method_added", "singleton_method_removed", "singleton_method_undefined"] == [] to be truthy but was false
|
201
|
+
fails "Module#refine applies refinements to calls in the refine block" # NoMethodError: undefined method `foo' for "hello"
|
202
|
+
fails "Module#refine does not override methods in subclasses" # Expected "foo from refinement" == "foo from subclass" to be truthy but was false
|
203
|
+
fails "Module#refine for methods accessed indirectly is honored by BasicObject#__send__" # Expected "foo" == "foo from refinement" to be truthy but was false
|
204
|
+
fails "Module#refine for methods accessed indirectly is honored by Kernel#instance_method" # NameError: undefined method `foo' for class `'
|
205
|
+
fails "Module#refine for methods accessed indirectly is honored by Kernel#method" # NameError: undefined method `foo' for class `#<Class:0x6854>'
|
206
|
+
fails "Module#refine for methods accessed indirectly is honored by Kernel#public_method" # NoMethodError: undefined method `public_method' for #<#<Class:0x1b194>:0x1b196>
|
207
|
+
fails "Module#refine for methods accessed indirectly is honored by Kernel#public_send" # Expected "foo" == "foo from refinement" to be truthy but was false
|
208
|
+
fails "Module#refine for methods accessed indirectly is honored by Kernel#respond_to?" # Expected false == true to be truthy but was false
|
209
|
+
fails "Module#refine for methods accessed indirectly is honored by Kernel#send" # Expected "foo" == "foo from refinement" to be truthy but was false
|
210
|
+
fails "Module#refine for methods accessed indirectly is honored by Symbol#to_proc"
|
211
|
+
fails "Module#refine for methods accessed indirectly is honored by string interpolation"
|
212
|
+
fails "Module#refine looks in the included modules for builtin methods"
|
213
|
+
fails "Module#refine makes available all refinements from the same module" # NoMethodError: undefined method `dump' for "1"
|
214
|
+
fails "Module#refine method lookup looks in the included modules for builtin methods" # NoMethodError: undefined method `tmp' for #<MSpecEnv:0x1aaee>
|
215
|
+
fails "Module#refine method lookup looks in the object singleton class first" # Expected "foo from refinement" == "foo from singleton class" to be truthy but was false
|
216
|
+
fails "Module#refine module inclusion activates all refinements from all ancestors" # NoMethodError: undefined method `to_json_format' for 5
|
217
|
+
fails "Module#refine module inclusion overrides methods of ancestors by methods in descendants" # NoMethodError: undefined method `to_json_format' for 5
|
218
|
+
fails "Module#refine raises ArgumentError if not given a block" # Expected ArgumentError but got: LocalJumpError (no block given)
|
219
|
+
fails "Module#refine raises TypeError if not passed a class" # Expected TypeError but no exception was raised (#<Module:0x1abe8> was returned)
|
220
|
+
fails "Module#refine when super is called in a refinement looks in the another active refinement if super called from included modules" # Expected ["B", "C"] == ["B", "A", "C"] to be truthy but was false
|
221
|
+
fails "Module#refine when super is called in a refinement looks in the current active refinement from included modules" # Expected ["B", "C"] == ["B", "A", "LAST", "C"] to be truthy but was false
|
222
|
+
fails "Module#refine when super is called in a refinement looks in the included to refinery module" # Expected "foo" == "foo from included module" to be truthy but was false
|
223
|
+
fails "Module#refine when super is called in a refinement looks in the lexical scope refinements before other active refinements" # Expected ["A", "C"] == ["A", "LOCAL", "C"] to be truthy but was false
|
256
224
|
fails "Module#remove_const calls #to_str to convert the given name to a String"
|
257
225
|
fails "Module#remove_const raises a TypeError if conversion to a String by calling #to_str fails"
|
258
226
|
fails "Module#remove_const returns nil when removing autoloaded constant"
|
@@ -274,23 +242,12 @@ opal_filter "Module" do
|
|
274
242
|
fails "Module#undef_method raises a NameError when passed a missing name for a metaclass" # Expected NameError (/undefined method `not_exist' for class `String'/) but got: NameError (method 'not_exist' not defined in )
|
275
243
|
fails "Module#undef_method raises a NameError when passed a missing name for a module" # Expected NameError (/undefined method `not_exist' for module `#<Module:0xa502>'/) but got: NameError (method 'not_exist' not defined in )
|
276
244
|
fails "Module#undef_method raises a NameError when passed a missing name for a singleton class" # Expected NameError (/undefined method `not_exist' for class `#<Class:#<:0xa51a>>'/) but got: NameError (method 'not_exist' not defined in )
|
277
|
-
fails "Module#using
|
278
|
-
fails "Module#using
|
279
|
-
fails "Module#using
|
280
|
-
fails "Module#using
|
281
|
-
fails "Module#using
|
282
|
-
fails "Module#using
|
283
|
-
fails "Module#using
|
284
|
-
fails "Module#using
|
285
|
-
fails "Module#using returns self" # NoMethodError: undefined method `using' for #<Module:0x2a022>
|
286
|
-
fails "Module#using scope of refinement is active for block called via instance_eval" # NoMethodError: undefined method `refine' for #<Module:0x102>
|
287
|
-
fails "Module#using scope of refinement is active for block called via instance_exec" # NoMethodError: undefined method `refine' for #<Module:0xfe>
|
288
|
-
fails "Module#using scope of refinement is active for class defined via Class.new {}" # NoMethodError: undefined method `refine' for #<Module:0x106>
|
289
|
-
fails "Module#using scope of refinement is active for method defined in a scope wherever it's called" # NoMethodError: undefined method `refine' for #<Module:0x2a06a>
|
290
|
-
fails "Module#using scope of refinement is active for module defined via Module.new {}" # NoMethodError: undefined method `refine' for #<Module:0x10a>
|
291
|
-
fails "Module#using scope of refinement is active until the end of current class/module" # NoMethodError: undefined method `refine' for #<Module:0x2a07a>
|
292
|
-
fails "Module#using scope of refinement is not active before the `using` call" # NoMethodError: undefined method `refine' for #<Module:0x2a05e>
|
293
|
-
fails "Module#using scope of refinement is not active for code defined outside the current scope" # NoMethodError: undefined method `refine' for #<Module:0x2a072>
|
294
|
-
fails "Module#using scope of refinement is not active when class/module reopens" # NoMethodError: undefined method `refine' for #<Module:0x2a056>
|
295
|
-
fails "Module#using works in classes too" # NoMethodError: undefined method `refine' for #<Module:0x2a01c>
|
245
|
+
fails "Module#using does not accept class" # Expected TypeError but no exception was raised (#<Module:0x3dd76> was returned)
|
246
|
+
fails "Module#using imports class refinements from module into the current class/module" # NoMethodError: undefined method `foo' for 1
|
247
|
+
fails "Module#using raises TypeError if passed something other than module" # Expected TypeError but no exception was raised (#<Module:0x3dd66> was returned)
|
248
|
+
fails "Module#using scope of refinement is active for block called via instance_eval" # TypeError: can't define singleton
|
249
|
+
fails "Module#using scope of refinement is active for block called via instance_exec" # NoMethodError: undefined method `foo' for 1
|
250
|
+
fails "Module#using scope of refinement is active for class defined via Class.new {}" # NoMethodError: undefined method `foo' for 1
|
251
|
+
fails "Module#using scope of refinement is active for module defined via Module.new {}" # NoMethodError: undefined method `foo' for 1
|
252
|
+
fails "Module#using works in classes too" # NoMethodError: undefined method `foo' for 1
|
296
253
|
end
|
data/spec/filters/bugs/proc.rb
CHANGED
@@ -20,7 +20,6 @@ opal_filter "Proc" do
|
|
20
20
|
fails "Proc#arity for instances created with proc { || } returns zero for definition \n @a = proc { |a: 1| }\n @b = proc { |a: 1, b: 2| }"
|
21
21
|
fails "Proc#arity for instances created with proc { || } returns zero for definition \n @a = proc { |a=1, b: 2| }\n @b = proc { |a=1, b: 2| }"
|
22
22
|
fails "Proc#arity for instances created with proc { || } returns zero for definition \n @a = proc { |a=1| }\n @b = proc { |a=1, b=2| }"
|
23
|
-
fails "Proc#binding returns a Binding instance"
|
24
23
|
fails "Proc#binding returns the binding associated with self"
|
25
24
|
fails "Proc#call can call its block argument declared with a block argument" # Expected 6 to equal 10
|
26
25
|
fails "Proc#call on a Proc created with Kernel#lambda or Kernel#proc ignores excess arguments when self is a proc" # ArgumentError: expected kwargs
|
data/spec/filters/bugs/regexp.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# NOTE: run bin/format-filters after changing this file
|
2
2
|
opal_filter "regular_expressions" do
|
3
|
-
fails "MatchData#inspect returns a human readable representation of named captures" # Exception: named captures are not supported in javascript: "(?<first>\w+)\s+(?<last>\w+)\s+(\w+)"
|
4
3
|
fails "MatchData#regexp returns a Regexp for the result of gsub(String)" # Expected /\[/gm == /\[/ to be truthy but was false
|
5
4
|
fails "MatchData#string returns a frozen copy of the matched string for gsub(String)" # NotImplementedError: String#gsub! not supported. Mutable String methods are not supported in Opal.
|
6
5
|
fails "MatchData.allocate is undefined" # Expected NoMethodError but no exception was raised (#<MatchData>(#pretty_inspect raised #<NoMethodError: undefined method `named_captures' for nil>) was returned)
|
@@ -33,18 +32,8 @@ opal_filter "regular_expressions" do
|
|
33
32
|
fails "Regexp#inspect does not include a character set code"
|
34
33
|
fails "Regexp#inspect does not include the 'o' option"
|
35
34
|
fails "Regexp#inspect returns options in the order 'mixn'"
|
36
|
-
fails "Regexp#named_captures returns a Hash"
|
37
|
-
fails "Regexp#named_captures returns an empty Hash when there are no capture groups"
|
38
|
-
fails "Regexp#named_captures sets each element of the Array to the corresponding group's index"
|
39
|
-
fails "Regexp#named_captures sets the keys of the Hash to the names of the capture groups"
|
40
|
-
fails "Regexp#named_captures sets the values of the Hash to Arrays"
|
41
35
|
fails "Regexp#named_captures works with duplicate capture group names"
|
42
|
-
fails "Regexp#names returns all of the named captures"
|
43
|
-
fails "Regexp#names returns an Array"
|
44
|
-
fails "Regexp#names returns an empty Array if there are no named captures"
|
45
36
|
fails "Regexp#names returns each capture name only once"
|
46
|
-
fails "Regexp#names returns each named capture as a String"
|
47
|
-
fails "Regexp#names works with nested named captures"
|
48
37
|
fails "Regexp#source will remove escape characters" # Expected "foo\\/bar" to equal "foo/bar"
|
49
38
|
fails "Regexp#to_s deals properly with the two types of lookahead groups"
|
50
39
|
fails "Regexp#to_s returns a string in (?xxx:yyy) notation"
|
@@ -74,11 +63,6 @@ opal_filter "regular_expressions" do
|
|
74
63
|
fails "Regexp.compile works by default for subclasses with overridden #initialize" # Expected /hi/ (Regexp) to be kind of RegexpSpecsSubclass
|
75
64
|
fails "Regexp.escape sets the encoding of the result to BINARY if any non-US-ASCII characters are present in an input String with invalid encoding" # Expected true to be false
|
76
65
|
fails "Regexp.last_match returns nil when there is no match" # NoMethodError: undefined method `[]' for nil
|
77
|
-
fails "Regexp.last_match when given a String returns a named capture" # Exception: named captures are not supported in javascript: "(?<test>[A-Z]+.*)"
|
78
|
-
fails "Regexp.last_match when given a Symbol raises an IndexError when given a missing name" # Exception: named captures are not supported in javascript: "(?<test>[A-Z]+.*)"
|
79
|
-
fails "Regexp.last_match when given a Symbol returns a named capture" # Exception: named captures are not supported in javascript: "(?<test>[A-Z]+.*)"
|
80
|
-
fails "Regexp.last_match when given an Object coerces argument to an index using #to_int" # Exception: named captures are not supported in javascript: "(?<test>[A-Z]+.*)"
|
81
|
-
fails "Regexp.last_match when given an Object raises a TypeError when unable to coerce" # Exception: named captures are not supported in javascript: "(?<test>[A-Z]+.*)"
|
82
66
|
fails "Regexp.new given a String accepts an Integer of two or more options ORed together as the second argument" # Expected 0 == 0 to be falsy but was true
|
83
67
|
fails "Regexp.new given a String raises a RegexpError when passed an incorrect regexp"
|
84
68
|
fails "Regexp.new given a String with escaped characters raises a RegexpError if \\x is not followed by any hexadecimal digits"
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# NOTE: run bin/format-filters after changing this file
|
2
|
+
opal_filter "TracePoint" do
|
3
|
+
fails "TracePoint#inspect returns a String showing the event and thread for :thread_begin event" # RuntimeError: Only the :class event is supported
|
4
|
+
fails "TracePoint#inspect returns a String showing the event and thread for :thread_end event" # RuntimeError: Only the :class event is supported
|
5
|
+
fails "TracePoint#inspect returns a String showing the event, method, path and line for a :c_call event" # RuntimeError: Only the :class event is supported
|
6
|
+
fails "TracePoint#inspect returns a String showing the event, method, path and line for a :call event" # RuntimeError: Only the :class event is supported
|
7
|
+
fails "TracePoint#inspect returns a String showing the event, method, path and line for a :return event" # RuntimeError: Only the :class event is supported
|
8
|
+
fails "TracePoint#inspect returns a String showing the event, path and line for a :class event"
|
9
|
+
fails "TracePoint#inspect returns a String showing the event, path and line"
|
10
|
+
fails "TracePoint#inspect returns a string containing a human-readable TracePoint status"
|
11
|
+
fails "TracePoint#self return the trace object from event"
|
12
|
+
end
|
@@ -19,10 +19,6 @@ opal_filter "warnings" do
|
|
19
19
|
fails "Regexp.new given a Regexp does not honour options given as additional arguments" # Expected warning to match: /flags ignored/
|
20
20
|
fails "String#split with String when $; is not nil warns" # Expected warning to match: /warning: \$; is set to non-nil value/ but got: ""
|
21
21
|
fails "Struct.new overwrites previously defined constants with string as first argument" # Expected warning to match: /redefining constant/
|
22
|
-
fails "The defined? keyword for a variable scoped constant returns 'constant' if the constant is defined in the scope of the class variable" # Expected warning to match: /class variable access from toplevel/
|
23
|
-
fails "The defined? keyword for a variable scoped constant returns nil if the class scoped constant is not defined" # Expected warning to match: /class variable access from toplevel/
|
24
|
-
fails "The defined? keyword for an expression with logical connectives returns nil for an expression with '!' and an unset class variable" # Expected warning to match: /class variable access from toplevel/
|
25
|
-
fails "The defined? keyword for an expression with logical connectives returns nil for an expression with 'not' and an unset class variable" # Expected warning to match: /class variable access from toplevel/
|
26
22
|
fails "The for expression allows a constant as an iterator name" # Expected warning to match: /already initialized constant/
|
27
23
|
fails "The predefined global constants includes FALSE" # Expected warning to match: /constant ::FALSE is deprecated/
|
28
24
|
fails "The predefined global constants includes NIL" # Expected warning to match: /constant ::NIL is deprecated/
|
@@ -72,6 +72,8 @@ opal_unsupported_filter "freezing" do
|
|
72
72
|
fails "Date constants freezes MONTHNAMES, DAYNAMES, ABBR_MONTHNAMES, ABBR_DAYSNAMES"
|
73
73
|
fails "Enumerable#sort doesn't raise an error if #to_a returns a frozen Array"
|
74
74
|
fails "Enumerator#initialize on frozen instance raises a RuntimeError"
|
75
|
+
fails "Enumerator::Generator#initialize on frozen instance raises a RuntimeError" # Expected RuntimeError but no exception was raised (#<Proc:0x1b314> was returned)
|
76
|
+
fails "Enumerator::Lazy#initialize on frozen instance raises a RuntimeError" # Expected RuntimeError but no exception was raised (nil was returned)
|
75
77
|
fails "FalseClass#to_s returns a frozen string" # Expected "false".frozen? to be truthy but was false
|
76
78
|
fails "File.basename returns a new unfrozen String" # Expected "foo.rb" not to be identical to "foo.rb"
|
77
79
|
fails "FrozenError#receiver should return frozen object that modification was attempted on" # RuntimeError: RuntimeError
|
@@ -15,6 +15,9 @@ opal_unsupported_filter "private" do
|
|
15
15
|
fails "Defining an 'initialize_copy' method sets the method's visibility to private"
|
16
16
|
fails "Defining an 'initialize_dup' method sets the method's visibility to private"
|
17
17
|
fails "Enumerator#initialize is a private method"
|
18
|
+
fails "Enumerator::Generator#initialize is a private method" # Expected Enumerator::Generator to have private instance method 'initialize' but it does not
|
19
|
+
fails "Enumerator::Lazy#initialize is a private method" # Expected Enumerator::Lazy to have private instance method 'initialize' but it does not
|
20
|
+
fails "Enumerator::Yielder#initialize is a private method" # Expected Enumerator::Yielder to have private instance method 'initialize' but it does not
|
18
21
|
fails "Invoking a private getter method does not permit self as a receiver"
|
19
22
|
fails "Kernel#block_given? is a private method"
|
20
23
|
fails "Kernel#eval is a private method"
|
@@ -107,6 +110,7 @@ opal_unsupported_filter "private" do
|
|
107
110
|
fails "Kernel.proc is a private method"
|
108
111
|
fails "Kernel.rand is a private method"
|
109
112
|
fails "Kernel.srand is a private method"
|
113
|
+
fails "Matrix.new is private" # Expected Matrix to have private method 'new' but it does not
|
110
114
|
fails "Method#== missing methods calls respond_to_missing? with true to include private methods"
|
111
115
|
fails "Method#eql? missing methods calls respond_to_missing? with true to include private methods"
|
112
116
|
fails "Module#alias_method aliasing special methods keeps initialize private when aliasing"
|
data/spec/lib/compiler_spec.rb
CHANGED
@@ -18,7 +18,8 @@ RSpec.describe Opal::Compiler do
|
|
18
18
|
describe 'requirable' do
|
19
19
|
it 'executes the file' do
|
20
20
|
expect_compiled("").to include('(function(Opal) {')
|
21
|
-
expect_compiled("").to
|
21
|
+
expect_compiled("").to start_with('Opal.queue(function(Opal) {')
|
22
|
+
expect_compiled("").to end_with("});\n")
|
22
23
|
end
|
23
24
|
|
24
25
|
it 'puts the compiled into "Opal.modules"' do
|
@@ -42,6 +43,11 @@ RSpec.describe Opal::Compiler do
|
|
42
43
|
expect_compiled('"hello #{100}"').to include('"hello "', '100')
|
43
44
|
end
|
44
45
|
|
46
|
+
it "should compile ruby strings with escapes" do
|
47
|
+
expect_compiled('"hello \e"').to include('\u001b')
|
48
|
+
expect_compiled('"hello \e#{nil}"').to include('\u001b')
|
49
|
+
end
|
50
|
+
|
45
51
|
it "should compile ruby ranges" do
|
46
52
|
expect_compiled('1..1').to include('$range(1, 1, false)')
|
47
53
|
expect_compiled('1...1').to include('$range(1, 1, true)')
|
data/spec/lib/repl_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'lib/spec_helper'
|
2
2
|
require 'opal/repl'
|
3
3
|
|
4
|
-
RSpec.describe Opal::REPL
|
4
|
+
RSpec.describe Opal::REPL do
|
5
5
|
describe '#eval_ruby' do
|
6
6
|
let(:input_and_output) { {
|
7
7
|
'puts 5' => "5\n=> nil\n",
|
@@ -16,10 +16,12 @@ RSpec.describe Opal::REPL, skip: RUBY_PLATFORM != 'ruby' do
|
|
16
16
|
subject(:repl) { described_class.new }
|
17
17
|
|
18
18
|
it 'evaluates user inputs' do
|
19
|
+
repl.colorize = false
|
20
|
+
|
19
21
|
repl.load_opal
|
20
22
|
|
21
23
|
input_and_output.each do |input, output|
|
22
|
-
expect { repl.
|
24
|
+
expect { repl.eval_ruby(input) }.to output(output).to_stdout
|
23
25
|
end
|
24
26
|
|
25
27
|
repl.finish
|
@@ -124,17 +124,17 @@ class BrowserFormatter < BaseOpalFormatter
|
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
|
-
class
|
127
|
+
class ColoredDottedFormatter < BaseOpalFormatter
|
128
128
|
def red(str)
|
129
|
-
|
129
|
+
print "\e[31m"+str+"\e[0m"
|
130
130
|
end
|
131
131
|
|
132
132
|
def green(str)
|
133
|
-
|
133
|
+
print "\e[32m"+str+"\e[0m"
|
134
134
|
end
|
135
135
|
|
136
136
|
def cyan(str)
|
137
|
-
|
137
|
+
print "\e[36m"+str+"\e[0m"
|
138
138
|
end
|
139
139
|
|
140
140
|
def log(str)
|
@@ -159,6 +159,20 @@ class NodeJSFormatter < BaseOpalFormatter
|
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
|
+
class NodeJSFormatter < ColoredDottedFormatter
|
163
|
+
def red(str)
|
164
|
+
`process.stdout.write("\u001b[31m"+#{str}+"\u001b[0m")`
|
165
|
+
end
|
166
|
+
|
167
|
+
def green(str)
|
168
|
+
`process.stdout.write("\u001b[32m"+#{str}+"\u001b[0m")`
|
169
|
+
end
|
170
|
+
|
171
|
+
def cyan(str)
|
172
|
+
`process.stdout.write("\u001b[36m"+#{str}+"\u001b[0m")`
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
162
176
|
class NodeJSDocFormatter < NodeJSFormatter
|
163
177
|
def before(example)
|
164
178
|
print example.description
|
data/spec/mspec-opal/runner.rb
CHANGED
@@ -81,6 +81,7 @@ class OSpecFormatter
|
|
81
81
|
'chrome' => DottedFormatter,
|
82
82
|
'node' => NodeJSFormatter,
|
83
83
|
'nodejs' => NodeJSFormatter,
|
84
|
+
'gjs' => ColoredDottedFormatter,
|
84
85
|
'nodedoc' => NodeJSDocFormatter,
|
85
86
|
'nodejsdoc' => NodeJSDocFormatter,
|
86
87
|
'dotted' => DottedFormatter
|
@@ -153,8 +154,7 @@ end
|
|
153
154
|
module OutputSilencer
|
154
155
|
def silence_stdout
|
155
156
|
original_stdout = $stdout
|
156
|
-
new_stdout = IO.new
|
157
|
-
new_stdout.extend IO::Writable
|
157
|
+
new_stdout = IO.new(1, 'w')
|
158
158
|
new_stdout.write_proc = ->s{}
|
159
159
|
|
160
160
|
begin
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "TrueClass/FalseClass" do
|
4
|
+
it 'correctly resolves a boolean class' do
|
5
|
+
expect(true.class).to eq(TrueClass)
|
6
|
+
expect(false.class).to eq(FalseClass)
|
7
|
+
|
8
|
+
expect(true.class).not_to eq(false.class)
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'correctly resolves a boolean class with #is_a?' do
|
12
|
+
expect(true.is_a? TrueClass).to be_true
|
13
|
+
expect(false.is_a? FalseClass).to be_true
|
14
|
+
expect(false.is_a? TrueClass).to be_false
|
15
|
+
expect(true.is_a? FalseClass).to be_false
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'correctly resolves a boolean class with #===' do
|
19
|
+
expect(TrueClass === true).to be_true
|
20
|
+
expect(FalseClass === false).to be_true
|
21
|
+
expect(TrueClass === false).to be_false
|
22
|
+
expect(FalseClass === true).to be_false
|
23
|
+
expect(TrueClass === 6).to be_false
|
24
|
+
expect(true === true).to be_true
|
25
|
+
expect(false === false).to be_true
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'allows defining methods on TrueClass/FalseClass' do
|
29
|
+
class TrueClass
|
30
|
+
def test_opal
|
31
|
+
false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class FalseClass
|
36
|
+
def test_opal
|
37
|
+
true
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
expect(true.test_opal).to be_false
|
42
|
+
expect(false.test_opal).to be_true
|
43
|
+
end
|
44
|
+
end
|
@@ -3,7 +3,7 @@ require 'json'
|
|
3
3
|
describe "Hash#to_json" do
|
4
4
|
it "returns a string of all key and value pairs" do
|
5
5
|
{}.to_json.should == "{}"
|
6
|
-
{"a" => 1, "b" => 2}.to_json.should == '{"a":1,
|
6
|
+
{"a" => 1, "b" => 2}.to_json.should == '{"a":1,"b":2}'
|
7
7
|
|
8
8
|
hash = {"a" => 1, "b" => false, "c" => nil, "d" => true}
|
9
9
|
JSON.parse(hash.to_json).should == hash
|
@@ -13,8 +13,8 @@ end
|
|
13
13
|
describe "Array#to_json" do
|
14
14
|
it "returns a string of all array elements converted to json" do
|
15
15
|
[].to_json.should == "[]"
|
16
|
-
[1, 2, 3].to_json.should == "[1,
|
17
|
-
[true, nil, false, "3", 42].to_json.should == '[true,
|
16
|
+
[1, 2, 3].to_json.should == "[1,2,3]"
|
17
|
+
[true, nil, false, "3", 42].to_json.should == '[true,null,false,"3",42]'
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -301,8 +301,17 @@ describe Logger do
|
|
301
301
|
rescue => e
|
302
302
|
message = e
|
303
303
|
end
|
304
|
+
|
305
|
+
# Disable formatting for #full_message by making sure we are not on a tty
|
306
|
+
tty = $stderr.JS[:tty]
|
307
|
+
$stderr.JS[:tty] = false
|
308
|
+
|
304
309
|
@logger.debug(message).should == true
|
305
|
-
|
310
|
+
|
311
|
+
# Restore a tty status
|
312
|
+
$stderr.JS[:tty] = tty
|
313
|
+
|
314
|
+
@pipe.string.should =~ / message \(ArgumentError\)\n\tfrom /
|
306
315
|
end
|
307
316
|
end
|
308
317
|
end
|
data/spec/ruby_specs
CHANGED
@@ -27,6 +27,9 @@ ruby/core/array/pack/u_spec
|
|
27
27
|
!ruby/core/array/pack/z_spec
|
28
28
|
|
29
29
|
ruby/core/basicobject
|
30
|
+
|
31
|
+
ruby/core/binding
|
32
|
+
|
30
33
|
ruby/core/builtin_constants
|
31
34
|
ruby/core/class
|
32
35
|
ruby/core/comparable
|
@@ -36,6 +39,11 @@ ruby/core/complex
|
|
36
39
|
|
37
40
|
ruby/core/enumerable
|
38
41
|
ruby/core/enumerator
|
42
|
+
!ruby/core/enumerator/arithmetic_sequence
|
43
|
+
!ruby/core/enumerator/chain
|
44
|
+
ruby/core/enumerator/generator
|
45
|
+
ruby/core/enumerator/lazy
|
46
|
+
ruby/core/enumerator/yielder
|
39
47
|
|
40
48
|
ruby/core/exception
|
41
49
|
!ruby/core/exception/load_error_spec
|
@@ -90,6 +98,8 @@ ruby/core/kernel
|
|
90
98
|
!ruby/core/kernel/untrusted_spec
|
91
99
|
!ruby/core/kernel/untrust_spec
|
92
100
|
|
101
|
+
ruby/core/main
|
102
|
+
|
93
103
|
ruby/core/matchdata
|
94
104
|
ruby/core/math
|
95
105
|
|
@@ -152,6 +162,9 @@ ruby/core/time
|
|
152
162
|
!ruby/core/time/_dump_spec
|
153
163
|
!ruby/core/time/_load_spec
|
154
164
|
|
165
|
+
ruby/core/tracepoint/inspect_spec
|
166
|
+
ruby/core/tracepoint/self_spec
|
167
|
+
|
155
168
|
ruby/core/true
|
156
169
|
ruby/core/unboundmethod
|
157
170
|
|
@@ -177,6 +190,11 @@ ruby/library/openstruct
|
|
177
190
|
ruby/library/pathname
|
178
191
|
!ruby/library/pathname/empty_spec
|
179
192
|
!ruby/library/pathname/glob_spec
|
193
|
+
ruby/library/matrix
|
194
|
+
ruby/library/matrix/eigenvalue_decomposition
|
195
|
+
ruby/library/matrix/lup_decomposition
|
196
|
+
ruby/library/matrix/scalar
|
197
|
+
ruby/library/matrix/vector
|
180
198
|
ruby/library/pp
|
181
199
|
ruby/library/securerandom
|
182
200
|
ruby/library/set
|