opal 1.8.0.beta1 → 1.8.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -36,7 +36,6 @@ opal_filter "Kernel" do
36
36
  fails "Kernel#class returns the class of the object" # Expected Number to be identical to Integer
37
37
  fails "Kernel#clone replaces a singleton object's metaclass with a new copy with the same superclass" # NoMethodError: undefined method `singleton_methods' for #<#<Class:0x5537a>:0x55378>
38
38
  fails "Kernel#clone uses the internal allocator and does not call #allocate" # RuntimeError: allocate should not be called
39
- fails "Kernel#define_singleton_method when given an UnboundMethod will raise when attempting to define an object's singleton method from another object's singleton method" # Expected TypeError but no exception was raised ("other_singleton_method" was returned)
40
39
  fails "Kernel#dup uses the internal allocator and does not call #allocate" # RuntimeError: allocate should not be called
41
40
  fails "Kernel#eval allows a binding to be captured inside an eval" # NoMethodError: undefined method `w' for #<MSpecEnv:0x4be5a>
42
41
  fails "Kernel#eval allows creating a new class in a binding" # RuntimeError: Evaluation on a Proc#binding is not supported
@@ -353,14 +352,12 @@ opal_filter "Kernel" do
353
352
  fails "Kernel.printf formatting io is not specified other formats c tries to convert argument to Integer with to_int" # NoMethodError: undefined method `respond_to?' for #<BasicObject:0x4080e>
354
353
  fails "Kernel.printf formatting io is not specified other formats c tries to convert argument to String with to_str" # NoMethodError: undefined method `respond_to?' for #<BasicObject:0x40800>
355
354
  fails "Kernel.printf formatting io is not specified other formats s preserves encoding of the format string" # Expected #<Encoding:UTF-8> == #<Encoding:US-ASCII> to be truthy but was false
356
- fails "Kernel.printf formatting io is specified other formats c raises TypeError if argument is nil" # Expected TypeError (/no implicit conversion from nil to integer/) but got: Exception (format_string.indexOf is not a function)
357
- fails "Kernel.printf formatting io is specified other formats c raises TypeError if argument is not String or Integer and cannot be converted to them" # Expected TypeError (/no implicit conversion of Array into Integer/) but got: Exception (format_string.indexOf is not a function)
358
- fails "Kernel.printf formatting io is specified other formats c raises TypeError if converting to Integer with to_int returns non-Integer" # Expected TypeError (/can't convert BasicObject to String/) but got: Exception (format_string.indexOf is not a function)
359
- fails "Kernel.printf formatting io is specified other formats c raises TypeError if converting to String with to_str returns non-String" # Expected TypeError (/can't convert BasicObject to String/) but got: Exception (format_string.indexOf is not a function)
360
- fails "Kernel.printf formatting io is specified other formats c tries to convert argument to Integer with to_int" # Exception: format_string.indexOf is not a function
361
- fails "Kernel.printf formatting io is specified other formats c tries to convert argument to String with to_str" # Exception: format_string.indexOf is not a function
362
- fails "Kernel.printf formatting io is specified other formats s formats nil with precision" # Exception: format_string.indexOf is not a function
363
- fails "Kernel.printf formatting io is specified other formats s formats nil with width" # Exception: format_string.indexOf is not a function
355
+ fails "Kernel.printf formatting io is specified other formats c raises TypeError if argument is nil" # Expected TypeError (/no implicit conversion from nil to integer/) but got: TypeError (no implicit conversion of NilClass into Integer)
356
+ fails "Kernel.printf formatting io is specified other formats c raises TypeError if argument is not String or Integer and cannot be converted to them" # Expected TypeError (/no implicit conversion of Array into Integer/) but got: ArgumentError (too few arguments)
357
+ fails "Kernel.printf formatting io is specified other formats c raises TypeError if converting to Integer with to_int returns non-Integer" # Expected TypeError (/can't convert BasicObject to Integer/) but got: NoMethodError (undefined method `respond_to?' for #<BasicObject:0x69e>)
358
+ fails "Kernel.printf formatting io is specified other formats c raises TypeError if converting to String with to_str returns non-String" # Expected TypeError (/can't convert BasicObject to String/) but got: NoMethodError (undefined method `respond_to?' for #<BasicObject:0x6cc>)
359
+ fails "Kernel.printf formatting io is specified other formats c tries to convert argument to Integer with to_int" # NoMethodError: undefined method `respond_to?' for #<BasicObject:0x6a8>
360
+ fails "Kernel.printf formatting io is specified other formats c tries to convert argument to String with to_str" # NoMethodError: undefined method `respond_to?' for #<BasicObject:0x6c2>
364
361
  fails "Kernel.printf formatting io is specified other formats s preserves encoding of the format string" # Expected #<Encoding:UTF-8> == #<Encoding:US-ASCII> to be truthy but was false
