opal 0.9.0.rc1 → 0.9.0
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/opal/parser/lexer.rb +1 -1
- data/lib/opal/version.rb +1 -1
- data/opal/corelib/array.rb +34 -34
- data/opal/corelib/constants.rb +2 -2
- data/opal/corelib/module.rb +44 -6
- data/opal/corelib/range.rb +30 -0
- data/opal/corelib/regexp.rb +15 -15
- data/opal/corelib/runtime.js +31 -15
- data/opal/corelib/string.rb +13 -4
- data/spec/filters/bugs/language.rb +90 -15
- data/spec/filters/bugs/module.rb +47 -17
- data/spec/filters/bugs/proc.rb +36 -2
- data/spec/filters/bugs/range.rb +6 -6
- data/spec/filters/bugs/unboundmethod.rb +14 -0
- data/spec/lib/parser/string_spec.rb +5 -0
- data/spec/opal/core/language/class_spec.rb +4 -4
- data/spec/opal/stdlib/native/array_spec.rb +11 -0
- data/spec/opal/stdlib/native/hash_spec.rb +8 -0
- data/spec/opal/stdlib/native/struct_spec.rb +12 -0
- data/spec/rubyspecs +4 -15
- data/stdlib/native.rb +3 -13
- data/tasks/testing.rake +1 -1
- metadata +8 -4
data/opal/corelib/runtime.js
CHANGED
@@ -114,20 +114,24 @@
|
|
114
114
|
// base. Constants are looked up through their parents, so the base
|
115
115
|
// scope will be the outer scope of the new klass.
|
116
116
|
//
|
117
|
-
|
117
|
+
// @param base_scope [$$scope] the scope in which the new scope should be created
|
118
|
+
// @param klass [Class]
|
119
|
+
// @param id [String, null] the name of the newly created scope
|
120
|
+
//
|
121
|
+
Opal.create_scope = function(base_scope, klass, id) {
|
118
122
|
var const_alloc = function() {};
|
119
|
-
var const_scope = const_alloc.prototype = new
|
123
|
+
var const_scope = const_alloc.prototype = new base_scope.constructor();
|
120
124
|
|
121
125
|
klass.$$scope = const_scope;
|
122
|
-
klass.$$base_module =
|
126
|
+
klass.$$base_module = base_scope.base;
|
123
127
|
|
124
128
|
const_scope.base = klass;
|
125
129
|
const_scope.constructor = const_alloc;
|
126
130
|
const_scope.constants = [];
|
127
131
|
|
128
132
|
if (id) {
|
129
|
-
Opal.cdecl(
|
130
|
-
const_alloc.displayName = id+"
|
133
|
+
Opal.cdecl(base_scope, id, klass);
|
134
|
+
const_alloc.displayName = id+"_scope_alloc";
|
131
135
|
}
|
132
136
|
}
|
133
137
|
|
@@ -149,11 +153,12 @@
|
|
149
153
|
// If `base` is an object (not a class/module), we simple get its class and
|
150
154
|
// use that as the base instead.
|
151
155
|
//
|
152
|
-
// @param [Object]
|
153
|
-
// @param [Class]
|
154
|
-
// @param [String]
|
155
|
-
// @param [Function]
|
156
|
-
//
|
156
|
+
// @param base [Object] where the class is being created
|
157
|
+
// @param superklass [Class,null] superclass of the new class (may be null)
|
158
|
+
// @param id [String] the name of the class to be created
|
159
|
+
// @param constructor [Function] function to use as constructor
|
160
|
+
//
|
161
|
+
// @return new [Class] or existing ruby class
|
157
162
|
//
|
158
163
|
Opal.klass = function(base, superklass, id, constructor) {
|
159
164
|
var klass, bridged, alloc;
|
@@ -341,9 +346,9 @@
|
|
341
346
|
// Otherwise, a new module is created in the base with the given name, and that
|
342
347
|
// new instance is returned back (to be referenced at runtime).
|
343
348
|
//
|
344
|
-
// @param [
|
345
|
-
// @param [String]
|
346
|
-
// @return [
|
349
|
+
// @param base [Module, Class] class or module this definition is inside
|
350
|
+
// @param id [String] the name of the new (or existing) module
|
351
|
+
// @return [Module]
|
347
352
|
//
|
348
353
|
Opal.module = function(base, id) {
|
349
354
|
var module;
|
@@ -696,7 +701,17 @@
|
|
696
701
|
}
|
697
702
|
|
698
703
|
|
699
|
-
//
|
704
|
+
// Constant assignment, see also `Opal.cdecl`
|
705
|
+
//
|
706
|
+
// @param base_module [Module, Class] the constant namespace
|
707
|
+
// @param name [String] the name of the constant
|
708
|
+
// @param value [Object] the value of the constant
|
709
|
+
//
|
710
|
+
// @example Assigning a namespaced constant
|
711
|
+
// self::FOO = 'bar'
|
712
|
+
//
|
713
|
+
// @example Assigning with Module#const_set
|
714
|
+
// Foo.const_set :BAR, 123
|
700
715
|
//
|
701
716
|
Opal.casgn = function(base_module, name, value) {
|
702
717
|
function update(klass, name) {
|
@@ -714,7 +729,8 @@
|
|
714
729
|
var scope = base_module.$$scope;
|
715
730
|
|
716
731
|
if (value.$$is_class || value.$$is_module) {
|
717
|
-
//
|
732
|
+
// Only checking _Object prevents setting a const on an anonymous class
|
733
|
+
// that has a superclass that's not Object
|
718
734
|
if (value.$$is_class || value.$$base_module === _Object) {
|
719
735
|
value.$$base_module = base_module;
|
720
736
|
}
|
data/opal/corelib/string.rb
CHANGED
@@ -1575,7 +1575,7 @@ class String < `String`
|
|
1575
1575
|
return enum_for :upto, stop, excl unless block_given?
|
1576
1576
|
stop = Opal.coerce_to(stop, String, :to_str)
|
1577
1577
|
%x{
|
1578
|
-
var a, b, s = self.toString();
|
1578
|
+
var a, b, s = self.toString(), value;
|
1579
1579
|
|
1580
1580
|
if (s.length === 1 && stop.length === 1) {
|
1581
1581
|
|
@@ -1586,7 +1586,10 @@ class String < `String`
|
|
1586
1586
|
if (excl && a === b) {
|
1587
1587
|
break;
|
1588
1588
|
}
|
1589
|
-
|
1589
|
+
|
1590
|
+
value = block(String.fromCharCode(a));
|
1591
|
+
if (value === $breaker) { return $breaker.$v; }
|
1592
|
+
|
1590
1593
|
a += 1;
|
1591
1594
|
}
|
1592
1595
|
|
@@ -1599,7 +1602,10 @@ class String < `String`
|
|
1599
1602
|
if (excl && a === b) {
|
1600
1603
|
break;
|
1601
1604
|
}
|
1602
|
-
|
1605
|
+
|
1606
|
+
value = block(a.toString());
|
1607
|
+
if (value === $breaker) { return $breaker.$v; }
|
1608
|
+
|
1603
1609
|
a += 1;
|
1604
1610
|
}
|
1605
1611
|
|
@@ -1609,7 +1615,10 @@ class String < `String`
|
|
1609
1615
|
if (excl && s === stop) {
|
1610
1616
|
break;
|
1611
1617
|
}
|
1612
|
-
|
1618
|
+
|
1619
|
+
value = block(s);
|
1620
|
+
if (value === $breaker) { return $breaker.$v; }
|
1621
|
+
|
1613
1622
|
s = #{`s`.succ};
|
1614
1623
|
}
|
1615
1624
|
|
@@ -6,10 +6,10 @@ opal_filter "language" do
|
|
6
6
|
fails "A class definition extending an object (sclass) can use return to cause the enclosing method to return"
|
7
7
|
fails "A class definition extending an object (sclass) raises a TypeError when trying to extend numbers"
|
8
8
|
fails "A class definition has no class variables"
|
9
|
-
fails "A class definition raises a TypeError if inheriting from a metaclass"
|
10
9
|
fails "A class definition raises TypeError if any constant qualifying the class is not a Module"
|
11
10
|
fails "A class definition raises TypeError if constant given as class name exists and is not a Module"
|
12
11
|
fails "A class definition raises TypeError if the constant qualifying the class is nil"
|
12
|
+
fails "A class definition raises a TypeError if inheriting from a metaclass"
|
13
13
|
fails "A class variable defined in a module can be accessed from classes that extend the module"
|
14
14
|
fails "A class variable defined in a module can be accessed from modules that extend the module"
|
15
15
|
fails "A class variable defined in a module can be accessed inside the class using the module methods"
|
@@ -31,6 +31,52 @@ opal_filter "language" do
|
|
31
31
|
fails "A constant on a singleton class is not defined on the object's class"
|
32
32
|
fails "A constant on a singleton class is not preserved when the object is duped"
|
33
33
|
fails "A constant on a singleton class raises a NameError for anonymous_module::CONST"
|
34
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda do |(a, b, *c, d), (*e, f, g), (*h)|\n [a, b, c, d, e, f, g, h]\n end"
|
35
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda do |a, (b, (c, *d, (e, (*f)), g), (h, (i, j)))|\n [a, b, c, d, e, f, g, h, i, j]\n end"
|
36
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda do |a, b=1, *c, (*d, (e)), f: 2, g:, h:, **k, &l|\n [a, b, c, d, e, f, g, h, k, l]\n end"
|
37
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda do |a, b=1, *c, d, e:, f: 2, g:, **k, &l|\n [a, b, c, d, e, f, g, k, l]\n end"
|
38
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda do |a: (@a = -> (a: 1) { a }), b:|\n [a, b]\n end"
|
39
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |(*a, b)| [a, b] }"
|
40
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |(a)| a }"
|
41
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |**k| k }"
|
42
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |**| }"
|
43
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |*, &b| b }"
|
44
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |*, **k| k }"
|
45
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |*| }"
|
46
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |a, | a }"
|
47
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |a: 1, b: 2| [a, b] }"
|
48
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |a: 1, b:| [a, b] }"
|
49
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |a: 1| a }"
|
50
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |a:, b: 1| [a, b] }"
|
51
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |a:, b:| [a, b] }"
|
52
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n @a = lambda { |a:| a }"
|
53
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n def m(*a) yield(*a) end\n @a = lambda { |a| a }"
|
54
|
+
fails "A lambda expression 'lambda { ... }' assigns variables from parameters for definition \n def m(a) yield a end\n def m2() yield end\n @a = lambda { |a, | a }"
|
55
|
+
fails "A lambda expression 'lambda { ... }' requires a block"
|
56
|
+
fails "A lambda expression 'lambda { ... }' with an implicit block can be created"
|
57
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> ((*a, b)) { [a, b] }"
|
58
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> ((a)) { a }"
|
59
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> ((a, b, *c, d), (*e, f, g), (*h)) do\n [a, b, c, d, e, f, g, h]\n end"
|
60
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (*) { }"
|
61
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (**) { }"
|
62
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (**k) { k }"
|
63
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (*, &b) { b }"
|
64
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (*, **k) { k }"
|
65
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (a, (b, (c, *d, (e, (*f)), g), (h, (i, j)))) do\n [a, b, c, d, e, f, g, h, i, j]\n end"
|
66
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (a, b) { [a, b] }"
|
67
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (a, b=1, *c, (*d, (e)), f: 2, g:, h:, **k, &l) do\n [a, b, c, d, e, f, g, h, k, l]\n end"
|
68
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (a: 1) { a }"
|
69
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (a: 1, b: 2) { [a, b] }"
|
70
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (a: 1, b:) { [a, b] }"
|
71
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (a: @a = -> (a: 1) { a }, b:) do\n [a, b]\n end"
|
72
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (a:) { a }"
|
73
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (a:, b: 1) { [a, b] }"
|
74
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (a:, b:) { [a, b] }"
|
75
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> (a={}) { a }"
|
76
|
+
fails "A lambda literal -> () { } assigns variables from parameters for definition \n @a = -> a, b=1, *c, d, e:, f: 2, g:, **k, &l do\n [a, b, c, d, e, f, g, k, l]\n end"
|
77
|
+
fails "A lambda literal -> () { } assigns variables from parameters with circular optional argument reference shadows an existing local with the same name as the argument"
|
78
|
+
fails "A lambda literal -> () { } assigns variables from parameters with circular optional argument reference shadows an existing method with the same name as the argument"
|
79
|
+
fails "A lambda literal -> () { } returns a Proc object when used in a BasicObject method"
|
34
80
|
fails "A method call evaluates block pass after arguments"
|
35
81
|
fails "A number literal can be a binary literal with trailing 'i' to represent a Complex"
|
36
82
|
fails "A number literal can be a binary literal with trailing 'r' to represent a Rational"
|
@@ -46,8 +92,8 @@ opal_filter "language" do
|
|
46
92
|
fails "A singleton class for BasicObject has Class as it's superclass"
|
47
93
|
fails "A singleton class for BasicObject has the proper level of superclass for Class"
|
48
94
|
fails "A singleton class inherits from Class for classes"
|
49
|
-
fails "A singleton class is a subclass of a superclass's singleton class"
|
50
95
|
fails "A singleton class is a subclass of Class's singleton class"
|
96
|
+
fails "A singleton class is a subclass of a superclass's singleton class"
|
51
97
|
fails "A singleton class is a subclass of the same level of Class's singleton class"
|
52
98
|
fails "A singleton class is a subclass of the same level of superclass's singleton class"
|
53
99
|
fails "A singleton class raises a TypeError for Fixnum's"
|
@@ -55,31 +101,45 @@ opal_filter "language" do
|
|
55
101
|
fails "An ensure block inside a begin block is executed even when a symbol is thrown in it's corresponding begin block"
|
56
102
|
fails "Assigning an anonymous module to a constant sets the name of contained modules when assigning a toplevel anonymous module"
|
57
103
|
fails "Assigning an anonymous module to a constant sets the name of the module"
|
58
|
-
fails "calling methods on the metaclass calls a method defined on the metaclass of the metaclass"
|
59
104
|
fails "Class methods of a singleton class for a class include class methods of Class"
|
60
105
|
fails "Class methods of a singleton class for a class include instance methods of the singleton class of Class"
|
61
106
|
fails "Class methods of a singleton class for a singleton class include class methods of the singleton class of Class"
|
62
107
|
fails "Instance methods of a singleton class for a singleton class includes instance methods of the singleton class of Class"
|
63
108
|
fails "Instantiating a singleton class raises a TypeError when allocate is called"
|
64
109
|
fails "Instantiating a singleton class raises a TypeError when new is called"
|
65
|
-
fails "
|
66
|
-
fails "
|
67
|
-
fails "
|
110
|
+
fails "Literal Regexps caches the Regexp object"
|
111
|
+
fails "Literal Regexps disallows alphabets as non-paired delimiter with %r"
|
112
|
+
fails "Literal Regexps disallows first part of paired delimiters to be used as non-paired delimiters"
|
113
|
+
fails "Literal Regexps disallows spaces after %r and delimiter"
|
114
|
+
fails "Literal Regexps matches against $_ (last input) in a conditional if no explicit matchee provided"
|
115
|
+
fails "Literal Regexps supports (?# )"
|
116
|
+
fails "Literal Regexps supports (?<! ) (negative lookbehind)"
|
117
|
+
fails "Literal Regexps supports (?<= ) (positive lookbehind)"
|
118
|
+
fails "Literal Regexps supports (?> ) (embedded subexpression)"
|
119
|
+
fails "Literal Regexps supports \\g (named backreference)"
|
120
|
+
fails "Literal Regexps supports character class composition"
|
121
|
+
fails "Literal Regexps supports non-paired delimiters delimiters with %r"
|
122
|
+
fails "Literal Regexps supports possessive quantifiers"
|
123
|
+
fails "Literal Regexps throws SyntaxError for malformed literals"
|
68
124
|
fails "Operators * / % are left-associative"
|
69
|
-
fails "
|
70
|
-
fails "
|
125
|
+
fails "Reopening a class adds new methods to subclasses"
|
126
|
+
fails "The =~ operator with named captures on syntax of /regexp/ =~ string_variable sets local variables by the captured pairs"
|
127
|
+
fails "The =~ operator with named captures on syntax of regexp_variable =~ string_variable does not set local variables"
|
128
|
+
fails "The =~ operator with named captures on syntax of string_variable =~ /regexp/ does not set local variables"
|
129
|
+
fails "The =~ operator with named captures on the method calling does not set local variables"
|
130
|
+
fails "The BEGIN keyword accesses variables outside the eval scope"
|
131
|
+
fails "The BEGIN keyword must appear in a top-level context"
|
132
|
+
fails "The BEGIN keyword runs first in a given code unit"
|
133
|
+
fails "The BEGIN keyword runs in a shared scope"
|
134
|
+
fails "The BEGIN keyword runs multiple begins in FIFO order"
|
71
135
|
fails "The __FILE__ pseudo-variable equals the absolute path of a file loaded by a relative path" # we can't clear $LOADED_FEATURES, should be treated as readonly
|
72
136
|
fails "The __FILE__ pseudo-variable equals the absolute path of a file loaded by an absolute path" # we can't clear $LOADED_FEATURES, should be treated as readonly
|
137
|
+
fails "The __LINE__ pseudo-variable equals the line number of the text in a loaded file"
|
73
138
|
fails "The alias keyword is not allowed against Fixnum or String instances"
|
74
139
|
fails "The alias keyword on top level defines the alias on Object"
|
75
140
|
fails "The alias keyword operates on methods defined via attr, attr_reader, and attr_accessor"
|
76
141
|
fails "The alias keyword operates on methods with splat arguments defined in a superclass using text block for class eval"
|
77
142
|
fails "The alias keyword operates on the object's metaclass when used in instance_eval"
|
78
|
-
fails "The BEGIN keyword accesses variables outside the eval scope"
|
79
|
-
fails "The BEGIN keyword must appear in a top-level context"
|
80
|
-
fails "The BEGIN keyword runs first in a given code unit"
|
81
|
-
fails "The BEGIN keyword runs in a shared scope"
|
82
|
-
fails "The BEGIN keyword runs multiple begins in FIFO order"
|
83
143
|
fails "The defined? keyword for a scoped constant does not call .const_missing if the constant is not defined"
|
84
144
|
fails "The defined? keyword for a scoped constant returns nil when a constant is defined on top-level but not on the module"
|
85
145
|
fails "The defined? keyword for a scoped constant returns nil when an undefined constant is scoped to a defined constant"
|
@@ -89,8 +149,8 @@ opal_filter "language" do
|
|
89
149
|
fails "The defined? keyword for a simple constant returns 'constant' when the constant is defined"
|
90
150
|
fails "The defined? keyword for a simple constant returns nil when the constant is not defined"
|
91
151
|
fails "The defined? keyword for a top-level scoped constant returns nil when an undefined constant is scoped to a defined constant"
|
92
|
-
fails "The defined? keyword for an expression returns nil for an expression with !~ and an undefined method"
|
93
152
|
fails "The defined? keyword for an expression returns nil for an expression with != and an undefined method"
|
153
|
+
fails "The defined? keyword for an expression returns nil for an expression with !~ and an undefined method"
|
94
154
|
fails "The defined? keyword for an expression returns nil for an expression with == and an undefined method"
|
95
155
|
fails "The defined? keyword for an expression with logical connectives does not propagate an exception raised by a method in a 'not' expression"
|
96
156
|
fails "The defined? keyword for an expression with logical connectives returns nil for an expression with '!' and an undefined method"
|
@@ -151,8 +211,8 @@ opal_filter "language" do
|
|
151
211
|
fails "The super keyword raises an error error when super method does not exist"
|
152
212
|
fails "The super keyword uses given block even if arguments are passed explicitly"
|
153
213
|
fails "The super keyword without explicit arguments passes arguments and rest arguments including any modifications"
|
154
|
-
fails "The super keyword without explicit arguments passes optional arguments that have a default value"
|
155
214
|
fails "The super keyword without explicit arguments passes optional arguments that have a default value but were modified"
|
215
|
+
fails "The super keyword without explicit arguments passes optional arguments that have a default value"
|
156
216
|
fails "The super keyword without explicit arguments passes optional arguments that have a non-default value but were modified"
|
157
217
|
fails "The super keyword without explicit arguments passes rest arguments including any modifications"
|
158
218
|
fails "The unpacking splat operator (*) unpacks arguments as if they were listed statically"
|
@@ -162,4 +222,19 @@ opal_filter "language" do
|
|
162
222
|
fails "The until modifier with begin .. end block restart the current iteration without reevaluting condition with redo"
|
163
223
|
fails "The until modifier with begin .. end block runs block at least once (even if the expression is true)"
|
164
224
|
fails "The until modifier with begin .. end block skips to end of body with next"
|
225
|
+
fails "The while expression stops running body if interrupted by break in a begin ... end attribute op-assign-or value"
|
226
|
+
fails "The while expression stops running body if interrupted by break in a begin ... end element op-assign value"
|
227
|
+
fails "The while expression stops running body if interrupted by break in a begin ... end element op-assign-or value"
|
228
|
+
fails "The while expression stops running body if interrupted by break in a parenthesized attribute op-assign-or value"
|
229
|
+
fails "The while expression stops running body if interrupted by break in a parenthesized element op-assign value"
|
230
|
+
fails "The while modifier with begin .. end block evaluates condition after block execution"
|
231
|
+
fails "The while modifier with begin .. end block restarts the current iteration without reevaluting condition with redo"
|
232
|
+
fails "The while modifier with begin .. end block runs block at least once (even if the expression is false)"
|
233
|
+
fails "The while modifier with begin .. end block skips to end of body with next"
|
234
|
+
fails "calling methods on the metaclass calls a method defined on the metaclass of the metaclass"
|
235
|
+
fails "not() returns false if the argument is true"
|
236
|
+
fails "not() returns true if the argument is false"
|
237
|
+
fails "not() returns true if the argument is nil"
|
238
|
+
fails "self in a metaclass body (class << obj) raises a TypeError for numbers"
|
239
|
+
fails "self in a metaclass body (class << obj) raises a TypeError for symbols"
|
165
240
|
end
|
data/spec/filters/bugs/module.rb
CHANGED
@@ -1,22 +1,5 @@
|
|
1
1
|
opal_filter "Module" do
|
2
|
-
fails "Module#< raises a TypeError if the argument is not a class/module"
|
3
|
-
fails "Module#< returns nil if self is not related to the given module"
|
4
|
-
fails "Module#< returns true if self is a subclass of or includes the given module"
|
5
|
-
fails "Module#<= raises a TypeError if the argument is not a class/module"
|
6
|
-
fails "Module#<= returns nil if self is not related to the given module"
|
7
|
-
fails "Module#<= returns true if self is a subclass of, the same as or includes the given module"
|
8
|
-
fails "Module#<=> returns +1 if self is a superclas of or included by the given module"
|
9
|
-
fails "Module#<=> returns -1 if self is a subclass of or includes the given module"
|
10
2
|
fails "Module#=== returns true when the given Object's class includes self or when the given Object is extended by self"
|
11
|
-
fails "Module#> raises a TypeError if the argument is not a class/module"
|
12
|
-
fails "Module#> returns false if self is a subclass of or includes the given module"
|
13
|
-
fails "Module#> returns false if self is the same as the given module"
|
14
|
-
fails "Module#> returns nil if self is not related to the given module"
|
15
|
-
fails "Module#> returns true if self is a superclass of or included by the given module"
|
16
|
-
fails "Module#>= raises a TypeError if the argument is not a class/module"
|
17
|
-
fails "Module#>= returns false if self is a subclass of or includes the given module"
|
18
|
-
fails "Module#>= returns nil if self is not related to the given module"
|
19
|
-
fails "Module#>= returns true if self is a superclass of, the same as or included by given module"
|
20
3
|
fails "Module#alias_method can call a method with super aliased twice"
|
21
4
|
fails "Module#alias_method preserves the arguments information of the original methods"
|
22
5
|
fails "Module#alias_method raises a TypeError when the given name can't be converted using to_str"
|
@@ -44,6 +27,46 @@ opal_filter "Module" do
|
|
44
27
|
fails "Module#attr_writer converts non string/symbol/fixnum names to strings using to_str"
|
45
28
|
fails "Module#attr_writer not allows for adding an attr_writer to an immediate"
|
46
29
|
fails "Module#attr_writer raises a TypeError when the given names can't be converted to strings using to_str"
|
30
|
+
fails "Module#autoload (concurrently) blocks a second thread while a first is doing the autoload"
|
31
|
+
fails "Module#autoload (concurrently) blocks others threads while doing an autoload"
|
32
|
+
fails "Module#autoload allows multiple autoload constants for a single file"
|
33
|
+
fails "Module#autoload calls #to_path on non-String filename arguments"
|
34
|
+
fails "Module#autoload calls #to_path on non-string filenames"
|
35
|
+
fails "Module#autoload does NOT raise a NameError when the autoload file did not define the constant and a module is opened with the same name"
|
36
|
+
fails "Module#autoload does not load the file if the file is manually required"
|
37
|
+
fails "Module#autoload does not load the file when accessing the constants table of the module"
|
38
|
+
fails "Module#autoload does not load the file when refering to the constant in defined?"
|
39
|
+
fails "Module#autoload does not remove the constant from the constant table if load fails"
|
40
|
+
fails "Module#autoload does not remove the constant from the constant table if the loaded files does not define it"
|
41
|
+
fails "Module#autoload ignores the autoload request if the file is already loaded"
|
42
|
+
fails "Module#autoload loads a file with .rb extension when passed the name without the extension"
|
43
|
+
fails "Module#autoload loads the file that defines subclass XX::YY < YY and YY is a top level constant"
|
44
|
+
fails "Module#autoload loads the file when opening a module that is the autoloaded constant"
|
45
|
+
fails "Module#autoload loads the registered constant into a dynamically created class"
|
46
|
+
fails "Module#autoload loads the registered constant into a dynamically created module"
|
47
|
+
fails "Module#autoload loads the registered constant when it is accessed"
|
48
|
+
fails "Module#autoload loads the registered constant when it is included"
|
49
|
+
fails "Module#autoload loads the registered constant when it is inherited from"
|
50
|
+
fails "Module#autoload loads the registered constant when it is opened as a class"
|
51
|
+
fails "Module#autoload loads the registered constant when it is opened as a module"
|
52
|
+
fails "Module#autoload looks up the constant in the scope where it is referred"
|
53
|
+
fails "Module#autoload looks up the constant when in a meta class scope"
|
54
|
+
fails "Module#autoload on a frozen module raises a RuntimeError before setting the name"
|
55
|
+
fails "Module#autoload raises a NameError when the constant name has a space in it"
|
56
|
+
fails "Module#autoload raises a NameError when the constant name starts with a lower case letter"
|
57
|
+
fails "Module#autoload raises a NameError when the constant name starts with a number"
|
58
|
+
fails "Module#autoload raises a TypeError if not passed a String or object respodning to #to_path for the filename"
|
59
|
+
fails "Module#autoload raises a TypeError if opening a class with a different superclass than the class defined in the autoload file"
|
60
|
+
fails "Module#autoload raises an ArgumentError when an empty filename is given"
|
61
|
+
fails "Module#autoload registers a file to load the first time the named constant is accessed"
|
62
|
+
fails "Module#autoload retains the autoload even if the request to require fails"
|
63
|
+
fails "Module#autoload returns 'constant' on refering the constant with defined?()"
|
64
|
+
fails "Module#autoload runs for an exception condition class and doesn't trample the exception"
|
65
|
+
fails "Module#autoload sets the autoload constant in the constants table"
|
66
|
+
fails "Module#autoload shares the autoload request across dup'ed copies of modules"
|
67
|
+
fails "Module#autoload when changing $LOAD_PATH does not reload a file due to a different load path"
|
68
|
+
fails "Module#autoload? returns nil if no file has been registered for a constant"
|
69
|
+
fails "Module#autoload? returns the name of the file that will be autoloaded"
|
47
70
|
fails "Module#class_eval adds methods respecting the lexical constant scope"
|
48
71
|
fails "Module#class_eval converts a non-string filename to a string using to_str"
|
49
72
|
fails "Module#class_eval converts non string eval-string to string using to_str"
|
@@ -81,6 +104,9 @@ opal_filter "Module" do
|
|
81
104
|
fails "Module#const_get with dynamically assigned constants searches a module included in the superclass"
|
82
105
|
fails "Module#const_get with dynamically assigned constants searches the superclass chain"
|
83
106
|
fails "Module#const_missing raises NameError and does not include toplevel Object"
|
107
|
+
fails "Module#const_set calls #to_str to convert the given name to a String"
|
108
|
+
fails "Module#const_set on a frozen module raises a RuntimeError before setting the name"
|
109
|
+
fails "Module#const_set raises a TypeError if conversion to a String by calling #to_str fails"
|
84
110
|
fails "Module#constants doesn't returns inherited constants when passed false"
|
85
111
|
fails "Module#constants doesn't returns inherited constants when passed nil"
|
86
112
|
fails "Module#constants includes names of constants defined after a module is included"
|
@@ -150,6 +176,10 @@ opal_filter "Module" do
|
|
150
176
|
fails "Module#module_function on Class raises a TypeError if calling after rebinded to Class"
|
151
177
|
fails "Module#module_function with specific method names raises a TypeError when the given names can't be converted to string using to_str"
|
152
178
|
fails "Module#module_function with specific method names tries to convert the given names to strings using to_str"
|
179
|
+
fails "Module#name is not nil for a nested module created with the module keyword"
|
180
|
+
fails "Module#name is set with a conditional assignment to a constant"
|
181
|
+
fails "Module#name is set with a conditional assignment to a nested constant"
|
182
|
+
fails "Module#name preserves the encoding in which the class was defined"
|
153
183
|
fails "Module#prepend accepts no-arguments"
|
154
184
|
fails "Module#prepend adds the module in the subclass chains"
|
155
185
|
fails "Module#prepend allows wrapping methods"
|
data/spec/filters/bugs/proc.rb
CHANGED
@@ -4,13 +4,47 @@ opal_filter "Proc" do
|
|
4
4
|
fails "Proc as an implicit block pass argument remains the same object if re-vivified by the target method"
|
5
5
|
fails "Proc#=== on a Proc created with Kernel#lambda or Kernel#proc raises an ArgumentError on excess arguments when self is a lambda"
|
6
6
|
fails "Proc#=== on a Proc created with Kernel#lambda or Kernel#proc raises an ArgumentError on missing arguments when self is a lambda"
|
7
|
+
fails "Proc#arity for instances created with -> () { } returns negative values for definition \n @a = -> (*) { }\n @b = -> (*a) { }"
|
8
|
+
fails "Proc#arity for instances created with -> () { } returns negative values for definition \n @a = -> (**k, &l) { }\n @b= -> (*a, **k) { }\n @c = ->(a: 1, b: 2, **k) { }"
|
9
|
+
fails "Proc#arity for instances created with -> () { } returns negative values for definition \n @a = -> (*a, b) { }\n @b = -> (*a, b, c) { }\n @c = -> (*a, b, c, d) { }"
|
10
|
+
fails "Proc#arity for instances created with -> () { } returns negative values for definition \n @a = -> (a, *) { }\n @b = -> (a, *b) { }\n @c = -> (a, b, *c) { }\n @d = -> (a, b, c, *d) { }"
|
11
|
+
fails "Proc#arity for instances created with -> () { } returns negative values for definition \n @a = -> (a, *b, c) { }\n @b = -> (a, b, *c, d, e) { }"
|
12
|
+
fails "Proc#arity for instances created with -> () { } returns negative values for definition \n @a = -> (a, b=1) { }\n @b = -> (a, b, c=1, d=2) { }"
|
13
|
+
fails "Proc#arity for instances created with -> () { } returns negative values for definition \n @a = -> (a, b=1, *c, d, e:, f: 2, **k, &l) { }\n @b = -> (a, b=1, *c, d:, e:, f: 2, **k, &l) { }\n @c = -> (a=0, b=1, *c, d, e:, f: 2, **k, &l) { }\n @d = -> (a=0, b=1, *c, d:, e:, f: 2, **k, &l) { }"
|
14
|
+
fails "Proc#arity for instances created with -> () { } returns negative values for definition \n @a = -> (a, b=1, c=2, *d, e, f) { }\n @b = -> (a, b, c=1, *d, e, f, g) { }"
|
15
|
+
fails "Proc#arity for instances created with -> () { } returns negative values for definition \n @a = -> (a: 1) { }\n @b = -> (a: 1, b: 2) { }"
|
16
|
+
fails "Proc#arity for instances created with -> () { } returns negative values for definition \n @a = -> (a=1) { }\n @b = -> (a=1, b=2) { }"
|
17
|
+
fails "Proc#arity for instances created with -> () { } returns negative values for definition \n @a = -> (a=1, *b) { }\n @b = -> (a=1, b=2, *c) { }"
|
18
|
+
fails "Proc#arity for instances created with -> () { } returns negative values for definition \n @a = -> (a=1, *b, c:, d: 2, **k, &l) { }"
|
19
|
+
fails "Proc#arity for instances created with -> () { } returns negative values for definition \n @a = -> (a=1, b: 2) { }\n @b = -> (*a, b: 1) { }\n @c = -> (a=1, b: 2) { }\n @d = -> (a=1, *b, c: 2, &l) { }"
|
20
|
+
fails "Proc#arity for instances created with -> () { } returns positive values for definition \n @a = -> ((a, (*b, c))) { }\n @b = -> (a, (*b, c), d, (*e), (*)) { }"
|
21
|
+
fails "Proc#arity for instances created with -> () { } returns positive values for definition \n @a = -> (a, b, c:, d: 1) { }\n @b = -> (a, b, c:, d: 1, **k, &l) { }"
|
22
|
+
fails "Proc#arity for instances created with -> () { } returns positive values for definition \n @a = -> (a, b:) { }\n @b = -> (a, b:, &l) { }"
|
23
|
+
fails "Proc#arity for instances created with -> () { } returns positive values for definition \n @a = -> (a:) { }\n @b = -> (a:, b:) { }\n @c = -> (a: 1, b:, c:, d: 2) { }"
|
24
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |(a, (*b, c)), d=1| }\n @b = lambda { |a, (*b, c), d, (*e), (*), **k| }\n @c = lambda { |a, (b, c), *, d:, e: 2, **| }"
|
25
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |**k, &l| }\n @b = lambda { |*a, **k| }\n @c = lambda { |a: 1, b: 2, **k| }"
|
26
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |*a, b| }\n @b = lambda { |*a, b, c| }\n @c = lambda { |*a, b, c, d| }"
|
27
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |*| }\n @b = lambda { |*a| }"
|
28
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |a, *b, c| }\n @b = lambda { |a, b, *c, d, e| }"
|
29
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |a, *| }\n @b = lambda { |a, *b| }\n @c = lambda { |a, b, *c| }\n @d = lambda { |a, b, c, *d| }"
|
30
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |a, b=1, *c, d, e:, f: 2, **k, &l| }\n @b = lambda { |a, b=1, *c, d:, e:, f: 2, **k, &l| }\n @c = lambda { |a=0, b=1, *c, d, e:, f: 2, **k, &l| }\n @d = lambda { |a=0, b=1, *c, d:, e:, f: 2, **k, &l| }"
|
31
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |a, b=1, c=2, *d, e, f| }\n @b = lambda { |a, b, c=1, *d, e, f, g| }"
|
32
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |a, b=1| }\n @b = lambda { |a, b, c=1, d=2| }"
|
33
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |a: 1| }\n @b = lambda { |a: 1, b: 2| }"
|
34
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |a=1, *b, c:, d: 2, **k, &l| }"
|
35
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |a=1, *b| }\n @b = lambda { |a=1, b=2, *c| }"
|
36
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |a=1, b: 2| }\n @b = lambda { |*a, b: 1| }\n @c = lambda { |a=1, b: 2| }\n @d = lambda { |a=1, *b, c: 2, &l| }"
|
37
|
+
fails "Proc#arity for instances created with lambda { || } returns negative values for definition \n @a = lambda { |a=1| }\n @b = lambda { |a=1, b=2| }"
|
38
|
+
fails "Proc#arity for instances created with lambda { || } returns positive values for definition \n @a = lambda { |a, b, c:, d: 1| }\n @b = lambda { |a, b, c:, d: 1, **k, &l| }"
|
39
|
+
fails "Proc#arity for instances created with lambda { || } returns positive values for definition \n @a = lambda { |a, b:| }\n @b = lambda { |a, b:, &l| }"
|
40
|
+
fails "Proc#arity for instances created with lambda { || } returns positive values for definition \n @a = lambda { |a:| }\n @b = lambda { |a:, b:| }\n @c = lambda { |a: 1, b:, c:, d: 2| }"
|
7
41
|
fails "Proc#binding returns a Binding instance"
|
8
42
|
fails "Proc#binding returns the binding associated with self"
|
9
43
|
fails "Proc#call on a Proc created with Kernel#lambda or Kernel#proc raises an ArgumentError on excess arguments when self is a lambda"
|
10
44
|
fails "Proc#call on a Proc created with Kernel#lambda or Kernel#proc raises an ArgumentError on missing arguments when self is a lambda"
|
11
45
|
fails "Proc#curry with arity argument returns Procs with arities of -1 regardless of the value of _arity_"
|
12
|
-
fails "Proc#inspect for a proc created with lambda returns a description including '(lambda)' and optionally including file and line number"
|
13
46
|
fails "Proc#inspect for a proc created with UnboundMethod#to_proc returns a description including '(lambda)' and optionally including file and line number"
|
47
|
+
fails "Proc#inspect for a proc created with lambda returns a description including '(lambda)' and optionally including file and line number"
|
14
48
|
fails "Proc#lambda? is preserved when passing a Proc with & to the lambda keyword"
|
15
49
|
fails "Proc#lambda? is preserved when passing a Proc with & to the proc keyword"
|
16
50
|
fails "Proc#source_location returns an Array"
|
@@ -19,8 +53,8 @@ opal_filter "Proc" do
|
|
19
53
|
fails "Proc#source_location sets the first value to the path of the file in which the proc was defined"
|
20
54
|
fails "Proc#source_location sets the last value to a Fixnum representing the line on which the proc was defined"
|
21
55
|
fails "Proc#source_location works even if the proc was created on the same line"
|
22
|
-
fails "Proc#to_s for a proc created with lambda returns a description including '(lambda)' and optionally including file and line number"
|
23
56
|
fails "Proc#to_s for a proc created with UnboundMethod#to_proc returns a description including '(lambda)' and optionally including file and line number"
|
57
|
+
fails "Proc#to_s for a proc created with lambda returns a description including '(lambda)' and optionally including file and line number"
|
24
58
|
fails "Proc#yield on a Proc created with Kernel#lambda or Kernel#proc raises an ArgumentError on excess arguments when self is a lambda"
|
25
59
|
fails "Proc#yield on a Proc created with Kernel#lambda or Kernel#proc raises an ArgumentError on missing arguments when self is a lambda"
|
26
60
|
fails "Proc.allocate raises a TypeError"
|