opal 0.10.0.beta2 → 0.10.0.beta3
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 +9 -1
- data/lib/opal/compiler.rb +15 -9
- data/lib/opal/fragment.rb +8 -1
- data/lib/opal/nodes/args/restarg.rb +6 -1
- data/lib/opal/nodes/base.rb +1 -1
- data/lib/opal/nodes/call.rb +4 -0
- data/lib/opal/nodes/def.rb +20 -25
- data/lib/opal/nodes/hash.rb +89 -17
- data/lib/opal/nodes/iter.rb +30 -2
- data/lib/opal/nodes/logic.rb +54 -4
- data/lib/opal/nodes/node_with_args.rb +72 -0
- data/lib/opal/parser.rb +16 -0
- data/lib/opal/parser/grammar.rb +2555 -2562
- data/lib/opal/parser/grammar.y +28 -20
- data/lib/opal/parser/lexer.rb +4 -4
- data/lib/opal/regexp_anchors.rb +13 -5
- data/lib/opal/source_map.rb +2 -1
- data/lib/opal/version.rb +1 -1
- data/opal/corelib/array.rb +4 -0
- data/opal/corelib/basic_object.rb +3 -1
- data/opal/corelib/constants.rb +1 -1
- data/opal/corelib/file.rb +196 -4
- data/opal/corelib/hash.rb +7 -7
- data/opal/corelib/kernel.rb +7 -4
- data/opal/corelib/marshal.rb +31 -0
- data/opal/corelib/marshal/read_buffer.rb +427 -0
- data/opal/corelib/marshal/write_buffer.rb +383 -0
- data/opal/corelib/method.rb +8 -0
- data/opal/corelib/module.rb +21 -0
- data/opal/corelib/number.rb +19 -5
- data/opal/corelib/proc.rb +33 -6
- data/opal/corelib/range.rb +6 -0
- data/opal/corelib/regexp.rb +5 -1
- data/opal/corelib/runtime.js +69 -17
- data/opal/corelib/string.rb +8 -0
- data/opal/corelib/string/inheritance.rb +4 -0
- data/opal/corelib/struct.rb +5 -0
- data/opal/corelib/unsupported.rb +0 -18
- data/opal/opal/full.rb +1 -0
- data/spec/filters/bugs/basicobject.rb +0 -2
- data/spec/filters/bugs/compiler_opal.rb +5 -0
- data/spec/filters/bugs/enumerable.rb +1 -0
- data/spec/filters/bugs/enumerator.rb +0 -2
- data/spec/filters/bugs/exception.rb +0 -1
- data/spec/filters/bugs/kernel.rb +0 -5
- data/spec/filters/bugs/language.rb +7 -27
- data/spec/filters/bugs/marshal.rb +43 -0
- data/spec/filters/bugs/method.rb +0 -56
- data/spec/filters/bugs/module.rb +0 -1
- data/spec/filters/bugs/proc.rb +0 -46
- data/spec/filters/bugs/regexp.rb +1 -0
- data/spec/filters/bugs/unboundmethod.rb +0 -13
- data/spec/filters/unsupported/bignum.rb +5 -0
- data/spec/filters/unsupported/freeze.rb +2 -0
- data/spec/filters/unsupported/marshal.rb +46 -0
- data/spec/filters/unsupported/symbol.rb +5 -0
- data/spec/lib/compiler/call_spec.rb +29 -29
- data/spec/lib/compiler_spec.rb +7 -1
- data/spec/opal/core/kernel/instance_variables_spec.rb +40 -0
- data/spec/opal/core/language/ternary_operator_spec.rb +6 -0
- data/spec/opal/core/marshal/dump_spec.rb +53 -0
- data/spec/opal/core/marshal/load_spec.rb +7 -0
- data/spec/opal/core/source_map_spec.rb +35 -1
- data/spec/opal/javascript_api_spec.rb +16 -0
- data/spec/opal/stdlib/source_map_spec.rb +8 -0
- data/spec/ruby_specs +7 -4
- data/spec/support/match_helpers.rb +57 -0
- data/spec/support/mspec_rspec_adapter.rb +1 -1
- data/stdlib/opal-parser.rb +3 -1
- data/stdlib/pathname.rb +105 -7
- data/stdlib/racc/parser.rb +551 -138
- data/stdlib/source_map/vlq.rb +3 -2
- data/tasks/testing.rake +4 -2
- metadata +22 -2
data/opal/corelib/proc.rb
CHANGED
@@ -62,11 +62,14 @@ class Proc < `Function`
|
|
62
62
|
`!!self.$$is_lambda`
|
63
63
|
end
|
64
64
|
|
65
|
-
# FIXME: this should support the various splats and optional arguments
|
66
65
|
def arity
|
67
|
-
|
68
|
-
|
69
|
-
|
66
|
+
%x{
|
67
|
+
if (self.$$is_curried) {
|
68
|
+
return -1;
|
69
|
+
} else {
|
70
|
+
return self.$$arity;
|
71
|
+
}
|
72
|
+
}
|
70
73
|
end
|
71
74
|
|
72
75
|
def source_location
|
@@ -80,8 +83,32 @@ class Proc < `Function`
|
|
80
83
|
end
|
81
84
|
|
82
85
|
def parameters
|
83
|
-
|
84
|
-
|
86
|
+
%x{
|
87
|
+
if (self.$$is_curried) {
|
88
|
+
return #{[[:rest]]};
|
89
|
+
} else if (self.$$parameters) {
|
90
|
+
if (self.$$is_lambda) {
|
91
|
+
return self.$$parameters;
|
92
|
+
} else {
|
93
|
+
var result = [], i, length;
|
94
|
+
|
95
|
+
for (i = 0, length = self.$$parameters.length; i < length; i++) {
|
96
|
+
var parameter = self.$$parameters[i];
|
97
|
+
|
98
|
+
if (parameter[0] === 'req') {
|
99
|
+
// required arguments always have name
|
100
|
+
parameter = ['opt', parameter[1]];
|
101
|
+
}
|
102
|
+
|
103
|
+
result.push(parameter);
|
104
|
+
}
|
105
|
+
|
106
|
+
return result;
|
107
|
+
}
|
108
|
+
} else {
|
109
|
+
return [];
|
110
|
+
}
|
111
|
+
}
|
85
112
|
end
|
86
113
|
|
87
114
|
def curry(arity = undefined)
|
data/opal/corelib/range.rb
CHANGED
data/opal/corelib/regexp.rb
CHANGED
@@ -80,7 +80,7 @@ class Regexp < `RegExp`
|
|
80
80
|
|
81
81
|
regexp = #{Opal.coerce_to!(regexp, String, :to_str)};
|
82
82
|
|
83
|
-
if (regexp.charAt(regexp.length - 1) === '\\') {
|
83
|
+
if (regexp.charAt(regexp.length - 1) === '\\' && regexp.charAt(regexp.length - 2) !== '\\') {
|
84
84
|
#{raise RegexpError, "too short escape sequence: /#{regexp}/"}
|
85
85
|
}
|
86
86
|
|
@@ -202,6 +202,10 @@ class Regexp < `RegExp`
|
|
202
202
|
end
|
203
203
|
|
204
204
|
alias to_s source
|
205
|
+
|
206
|
+
def self._load(args)
|
207
|
+
self.new(*args)
|
208
|
+
end
|
205
209
|
end
|
206
210
|
|
207
211
|
class MatchData
|
data/opal/corelib/runtime.js
CHANGED
@@ -327,6 +327,9 @@
|
|
327
327
|
// Every class gets its own constant scope, inherited from current scope
|
328
328
|
Opal.create_scope(base.$$scope, klass, name);
|
329
329
|
|
330
|
+
// Name new class directly onto current scope (Opal.Foo.Baz = klass)
|
331
|
+
base[name] = klass;
|
332
|
+
|
330
333
|
if (bridged) {
|
331
334
|
Opal.bridge(klass, alloc);
|
332
335
|
}
|
@@ -1029,12 +1032,7 @@
|
|
1029
1032
|
}
|
1030
1033
|
}
|
1031
1034
|
else {
|
1032
|
-
|
1033
|
-
dispatcher = obj.$$super;
|
1034
|
-
}
|
1035
|
-
else {
|
1036
|
-
dispatcher = Opal.find_obj_super_dispatcher(obj, jsid, current_func);
|
1037
|
-
}
|
1035
|
+
dispatcher = Opal.find_obj_super_dispatcher(obj, jsid, current_func);
|
1038
1036
|
}
|
1039
1037
|
|
1040
1038
|
dispatcher = dispatcher['$' + jsid];
|
@@ -1068,24 +1066,50 @@
|
|
1068
1066
|
|
1069
1067
|
Opal.find_obj_super_dispatcher = function(obj, jsid, current_func) {
|
1070
1068
|
var klass = obj.$$meta || obj.$$class;
|
1069
|
+
|
1070
|
+
// first we need to find the class/module current_func is located on
|
1071
|
+
klass = Opal.find_owning_class(klass, current_func);
|
1072
|
+
|
1073
|
+
if (!klass) {
|
1074
|
+
throw new Error("could not find current class for super()");
|
1075
|
+
}
|
1076
|
+
|
1071
1077
|
jsid = '$' + jsid;
|
1078
|
+
return Opal.find_super_func(klass, jsid, current_func);
|
1079
|
+
};
|
1080
|
+
|
1081
|
+
Opal.find_owning_class = function(klass, current_func) {
|
1082
|
+
var owner = current_func.$$owner;
|
1072
1083
|
|
1073
|
-
// first we need to find the class/module current_func is defined/donated on
|
1074
1084
|
while (klass) {
|
1075
|
-
//
|
1076
|
-
|
1085
|
+
// repeating for readability
|
1086
|
+
|
1087
|
+
if (klass.$$iclass && klass.$$module === current_func.$$donated) {
|
1088
|
+
// this klass was the last one the module donated to
|
1089
|
+
// case is also hit with multiple module includes
|
1090
|
+
break;
|
1091
|
+
}
|
1092
|
+
else if (klass.$$iclass && klass.$$module === owner) {
|
1093
|
+
// module has donated to other classes but klass isn't one of those
|
1094
|
+
break;
|
1095
|
+
}
|
1096
|
+
else if (owner.$$is_singleton && klass === owner.$$singleton_of.$$class) {
|
1097
|
+
// cases like stdlib `Singleton::included` that use a singleton of a singleton
|
1098
|
+
break;
|
1099
|
+
}
|
1100
|
+
else if (klass === owner) {
|
1101
|
+
// no modules, pure class inheritance
|
1077
1102
|
break;
|
1078
1103
|
}
|
1079
1104
|
|
1080
1105
|
klass = klass.$$parent;
|
1081
1106
|
}
|
1082
1107
|
|
1083
|
-
|
1084
|
-
|
1085
|
-
throw new Error("could not find current class for super()");
|
1086
|
-
}
|
1108
|
+
return klass;
|
1109
|
+
};
|
1087
1110
|
|
1088
|
-
|
1111
|
+
Opal.find_super_func = function(owning_klass, jsid, current_func) {
|
1112
|
+
var klass = owning_klass.$$parent;
|
1089
1113
|
|
1090
1114
|
// now we can find the super
|
1091
1115
|
while (klass) {
|
@@ -1132,7 +1156,14 @@
|
|
1132
1156
|
throw Opal.LocalJumpError.$new("no block given");
|
1133
1157
|
}
|
1134
1158
|
|
1135
|
-
|
1159
|
+
var has_mlhs = block.$$has_top_level_mlhs_arg,
|
1160
|
+
has_trailing_comma = block.$$has_trailing_comma_in_args;
|
1161
|
+
|
1162
|
+
if (block.length > 1 || ((has_mlhs || has_trailing_comma) && block.length === 1)) {
|
1163
|
+
arg = Opal.to_ary(arg);
|
1164
|
+
}
|
1165
|
+
|
1166
|
+
if ((block.length > 1 || (has_trailing_comma && block.length === 1)) && arg.$$is_array) {
|
1136
1167
|
return block.apply(null, arg);
|
1137
1168
|
}
|
1138
1169
|
else {
|
@@ -1204,6 +1235,27 @@
|
|
1204
1235
|
return false;
|
1205
1236
|
};
|
1206
1237
|
|
1238
|
+
// Helpers for extracting kwsplats
|
1239
|
+
// Used for: { **h }
|
1240
|
+
Opal.to_hash = function(value) {
|
1241
|
+
if (value.$$is_hash) {
|
1242
|
+
return value;
|
1243
|
+
}
|
1244
|
+
else if (value['$respond_to?']('to_hash', true)) {
|
1245
|
+
var hash = value.$to_hash();
|
1246
|
+
if (hash.$$is_hash) {
|
1247
|
+
return hash;
|
1248
|
+
}
|
1249
|
+
else {
|
1250
|
+
throw Opal.TypeError.$new("Can't convert " + value.$$class +
|
1251
|
+
" to Hash (" + value.$$class + "#to_hash gives " + hash.$$class + ")");
|
1252
|
+
}
|
1253
|
+
}
|
1254
|
+
else {
|
1255
|
+
throw Opal.TypeError.$new("no implicit conversion of " + value.$$class + " into Hash");
|
1256
|
+
}
|
1257
|
+
};
|
1258
|
+
|
1207
1259
|
// Helpers for implementing multiple assignment
|
1208
1260
|
// Our code for extracting the values and assigning them only works if the
|
1209
1261
|
// return value is a JS array.
|
@@ -1371,8 +1423,8 @@
|
|
1371
1423
|
// a method is defined inside an `instance_eval` block.
|
1372
1424
|
//
|
1373
1425
|
// @param obj [Object, Class] the actual obj to define method for
|
1374
|
-
// @param jsid [String] the
|
1375
|
-
// @param body [JS.Function] the literal
|
1426
|
+
// @param jsid [String] the JavaScript friendly method name (e.g. '$foo')
|
1427
|
+
// @param body [JS.Function] the literal JavaScript function used as method
|
1376
1428
|
// @return [null]
|
1377
1429
|
//
|
1378
1430
|
Opal.defn = function(obj, jsid, body) {
|
data/opal/corelib/string.rb
CHANGED
data/opal/corelib/struct.rb
CHANGED
data/opal/corelib/unsupported.rb
CHANGED
@@ -133,24 +133,6 @@ module Kernel
|
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
|
-
module Marshal
|
137
|
-
`var ERROR = "Marshalling is not supported by Opal";`
|
138
|
-
|
139
|
-
module_function
|
140
|
-
|
141
|
-
def dump(*)
|
142
|
-
raise NotImplementedError, `ERROR`
|
143
|
-
end
|
144
|
-
|
145
|
-
def load(*)
|
146
|
-
raise NotImplementedError, `ERROR`
|
147
|
-
end
|
148
|
-
|
149
|
-
def restore(*)
|
150
|
-
raise NotImplementedError, `ERROR`
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
136
|
class Module
|
155
137
|
def public(*methods)
|
156
138
|
%x{
|
data/opal/opal/full.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'corelib/marshal'
|
@@ -3,13 +3,11 @@ opal_filter "BasicObject" do
|
|
3
3
|
fails "BasicObject does not define built-in constants (according to defined?)"
|
4
4
|
fails "BasicObject raises NameError when referencing built-in constants"
|
5
5
|
fails "BasicObject raises NoMethodError for nonexistent methods after #method_missing is removed"
|
6
|
-
fails "BasicObject#__send__ has a negative arity"
|
7
6
|
fails "BasicObject#initialize does not accept arguments"
|
8
7
|
fails "BasicObject#instance_eval raises a TypeError when defining methods on an immediate"
|
9
8
|
fails "BasicObject#instance_eval raises a TypeError when defining methods on numerics"
|
10
9
|
fails "BasicObject#instance_eval sets class variables in the receiver"
|
11
10
|
fails "BasicObject#instance_exec binds the block's binding self to the receiver"
|
12
|
-
fails "BasicObject#instance_exec has an arity of -1"
|
13
11
|
fails "BasicObject#instance_exec raises a LocalJumpError unless given a block"
|
14
12
|
fails "BasicObject#instance_exec raises a TypeError when defining methods on an immediate"
|
15
13
|
fails "BasicObject#instance_exec raises a TypeError when defining methods on numerics"
|
@@ -0,0 +1,5 @@
|
|
1
|
+
opal_filter "compiler (opal)" do
|
2
|
+
fails 'Opal::Compiler should compile undef calls'
|
3
|
+
fails 'Opal::Compiler method names when function name is reserved generates a valid named function for method'
|
4
|
+
fails 'Opal::Compiler pre-processing require-ish methods #require_tree parses and resolve #require argument'
|
5
|
+
end
|
@@ -33,6 +33,7 @@ opal_filter "Enumerable" do
|
|
33
33
|
fails "Enumerable#slice_when when given a block returns an enumerator"
|
34
34
|
fails "Enumerable#slice_when when given a block splits chunks between adjacent elements i and j where the block returns true"
|
35
35
|
fails "Enumerable#slice_when when not given a block raises an ArgumentError"
|
36
|
+
fails "Enumerable#slice_when when an iterator method yields more than one value processes all yielded values"
|
36
37
|
fails "Enumerable#sort_by returns an array of elements when a block is supplied and #map returns an enumerable"
|
37
38
|
fails "Enumerable#take_while calls the block with initial args when yielded with multiple arguments"
|
38
39
|
fails "Enumerable#to_h calls #to_ary on contents"
|
@@ -1,5 +1,4 @@
|
|
1
1
|
opal_filter "Enumerator" do
|
2
|
-
fails "Enumerator#each requires multiple arguments"
|
3
2
|
fails "Enumerator#each_with_index raises an ArgumentError if passed extra arguments"
|
4
3
|
fails "Enumerator#each_with_index returns the object being enumerated when given a block"
|
5
4
|
fails "Enumerator#enum_for exposes multi-arg yields as an array"
|
@@ -18,7 +17,6 @@ opal_filter "Enumerator" do
|
|
18
17
|
fails "Enumerator#initialize sets size to the given size if the given size is a Fixnum"
|
19
18
|
fails "Enumerator#initialize sets size to the given size if the given size is a Proc"
|
20
19
|
fails "Enumerator#initialize sets size to the given size if the given size is Float::INFINITY"
|
21
|
-
fails "Enumerator#inject requires multiple arguments"
|
22
20
|
fails "Enumerator#next_values advances the position of the current element"
|
23
21
|
fails "Enumerator#next_values advances the position of the enumerator each time when called multiple times"
|
24
22
|
fails "Enumerator#next_values raises StopIteration if called on a finished enumerator"
|
@@ -53,7 +53,6 @@ opal_filter "Exception" do
|
|
53
53
|
fails "SystemCallError.new accepts single Fixnum argument as errno"
|
54
54
|
fails "SystemCallError.new constructs the appropriate Errno class"
|
55
55
|
fails "SystemCallError.new requires at least one argument"
|
56
|
-
fails "SystemCallError.new returns an arity of -1 for the initialize method"
|
57
56
|
fails "SystemStackError is a subclass of Exception"
|
58
57
|
fails "rescueing SignalException raises a SignalException when sent a signal"
|
59
58
|
end
|
data/spec/filters/bugs/kernel.rb
CHANGED
@@ -47,7 +47,6 @@ opal_filter "Kernel" do
|
|
47
47
|
fails "Kernel#extend on frozen instance raises a RuntimeError"
|
48
48
|
fails "Kernel#extend on frozen instance raises an ArgumentError when no arguments given"
|
49
49
|
fails "Kernel#extend raises an ArgumentError when no arguments given"
|
50
|
-
fails "Kernel#extend requires multiple arguments"
|
51
50
|
fails "Kernel#freeze causes instance_variable_set to raise RuntimeError"
|
52
51
|
fails "Kernel#freeze causes mutative calls to raise RuntimeError"
|
53
52
|
fails "Kernel#freeze on a Float has no effect since it is already frozen"
|
@@ -118,7 +117,6 @@ opal_filter "Kernel" do
|
|
118
117
|
fails "Kernel#public_methods returns a list of the names of publicly accessible methods in the object"
|
119
118
|
fails "Kernel#public_methods when passed false returns a list of public methods in without its ancestors"
|
120
119
|
fails "Kernel#public_methods when passed nil returns a list of public methods in without its ancestors"
|
121
|
-
fails "Kernel#public_send has a negative arity"
|
122
120
|
fails "Kernel#public_send raises a NoMethodError if the method is protected"
|
123
121
|
fails "Kernel#public_send raises a NoMethodError if the named method is an alias of a private method"
|
124
122
|
fails "Kernel#public_send raises a NoMethodError if the named method is an alias of a protected method"
|
@@ -149,7 +147,6 @@ opal_filter "Kernel" do
|
|
149
147
|
fails "Kernel#respond_to_missing? isn't called when obj responds to the given protected method, include_private = true"
|
150
148
|
fails "Kernel#respond_to_missing? isn't called when obj responds to the given public method"
|
151
149
|
fails "Kernel#respond_to_missing? isn't called when obj responds to the given public method, include_private = true"
|
152
|
-
fails "Kernel#send has a negative arity"
|
153
150
|
fails "Kernel#singleton_class raises TypeError for Fixnum"
|
154
151
|
fails "Kernel#singleton_class raises TypeError for Symbol"
|
155
152
|
fails "Kernel#singleton_methods when not passed an argument does not return any included methods for a class including a module"
|
@@ -234,7 +231,6 @@ opal_filter "Kernel" do
|
|
234
231
|
fails "Kernel#singleton_methods when passed true returns the names of singleton methods for an object extented with a module"
|
235
232
|
fails "Kernel#singleton_methods when passed true returns the names of singleton methods for an object extented with two modules"
|
236
233
|
fails "Kernel#singleton_methods when passed true returns the names of singleton methods for an object"
|
237
|
-
fails "Kernel#warn requires multiple arguments"
|
238
234
|
fails "Kernel.Complex() when passed Numerics n1 and n2 and at least one responds to #real? with false returns n1 + n2 * Complex(0, 1)"
|
239
235
|
fails "Kernel.Complex() when passed [Complex, Complex] returns a new Complex number based on the two given numbers"
|
240
236
|
fails "Kernel.Complex() when passed [Complex] returns the passed Complex number"
|
@@ -288,7 +284,6 @@ opal_filter "Kernel" do
|
|
288
284
|
fails "Kernel.loop is a private method"
|
289
285
|
fails "Kernel.loop rescues StopIteration"
|
290
286
|
fails "Kernel.loop rescues StopIteration's subclasses"
|
291
|
-
fails "Kernel.loop returns an enumerator if no block given"
|
292
287
|
fails "Kernel.loop when no block is given returned Enumerator size returns Float::INFINITY"
|
293
288
|
fails "Kernel.printf calls write on the first argument when it is not a string"
|
294
289
|
fails "Kernel.printf writes to stdout when a string is the first argument"
|
@@ -18,6 +18,7 @@ opal_filter "language" do
|
|
18
18
|
fails "A class variable defined in a module is not defined in these classes"
|
19
19
|
fails "A class variable defined in a module is only updated in the module a method defined in the module is used"
|
20
20
|
fails "A class variable defined in a module is updated in the class when a Method defined in the class is used"
|
21
|
+
fails "A class variable definition is created in a module if any of the parents do not define it"
|
21
22
|
fails "A constant on a metaclass appears in the metaclass constant list"
|
22
23
|
fails "A constant on a metaclass cannot be accessed via object::CONST"
|
23
24
|
fails "A constant on a metaclass does not appear in the object's class constant list"
|
@@ -161,7 +162,6 @@ opal_filter "language" do
|
|
161
162
|
fails "The super keyword calls the correct method when the method visibility is modified"
|
162
163
|
fails "The super keyword passes along modified rest args when they were originally empty"
|
163
164
|
fails "The super keyword passes along modified rest args when they weren't originally empty"
|
164
|
-
fails "The super keyword sees the included version of a module a method is alias from"
|
165
165
|
fails "The super keyword uses given block even if arguments are passed explicitly"
|
166
166
|
fails "The super keyword when using keyword arguments passes any given keyword arguments including optional and required ones to the parent"
|
167
167
|
fails "The super keyword without explicit arguments passes arguments and rest arguments including any modifications"
|
@@ -239,24 +239,6 @@ opal_filter "language" do
|
|
239
239
|
fails "A block yielded a single Array does not treat hashes with string keys as keyword arguments"
|
240
240
|
fails "A block yielded a single Array assigns the last element to a non-keyword argument if #to_hash returns nil"
|
241
241
|
fails "A block yielded a single Array raises a TypeError if #to_hash does not return a Hash"
|
242
|
-
fails "A block yielded a single Object calls #to_ary on the object when taking multiple arguments"
|
243
|
-
fails "A block yielded a single Object receives the object if #to_ary returns nil"
|
244
|
-
fails "A block yielded a single Object raises a TypeError if #to_ary does not return an Array"
|
245
|
-
fails "A block allows for a leading space before the arguments"
|
246
|
-
fails "A block taking |a, b| arguments calls #to_ary to convert a single yielded object to an Array"
|
247
|
-
fails "A block taking |a, b| arguments raises a TypeError if #to_ary does not return an Array"
|
248
|
-
fails "A block taking |a, b| arguments raises the original exception if #to_ary raises an exception"
|
249
|
-
fails "A block taking |a, *b| arguments calls #to_ary to convert a single yielded object to an Array"
|
250
|
-
fails "A block taking |a, *b| arguments raises a TypeError if #to_ary does not return an Array"
|
251
|
-
fails "A block taking |a, | arguments assigns nil to the argument when passed an empty Array"
|
252
|
-
fails "A block taking |a, | arguments assigns the argument the first element of the Array when passed a single Array"
|
253
|
-
fails "A block taking |a, | arguments calls #to_ary to convert a single yielded object to an Array"
|
254
|
-
fails "A block taking |a, | arguments does not call #to_ary if the single yielded object is an Array"
|
255
|
-
fails "A block taking |a, | arguments raises a TypeError if #to_ary does not return an Array"
|
256
|
-
fails "A block taking |(a, b)| arguments calls #to_ary to convert a single yielded object to an Array"
|
257
|
-
fails "A block taking |(a, b)| arguments raises a TypeError if #to_ary does not return an Array"
|
258
|
-
fails "A block taking |(a, b), c| arguments calls #to_ary to convert a single yielded object to an Array"
|
259
|
-
fails "A block taking |(a, b), c| arguments raises a TypeError if #to_ary does not return an Array"
|
260
242
|
fails "A block taking identically-named arguments raises a SyntaxError for standard arguments"
|
261
243
|
fails "Block-local variables can not have the same name as one of the standard parameters"
|
262
244
|
fails "Block-local variables override shadowed variables from the outer scope"
|
@@ -288,15 +270,7 @@ opal_filter "language" do
|
|
288
270
|
fails "A Proc taking |(a, b)| arguments calls #to_ary to convert a single passed object to an Array"
|
289
271
|
fails "A Proc taking |(a, b)| arguments calls #to_ary to convert a single passed object to an Array"
|
290
272
|
fails "A Proc taking |(a, b)| arguments raises a TypeError if #to_ary does not return an Array"
|
291
|
-
fails "A singleton method definition can be declared for a local variable"
|
292
|
-
fails "A singleton method definition can be declared for an instance variable"
|
293
273
|
fails "A singleton method definition can be declared for a global variable"
|
294
|
-
fails "A singleton method definition can be declared for a class variable"
|
295
|
-
fails "A singleton method defined with extreme default arguments may use a method definition as a default"
|
296
|
-
fails "A singleton method defined with extreme default arguments may use an fcall as a default"
|
297
|
-
fails "A singleton method defined with extreme default arguments evaluates the defaults in the singleton scope"
|
298
|
-
fails "A singleton method defined with extreme default arguments may use preceding arguments as defaults"
|
299
|
-
fails "A singleton method defined with extreme default arguments may use a lambda as a default"
|
300
274
|
fails "A nested method definition creates an instance method when evaluated in an instance method"
|
301
275
|
fails "A nested method definition creates a class method when evaluated in a class method"
|
302
276
|
fails "A method defined with extreme default arguments may use an fcall as a default" # fails on phantomjs
|
@@ -306,4 +280,10 @@ opal_filter "language" do
|
|
306
280
|
fails "An instance method with a default argument shadows an existing method with the same name as the local"
|
307
281
|
fails "A nested method definition creates a method in the surrounding context when evaluated in a def expr.method"
|
308
282
|
fails "The def keyword within a closure looks outside the closure for the visibility"
|
283
|
+
fails "Invoking a method allows []= with *args in the [] expanded to individual arguments"
|
284
|
+
fails "Invoking a method allows []= with multiple *args and does not unwrap the last splat"
|
285
|
+
fails "Invoking a method allows []= with multiple *args"
|
286
|
+
fails "Invoking a method allows []= with a *args and multiple rhs args"
|
287
|
+
fails "Invoking a method does not expand final array arguments after a splat expansion"
|
288
|
+
fails "Invoking a private getter method does not permit self as a receiver"
|
309
289
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
opal_filter "Marshal" do
|
2
|
+
# Marshal.load
|
3
|
+
fails "Marshal.load loads an array containing objects having _dump method, and with proc"
|
4
|
+
fails "Marshal.load loads an array containing objects having marshal_dump method, and with proc"
|
5
|
+
fails "Marshal.load assigns classes to nested subclasses of Array correctly"
|
6
|
+
fails "Marshal.load loads a _dump object"
|
7
|
+
fails "Marshal.load loads a _dump object extended"
|
8
|
+
fails "Marshal.load when called with a proc returns the value of the proc"
|
9
|
+
fails "Marshal.load when called with a proc calls the proc for recursively visited data"
|
10
|
+
fails "Marshal.load when called with a proc loads an Array with proc"
|
11
|
+
fails "Marshal.load when called on objects with custom _dump methods does not set instance variables of an object with user-defined _dump/_load"
|
12
|
+
fails "Marshal.load when called on objects with custom _dump methods that return an immediate value loads an array containing an instance of the object, followed by multiple instances of another object"
|
13
|
+
fails "Marshal.load when called on objects with custom _dump methods that return an immediate value loads any structure with multiple references to the same object, followed by multiple instances of another object"
|
14
|
+
fails "Marshal.load when called on objects with custom _dump methods that return an immediate value loads an array containing references to multiple instances of the object, followed by multiple instances of another object"
|
15
|
+
fails "Marshal.load for an Array loads an extended Array object containing a user-marshaled object"
|
16
|
+
fails "Marshal.load for a String loads a String subclass with custom constructor"
|
17
|
+
fails "Marshal.load for a Struct does not call initialize on the unmarshaled struct"
|
18
|
+
fails "Marshal.load for an Exception loads a marshalled exception with no message"
|
19
|
+
fails "Marshal.load for an Exception loads a marshalled exception with a message"
|
20
|
+
fails "Marshal.load for an Exception loads a marshalled exception with a backtrace"
|
21
|
+
fails "Marshal.load for a user Class raises ArgumentError if the object from an 'o' stream is not dumpable as 'o' type user class"
|
22
|
+
fails "Marshal.load for a user Class loads an object having ivar"
|
23
|
+
fails "Marshal.load for a user Class that extends a core type other than Object or BasicObject raises ArgumentError if the resulting class does not extend the same type"
|
24
|
+
fails "Marshal.load for a Regexp loads a extended_user_regexp having ivar"
|
25
|
+
fails "Marshal.load for a Hash loads an extended_user_hash with a parameter to initialize"
|
26
|
+
fails "Marshal.load for a Time loads"
|
27
|
+
fails "Marshal.load for a Time loads nanoseconds"
|
28
|
+
fails "Marshal.load for a Module loads an old module"
|
29
|
+
fails "Marshal.load when a class does not exist in the namespace raises an ArgumentError" # an issue with constant resolving, e.g. String::Array
|
30
|
+
|
31
|
+
# Marshal.dump
|
32
|
+
fails "Marshal.dump ignores the recursion limit if the limit is negative" # no support yet
|
33
|
+
fails "Marshal.dump with an object responding to #_dump dumps the object returned by #marshal_dump"
|
34
|
+
fails "Marshal.dump with a Time dumps the zone and the offset"
|
35
|
+
fails "Marshal.dump with a Time dumps the zone and the offset"
|
36
|
+
fails "Marshal.dump with a Regexp dumps a Regexp with instance variables" # //.source.should == ''
|
37
|
+
fails "Marshal.dump with a Regexp dumps a Regexp subclass" # requires Class.new(Regexp).new("").class != Regexp
|
38
|
+
fails "Marshal.dump with an Object dumps a BasicObject subclass if it defines respond_to?"
|
39
|
+
fails "Marshal.dump with a Time dumps the zone, but not the offset if zone is UTC"
|
40
|
+
fails "Marshal.dump with an Exception dumps an empty Exception"
|
41
|
+
fails "Marshal.dump with an Exception dumps the message for the exception"
|
42
|
+
fails "Marshal.dump with an Exception contains the filename in the backtrace"
|
43
|
+
end
|