365
362
  fails "Kernel.printf writes to stdout when a string is the first argument" # NoMethodError: undefined method `tmp' for #<MSpecEnv:0x4046a @name=nil @stdout=#<IO:0xa @fd=1 @flags="w" @eof=false @closed="both" @write_proc=#<Proc:0x40474> @tty=true>>
366
363
  fails "Kernel.proc returned the passed Proc if given an existing Proc" # Expected false to be true
@@ -27,8 +27,6 @@ opal_filter "Method" do
27
27
  fails "Method#curry with optional arity argument raises ArgumentError when the method requires less arguments than the given arity" # Expected ArgumentError but no exception was raised (#<Proc:0x7c68a> was returned)
28
28
  fails "Method#curry with optional arity argument raises ArgumentError when the method requires more arguments than the given arity" # Expected ArgumentError but no exception was raised (#<Proc:0x7c66a> was returned)
29
29
  fails "Method#define_method when passed a Proc object and a method is defined inside defines the nested method in the default definee where the Proc was created" # Expected #<#<Class:0x51aa0>:0x51a9c> NOT to have method 'nested_method_in_proc_for_define_method' but it does
30
- fails "Method#define_method when passed an UnboundMethod object defines a method with the same #arity as the original" # Expected -1 == -3 to be truthy but was false
31
- fails "Method#define_method when passed an UnboundMethod object defines a method with the same #parameters as the original" # Expected [["rest", "args"]] == [["req", "a"], ["req", "b"], ["rest", "c"]] to be truthy but was false
32
30
  fails "Method#eql? missing methods returns true for the same method missing" # NameError: undefined method `handled_via_method_missing' for class `MethodSpecs::Methods'
33
31
  fails "Method#eql? returns true if a method was defined using the other one" # Expected false to be true
34
32
  fails "Method#eql? returns true if methods are the same" # Expected false to be true
@@ -54,7 +52,6 @@ opal_filter "Method" do
54
52
  fails "Method#source_location for a Method generated by respond_to_missing? returns nil" # NameError: undefined method `handled_via_method_missing' for class `MethodSpecs::Methods'
55
53
  fails "Method#source_location sets the first value to the path of the file in which the method was defined" # Expected "ruby/core/method/fixtures/classes.rb" == "./ruby/core/method/fixtures/classes.rb" to be truthy but was false
56
54
  fails "Method#source_location works for eval with a given line" # Expected ["(eval)", 0] == ["foo", 100] to be truthy but was false
57
- fails "Method#source_location works for methods defined with an UnboundMethod" # Expected "<internal:corelib/module.rb>" =~ /ruby\/core\/method\/source_location_spec.rb/ to be truthy but was nil
58
55
  fails "Method#super_method after aliasing an inherited method returns the expected super_method" # NoMethodError: undefined method `super_method' for #<Method: MethodSpecs::InheritedMethods::C#meow (defined in MethodSpecs::InheritedMethods::C in ruby/core/method/fixtures/classes.rb:233)>
59
56
  fails "Method#super_method after changing an inherited methods visibility returns the expected super_method" # NoMethodError: undefined method `super_method' for #<Method: MethodSpecs::InheritedMethods::C#derp (defined in MethodSpecs::InheritedMethods::B in ruby/core/method/fixtures/classes.rb:233)>
60
57
  fails "Method#super_method returns nil when the parent's method is removed" # NoMethodError: undefined method `super_method' for #<Method: #<Class:0x50682>#overridden (defined in #<Class:0x50682> in ruby/core/method/super_method_spec.rb:36)>
@@ -87,18 +87,9 @@ opal_filter "Module" do
87
87
  fails "Module#const_source_location works for eval with a given line" # NoMethodError: undefined method `const_source_location' for #<Class:0x2f66a>
88
88
  fails "Module#constants doesn't returns inherited constants when passed nil" # Expected ["CS_CONST10", "CS_CONST10_LINE", "CS_CONST23", "CS_CONST24", "CS_CONST5", "ChildA"] == ["CS_CONST10", "CS_CONST10_LINE", "CS_CONST23", "CS_CONST5", "ChildA"] to be truthy but was false
89
89
  fails "Module#constants returns only public constants" # Expected ["PRIVATE_CONSTANT", "PUBLIC_CONSTANT"] == ["PUBLIC_CONSTANT"] to be truthy but was false
90
- fails "Module#define_method converts non-String name to String with #to_str" # NoMethodError: undefined method `foo' for #<#<Class:0x33ce6>:0x33ce4>
91
90
  fails "Module#define_method defines the new method according to the scope visibility when a Method passed and the class/module of the context is equal to the receiver of #define_method" # Expected NoMethodError but no exception was raised (nil was returned)
92
91
  fails "Module#define_method passed { |a,| } creates a method that does not destructure the passed argument" # Expected [1, 2] == 1 to be truthy but was false
93
- fails "Module#define_method raises TypeError if name cannot converted to String" # Expected TypeError (/is not a symbol nor a string/) but no exception was raised (#<Class:0x33da2> was returned)
94
- fails "Module#define_method raises TypeError when #to_str called on non-String name returns non-String value" # Expected TypeError (/can't convert Object to String/) but no exception was raised (#<Class:0x33d52> was returned)
95
- fails "Module#define_method raises a TypeError when a Method from a singleton class is defined on another class" # Expected TypeError (/can't bind singleton method to a different class/) but no exception was raised (#<Class:0x33cdc> was returned)
96
- fails "Module#define_method raises a TypeError when a Method from one class is defined on an unrelated class" # Expected TypeError but no exception was raised (#<Class:0x33d6c> was returned)
97
- fails "Module#define_method raises a TypeError when an UnboundMethod from a child class is defined on a parent class" # Expected TypeError (/bind argument must be a subclass of ChildClass/) but no exception was raised ("foo" was returned)
98
- fails "Module#define_method raises a TypeError when an UnboundMethod from a singleton class is defined on another class" # Expected TypeError (/can't bind singleton method to a different class/) but no exception was raised (#<Class:0x33cac> was returned)
99
- fails "Module#define_method raises a TypeError when an UnboundMethod from one class is defined on an unrelated class" # Expected TypeError (/bind argument must be a subclass of ModuleSpecs::InstanceMeth/) but no exception was raised (DestinationClass was returned)
100
- fails "Module#define_method raises a TypeError when the given method is no Method/Proc" # Expected TypeError (wrong argument type String (expected Proc/Method/UnboundMethod)) but got: TypeError (wrong argument type NilClass (expected Proc/Method))
101
- fails "Module#define_method uses provided Method/Proc even if block is specified" # Expected "block_is_called" == "method_is_called" to be truthy but was false
92
+ fails "Module#define_method raises a TypeError when the given method is no Method/Proc" # Expected TypeError (wrong argument type Integer (expected Proc/Method/UnboundMethod)) but got: TypeError (wrong argument type Number (expected Proc/Method/UnboundMethod))
102
93
  fails "Module#deprecate_constant accepts multiple symbols and strings as constant names" # NoMethodError: undefined method `deprecate_constant' for #<Module:0x3bf08>
103
94
  fails "Module#deprecate_constant raises a NameError when given an undefined name" # NoMethodError: undefined method `deprecate_constant' for #<Module:0x3bf04>
104
95
  fails "Module#deprecate_constant returns self" # NoMethodError: undefined method `deprecate_constant' for #<Module:0x3bf0c>
@@ -50,22 +50,12 @@ opal_filter "Range" do
50
50
  fails "Range#bsearch with endless ranges and Integer values with a block returning negative, zero, positive numbers returns nil if the block returns less than zero for every element" # NotImplementedError: Can't #bsearch an infinite range
51
51
  fails "Range#bsearch with endless ranges and Integer values with a block returning true or false returns minimum element if the block returns true for every element" # NotImplementedError: Can't #bsearch an infinite range
52
52
  fails "Range#bsearch with endless ranges and Integer values with a block returning true or false returns the smallest element for which block returns true" # NotImplementedError: Can't #bsearch an infinite range
53
- fails "Range#cover? accepts beginless range argument" # Expected false to be true
54
- fails "Range#cover? accepts endless range argument" # Expected false to be true
55
- fails "Range#cover? allows self to be a beginless range" # Expected false to be true
56
- fails "Range#cover? allows self to be a endless range" # Expected false to be true
57
- fails "Range#cover? range argument accepts range argument" # Expected false to be true
58
- fails "Range#cover? range argument honors exclusion of right boundary (:exclude_end option)" # Expected false to be true
59
- fails "Range#cover? range argument supports boundaries of different comparable types" # Expected false to be true
53
+ fails "Range#cover? range argument honors exclusion of right boundary (:exclude_end option)" # Expected true to be false
60
54
  fails "Range#eql? returns false if the endpoints are not eql?" # Expected 0..1 not to have same value or type as 0..1
61
55
  fails "Range#first raises a TypeError if #to_int does not return an Integer" # Expected TypeError but no exception was raised ([2] was returned)
62
56
  fails "Range#frozen? is true for Range.new" # Expected 1..2.frozen? to be truthy but was false
63
57
  fails "Range#frozen? is true for literal ranges" # Expected 1..2.frozen? to be truthy but was false
64
58
  fails "Range#include? does not include U+9995 in the range U+0999..U+9999" # Expected true to be false
65
- fails "Range#include? on string elements returns false if other is not matched by element.succ" # Expected true to be false
66
- fails "Range#include? with weird succ when excluded end value returns false if other is not matched by element.succ" # Expected true to be false
67
- fails "Range#include? with weird succ when included end value returns false if other is equal as last element but not matched by element.succ" # Expected true to be false
68
- fails "Range#include? with weird succ when included end value returns false if other is not matched by element.succ" # Expected true to be false
69
59
  fails "Range#initialize raises a FrozenError if called on an already initialized Range" # Expected FrozenError but got: NameError ('initialize' called twice)
70
60
  fails "Range#inspect works for nil ... nil ranges" # Expected ".." == "nil..nil" to be truthy but was false
71
61
  fails "Range#last raises a TypeError if #to_int does not return an Integer" # Expected TypeError but no exception was raised ([3] was returned)
@@ -75,10 +65,6 @@ opal_filter "Range" do
75
65
  fails "Range#max raises TypeError when called on an exclusive range and a non Integer value" # Expected TypeError but no exception was raised (907.1111 was returned)
76
66
  fails "Range#max raises for an exclusive beginless range" # Expected TypeError (cannot exclude end value with non Integer begin value) but no exception was raised (0 was returned)
77
67
  fails "Range#max returns the maximum value in the range when called with no arguments" # Expected NaN == "e" to be truthy but was false
78
- fails "Range#member? on string elements returns false if other is not matched by element.succ" # Expected true to be false
79
- fails "Range#member? with weird succ when excluded end value returns false if other is not matched by element.succ" # Expected true to be false
80
- fails "Range#member? with weird succ when included end value returns false if other is equal as last element but not matched by element.succ" # Expected true to be false
81
- fails "Range#member? with weird succ when included end value returns false if other is not matched by element.succ" # Expected true to be false
82
68
  fails "Range#min given a block calls #> and #< on the return value of the block" # Mock 'obj' expected to receive >("any_args") exactly 2 times but received it 0 times
83
69
  fails "Range#minmax on an exclusive range raises TypeError if the end value is not an integer" # Expected TypeError (cannot exclude non Integer end value) but got: TypeError (can't iterate from Float)
84
70
  fails "Range#minmax on an exclusive range should raise RangeError on a beginless range" # Expected RangeError (/cannot get the maximum of beginless range with custom comparison method|cannot get the minimum of beginless range/) but got: TypeError (can't iterate from NilClass)
@@ -99,7 +85,7 @@ opal_filter "Range" do
99
85
  fails "Range#to_a works with Ranges of 64-bit integers" # Expected [256, 257] == [1099511627776, 1099511627777] to be truthy but was false
100
86
  fails "Range#to_s can show beginless ranges" # Expected "...1" == "...1.0" to be truthy but was false
101
87
  fails "Range#to_s can show endless ranges" # Expected "1..." == "1.0..." to be truthy but was false
102
- fails "Range.new beginless/endless range creates a frozen range if the class is Range.class" # Expected 1..2.frozen? to be truthy but was false
88
+ fails "Range.new beginless/endless range creates a frozen range if the class is Range.class" # Expected 1..2.frozen? to be truthy but was false
103
89
  fails_badly "Range#min given a block raises RangeError when called with custom comparison method on an endless range" # Expected RangeError but got: Opal::SyntaxError (undefined method `type' for nil)
104
90
  fails_badly "Range#minmax on an exclusive range should return the minimum and maximum values for a numeric range without iterating the range"
105
91
  fails_badly "Range#step with an endless range and String values raises a TypeError when passed a Float step" # Expected TypeError but got: Opal::SyntaxError (undefined method `type' for nil)
@@ -7,8 +7,8 @@ opal_filter "Ruby 3.2" do
7
7
  fails "Kernel#sprintf other formats c displays only the first character if argument is a string of several characters" # ArgumentError: %c requires a character
8
8
  fails "Kernel.printf formatting io is not specified other formats c displays no characters if argument is an empty string" # ArgumentError: %c requires a character
9
9
  fails "Kernel.printf formatting io is not specified other formats c displays only the first character if argument is a string of several characters" # ArgumentError: %c requires a character
10
- fails "Kernel.printf formatting io is specified other formats c displays no characters if argument is an empty string" # Exception: format_string.indexOf is not a function
11
- fails "Kernel.printf formatting io is specified other formats c displays only the first character if argument is a string of several characters" # Exception: format_string.indexOf is not a function
10
+ fails "Kernel.printf formatting io is specified other formats c displays no characters if argument is an empty string" # ArgumentError: %c requires a character
11
+ fails "Kernel.printf formatting io is specified other formats c displays only the first character if argument is a string of several characters" # ArgumentError: %c requires a character
12
12
  fails "Kernel.sprintf other formats c displays no characters if argument is an empty string" # ArgumentError: %c requires a character
13
13
  fails "Kernel.sprintf other formats c displays only the first character if argument is a string of several characters" # ArgumentError: %c requires a character
14
14
  fails "Keyword arguments delegation does not work with call(*ruby2_keyword_args) with missing ruby2_keywords in between" # Expected [[], {}] == [[{}], {}] to be truthy but was false
@@ -21,8 +21,4 @@ opal_unsupported_filter "Kernel" do
21
21
  fails "Kernel#warn is a private method" # Expected Kernel to have private instance method 'warn' but it does not
22
22
  fails "Kernel.Float raises a TypeError if #to_f returns an Integer" # Expected TypeError but no exception was raised (123 was returned)
23
23
  fails "Kernel.lambda when called without a literal block warns when proc isn't a lambda" # Expected warning: "ruby/core/kernel/lambda_spec.rb:142: warning: lambda without a literal block is deprecated; use the proc without lambda instead\n" but got: ""
24
- fails "Kernel.printf formatting io is specified other formats s formats nil with width and precision" # Exception: format_string.indexOf is not a function
25
- fails "Kernel.printf formatting io is specified other formats s formats string with width and precision" # Exception: format_string.indexOf is not a function
26
- fails "Kernel.printf formatting io is specified other formats s formats string with width" # Exception: format_string.indexOf is not a function
27
- fails "Kernel.printf formatting io is specified other formats s substitutes '' for nil" # Exception: format_string.indexOf is not a function
28
24
  end
@@ -0,0 +1,89 @@
1
+ describe 'duplicated underscore parameter' do
2
+ it 'assigns the first arg' do
3
+ klass = Class.new {
4
+ def req_req(_, _) = _
5
+ def req_rest_req(_, *, _) = _
6
+ def rest_req(*_, _) = _
7
+ def req_opt(_, _ = 0) = _
8
+ def opt_req(_ = 0, _) = _
9
+ def req_kwopt(_, _: 0) = _
10
+ def req_kwrest(_, **_) = _
11
+ def req_block(_, &_) = _
12
+ def req_mlhs(_, (_)) = _
13
+ def mlhs_req((_), _) = _
14
+ def rest_kw(*_, _:) = _
15
+ def nested_mlhs(((_), _)) = _
16
+ def nested_mlhs_rest(((*_, _))) = _
17
+ }
18
+ o = klass.new
19
+
20
+ o.req_req(1, 2).should == 1
21
+ o.req_rest_req(1, 2, 3, 4).should == 1
22
+ o.rest_req(1, 2, 3).should == [1, 2]
23
+ o.req_opt(1).should == 1
24
+ o.req_opt(1, 2).should == 1
25
+ o.opt_req(1).should == 0
26
+ o.opt_req(1, 2).should == 1
27
+ o.req_kwopt(1, _: 2).should == 1
28
+ o.req_kwrest(1, a: 2).should == 1
29
+ o.req_block(1).should == 1
30
+ o.req_block(1) {}.should == 1
31
+ o.req_mlhs(1, [2]).should == 1
32
+ o.mlhs_req([1], 2).should == 1
33
+ o.rest_kw(1, 2, _: 3).should == [1, 2]
34
+ o.nested_mlhs([[1], 2]).should == 1
35
+ o.nested_mlhs_rest([[1, 2, 3]]).should == [1, 2]
36
+ end
37
+
38
+ context 'in block parameters' do
39
+ it 'assignes the first arg' do
40
+ proc { |_, _| _ }.call(1, 2).should == 1
41
+ proc { |_, *_| _ }.call(1, 2, 3).should == 1
42
+ proc { |*_, _| _ }.call(1, 2, 3).should == [1, 2]
43
+ proc { |_, _:| _ }.call(1, _: 2).should == 1
44
+ proc { |**_, &_| _ }.call(a: 1) {}.should == {a: 1}
45
+ end
46
+ end
47
+
48
+ it 'distinguishes two arguments starting with _' do
49
+ klass = Class.new {
50
+ def foo(_a, _a, _b, _b) = [_a, _b]
51
+ }
52
+ o = klass.new
53
+ o.foo(1, 2, 3, 4).should == [1, 3]
54
+ end
55
+
56
+ it 'works with yield' do
57
+ klass = Class.new {
58
+ def foo(_, &_) = yield * 2
59
+ }
60
+ o = klass.new
61
+ o.foo(1) { 2 }.should == 4
62
+ end
63
+
64
+ it 'works with block_given?' do
65
+ klass = Class.new {
66
+ def foo(_, &_) = block_given?
67
+ }
68
+ o = klass.new
69
+
70
+ o.foo(1).should == false
71
+ o.foo(1) {}.should == true
72
+ end
73
+
74
+ it 'works with zsuper' do
75
+ parent = Class.new {
76
+ def foo(*args, **kwargs, &blk)
77
+ [args, kwargs, blk.call]
78
+ end
79
+ }
80
+ child = Class.new(parent) {
81
+ def foo(_, _ = 0, *_, _, _:, **_, &_)
82
+ super
83
+ end
84
+ }
85
+ o = child.new
86
+
87
+ o.foo(1, 2, 3, 4, _: 5, a: 6) { 7 }.should == [[1, 2, 3, 4], {_: 5, a: 6}, 7]
88
+ end
89
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Module#define_method" do
4
+ describe "when passed an UnboundMethod object" do
5
+ it "defines a method taking a block" do
6
+ klass = Class.new do
7
+ def foo = yield :bar
8
+ end
9
+ klass.define_method(:baz, klass.instance_method(:foo))
10
+ klass.new.baz { |a| a }.should == :bar
11
+ end
12
+ end
13
+
14
+ describe "when called inside a def" do
15
+ it "returns correctly" do
16
+ klass = Class.new do
17
+ def self.my_method_definer
18
+ define_method(:a) do
19
+ return :foo
20
+ :bar
21
+ end
22
+ end
23
+ end
24
+
25
+ klass.my_method_definer
26
+ klass.new.a.should == :foo
27
+ end
28
+ end
29
+ end
data/spec/ruby_specs CHANGED
@@ -177,6 +177,7 @@ ruby/language
177
177
  ruby/library/base64
178
178
  ruby/library/bigdecimal
179
179
  !ruby/library/bigdecimal/util_spec
180
+ ruby/library/cgi
180
181
  ruby/library/date
181
182
  ruby/library/datetime
182
183
  ruby/library/delegate/delegate_class
@@ -0,0 +1,89 @@
1
+ # backtick_javascript: true
2
+
3
+ # This file contains parts of https://github.com/ruby/ruby/blob/master/lib/cgi/util.rb
4
+ # licensed under a Ruby license.
5
+
6
+ class CGI
7
+ module Util
8
+ # URL-encode a string into application/x-www-form-urlencoded.
9
+ # Space characters (+" "+) are encoded with plus signs (+"+"+)
10
+ # url_encoded_string = CGI.escape("'Stop!' said Fred")
11
+ # # => "%27Stop%21%27+said+Fred"
12
+ def escape(c)
13
+ `encodeURI(c)`
14
+ end
15
+
16
+ # URL-decode an application/x-www-form-urlencoded string with encoding(optional).
17
+ # string = CGI.unescape("%27Stop%21%27+said+Fred")
18
+ # # => "'Stop!' said Fred"
19
+ def unescape(c)
20
+ `decodeURI(c)`
21
+ end
22
+
23
+ # URL-encode a string following RFC 3986
24
+ # Space characters (+" "+) are encoded with (+"%20"+)
25
+ # url_encoded_string = CGI.escapeURIComponent("'Stop!' said Fred")
26
+ # # => "%27Stop%21%27%20said%20Fred"
27
+ def escapeURIComponent(c)
28
+ `encodeURIComponent(c)`
29
+ end
30
+
31
+ # URL-decode a string following RFC 3986 with encoding(optional).
32
+ # string = CGI.unescapeURIComponent("%27Stop%21%27+said%20Fred")
33
+ # # => "'Stop!'+said Fred"
34
+ def unescapeURIComponent(c)
35
+ `decodeURIComponent(c)`
36
+ end
37
+
38
+ # The set of special characters and their escaped values
39
+ TABLE_FOR_ESCAPE_HTML__ = {
40
+ "'" => '&#39;',
41
+ '&' => '&amp;',
42
+ '"' => '&quot;',
43
+ '<' => '&lt;',
44
+ '>' => '&gt;',
45
+ }
46
+
47
+ # Escape special characters in HTML, namely '&\"<>
48
+ # CGI.escapeHTML('Usage: foo "bar" <baz>')
49
+ # # => "Usage: foo &quot;bar&quot; &lt;baz&gt;"
50
+ def escapeHTML(string)
51
+ string.gsub(/['&"<>]/, TABLE_FOR_ESCAPE_HTML__)
52
+ end
53
+
54
+ # Unescape a string that has been HTML-escaped
55
+ # CGI.unescapeHTML("Usage: foo &quot;bar&quot; &lt;baz&gt;")
56
+ # # => "Usage: foo \"bar\" <baz>"
57
+ def unescapeHTML(string)
58
+ string.gsub(/&(apos|amp|quot|gt|lt|\#[0-9]+|\#[xX][0-9A-Fa-f]+);/) do
59
+ match = ::Regexp.last_match(1)
60
+ case match
61
+ when 'apos' then "'"
62
+ when 'amp' then '&'
63
+ when 'quot' then '"'
64
+ when 'gt' then '>'
65
+ when 'lt' then '<'
66
+ when /\A#0*(\d+)\z/
67
+ n = ::Regexp.last_match(1).to_i
68
+ n.chr('utf-8')
69
+ when /\A#x([0-9a-f]+)\z/i
70
+ n = ::Regexp.last_match(1).hex
71
+ n.chr('utf-8')
72
+ else
73
+ "&#{match};"
74
+ end
75
+ end
76
+ end
77
+
78
+ # Synonym for CGI.escapeHTML(str)
79
+ alias escape_html escapeHTML
80
+
81
+ # Synonym for CGI.unescapeHTML(str)
82
+ alias unescape_html unescapeHTML
83
+
84
+ alias h escapeHTML
85
+ end
86
+
87
+ include Util
88
+ extend Util
89
+ end
data/stdlib/cgi.rb CHANGED
@@ -1,14 +1 @@
1
- class CGI
2
- module Util
3
- def escapeURIComponent(c)
4
- `encodeURI(c)`
5
- end
6
-
7
- def unescapeURIComponent(c)
8
- `decodeURI(c)`
9
- end
10
- end
11
-
12
- include Util
13
- extend Util
14
- end
1
+ require 'cgi/util'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0.beta1
4
+ version: 1.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elia Schito
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2023-10-12 00:00:00.000000000 Z
13
+ date: 2023-11-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: ast
@@ -602,6 +602,7 @@ files:
602
602
  - lib/opal/rewriters/base.rb
603
603
  - lib/opal/rewriters/binary_operator_assignment.rb
604
604
  - lib/opal/rewriters/block_to_iter.rb
605
+ - lib/opal/rewriters/deduplicate_arg_name.rb
605
606
  - lib/opal/rewriters/dot_js_syntax.rb
606
607
  - lib/opal/rewriters/dump_args.rb
607
608
  - lib/opal/rewriters/for_rewriter.rb
@@ -706,6 +707,7 @@ files:
706
707
  - spec/filters/bugs/basicobject.rb
707
708
  - spec/filters/bugs/bigdecimal.rb
708
709
  - spec/filters/bugs/binding.rb
710
+ - spec/filters/bugs/cgi.rb
709
711
  - spec/filters/bugs/class.rb
710
712
  - spec/filters/bugs/complex.rb
711
713
  - spec/filters/bugs/date.rb
@@ -908,6 +910,7 @@ files:
908
910
  - spec/opal/core/language/DATA/multiple___END___crlf_spec.rb
909
911
  - spec/opal/core/language/DATA/multiple___END___spec.rb
910
912
  - spec/opal/core/language/arguments/mlhs_arg_spec.rb
913
+ - spec/opal/core/language/arguments/underscore_arg_spec.rb
911
914
  - spec/opal/core/language/case_spec.rb
912
915
  - spec/opal/core/language/forward_args_spec.rb
913
916
  - spec/opal/core/language/if_spec.rb
@@ -924,6 +927,7 @@ files:
924
927
  - spec/opal/core/language_spec.rb
925
928
  - spec/opal/core/marshal/dump_spec.rb
926
929
  - spec/opal/core/marshal/load_spec.rb
930
+ - spec/opal/core/module/define_method_spec.rb
927
931
  - spec/opal/core/module_spec.rb
928
932
  - spec/opal/core/number/to_i_spec.rb
929
933
  - spec/opal/core/number/to_s_spec.rb
@@ -1013,6 +1017,7 @@ files:
1013
1017
  - stdlib/buffer/array.rb
1014
1018
  - stdlib/buffer/view.rb
1015
1019
  - stdlib/cgi.rb
1020
+ - stdlib/cgi/util.rb
1016
1021
  - stdlib/console.rb
1017
1022
  - stdlib/date.rb
1018
1023
  - stdlib/date/date_time.rb
@@ -1225,10 +1230,10 @@ licenses:
1225
1230
  metadata:
1226
1231
  homepage_uri: https://opalrb.com/
1227
1232
  bug_tracker_uri: https://github.com/opal/opal/issues
1228
- changelog_uri: https://github.com/opal/opal/blob/v1.8.0.beta1/CHANGELOG.md
1229
- readme_uri: https://github.com/opal/opal/blob/v1.8.0.beta1/README.md
1230
- api_documentation_uri: http://opalrb.com/docs/api/v1.8.0.beta1/index.html
1231
- guides_uri: http://opalrb.com/docs/guides/v1.8.0.beta1/index.html
1233
+ changelog_uri: https://github.com/opal/opal/blob/v1.8.1/CHANGELOG.md
1234
+ readme_uri: https://github.com/opal/opal/blob/v1.8.1/README.md
1235
+ api_documentation_uri: http://opalrb.com/docs/api/v1.8.1/index.html
1236
+ guides_uri: http://opalrb.com/docs/guides/v1.8.1/index.html
1232
1237
  chat_uri: https://gitter.im/opal/opal
1233
1238
  source_code_uri: https://github.com/opal/opal
1234
1239
  post_install_message:
@@ -1242,9 +1247,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
1242
1247
  version: '2.3'
1243
1248
  required_rubygems_version: !ruby/object:Gem::Requirement
1244
1249
  requirements:
1245
- - - ">"
1250
+ - - ">="
1246
1251
  - !ruby/object:Gem::Version
1247
- version: 1.3.1
1252
+ version: '0'
1248
1253
  requirements: []
1249
1254
  rubygems_version: 3.4.5
1250
1255
  signing_key:
@@ -1598,6 +1603,7 @@ test_files:
1598
1603
  - lib/opal/rewriters/base.rb
1599
1604
  - lib/opal/rewriters/binary_operator_assignment.rb
1600
1605
  - lib/opal/rewriters/block_to_iter.rb
1606
+ - lib/opal/rewriters/deduplicate_arg_name.rb
1601
1607
  - lib/opal/rewriters/dot_js_syntax.rb
1602
1608
  - lib/opal/rewriters/dump_args.rb
1603
1609
  - lib/opal/rewriters/for_rewriter.rb
@@ -1707,6 +1713,7 @@ test_files:
1707
1713
  - stdlib/buffer/array.rb
1708
1714
  - stdlib/buffer/view.rb
1709
1715
  - stdlib/cgi.rb
1716
+ - stdlib/cgi/util.rb
1710
1717
  - stdlib/console.rb
1711
1718
  - stdlib/date.rb
1712
1719
  - stdlib/date/date_time.rb