opal 0.3.41 → 0.3.42
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.
- data/.gitignore +2 -0
- data/.travis.yml +3 -0
- data/CHANGELOG.md +14 -1
- data/Gemfile +2 -5
- data/Rakefile +41 -3
- data/bin/opal +33 -0
- data/lib/opal.rb +2 -12
- data/lib/opal/core_ext.rb +5 -0
- data/lib/opal/grammar.rb +2207 -2138
- data/lib/opal/grammar.y +21 -0
- data/lib/opal/grammar_helpers.rb +360 -0
- data/lib/opal/lexer.rb +55 -401
- data/lib/opal/lexer_scope.rb +28 -0
- data/lib/opal/parser.rb +155 -171
- data/lib/opal/target_scope.rb +257 -0
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +6 -2
- data/opal/opal-parser.js.erb +3 -2
- data/opal/opal.rb +20 -18
- data/opal/opal/array.rb +21 -12
- data/opal/opal/basic_object.rb +2 -1
- data/opal/opal/boolean.rb +3 -0
- data/opal/opal/browser_loader.js +57 -0
- data/opal/opal/class.rb +51 -13
- data/opal/opal/date.rb +1 -20
- data/opal/opal/enumerable.rb +66 -33
- data/opal/opal/error.rb +2 -0
- data/opal/opal/hash.rb +1 -1
- data/opal/opal/kernel.rb +14 -3
- data/opal/opal/nil_class.rb +4 -0
- data/opal/opal/proc.rb +9 -1
- data/opal/opal/racc.rb +2 -2
- data/opal/opal/regexp.rb +1 -1
- data/opal/opal/runtime.js +14 -4
- data/opal/opal/string.rb +21 -4
- data/opal/opal/time.rb +27 -0
- data/spec/core/array/allocate_spec.rb +7 -1
- data/spec/core/array/append_spec.rb +18 -3
- data/spec/core/array/array_spec.rb +7 -0
- data/spec/core/array/assoc_spec.rb +23 -8
- data/spec/core/array/at_spec.rb +23 -3
- data/spec/core/array/choice_spec.rb +20 -0
- data/spec/core/array/clear_spec.rb +45 -4
- data/spec/core/array/combination_spec.rb +55 -0
- data/spec/core/array/compact_spec.rb +72 -1
- data/spec/core/array/constructor_spec.rb +13 -2
- data/spec/core/array/count_spec.rb +15 -7
- data/spec/core/array/delete_at_spec.rb +44 -1
- data/spec/core/array/delete_if_spec.rb +52 -2
- data/spec/core/array/delete_spec.rb +83 -2
- data/spec/core/array/drop_spec.rb +24 -16
- data/spec/core/array/drop_while_spec.rb +17 -0
- data/spec/core/array/each_index_spec.rb +11 -1
- data/spec/core/array/each_spec.rb +20 -2
- data/spec/core/array/empty_spec.rb +4 -1
- data/spec/core/array/eql_spec.rb +14 -0
- data/spec/core/array/fetch_spec.rb +31 -2
- data/spec/core/array/find_index_spec.rb +8 -0
- data/spec/core/array/first_spec.rb +45 -8
- data/spec/core/array/fixtures/classes.rb +538 -0
- data/spec/core/array/flatten_spec.rb +200 -7
- data/spec/core/array/frozen_spec.rb +32 -0
- data/spec/core/array/include_spec.rb +16 -1
- data/spec/core/array/index_spec.rb +5 -25
- data/spec/core/array/insert_spec.rb +37 -3
- data/spec/core/array/inspect_spec.rb +6 -12
- data/spec/core/array/intersection_spec.rb +55 -4
- data/spec/core/array/join_spec.rb +29 -4
- data/spec/core/array/keep_if_spec.rb +13 -6
- data/spec/core/array/last_spec.rb +35 -1
- data/spec/core/array/length_spec.rb +7 -4
- data/spec/core/array/map_spec.rb +9 -47
- data/spec/core/array/minus_spec.rb +68 -4
- data/spec/core/array/multiply_spec.rb +138 -6
- data/spec/core/array/new_spec.rb +92 -3
- data/spec/core/array/ntimes_spec.rb +26 -0
- data/spec/core/array/plus_spec.rb +48 -2
- data/spec/core/array/pop_spec.rb +159 -39
- data/spec/core/array/push_spec.rb +29 -1
- data/spec/core/array/rassoc_spec.rb +31 -2
- data/spec/core/array/reject_spec.rb +89 -2
- data/spec/core/array/replace_spec.rb +7 -29
- data/spec/core/array/reverse_each_spec.rb +25 -1
- data/spec/core/array/reverse_spec.rb +53 -1
- data/spec/core/array/rindex_spec.rb +55 -5
- data/spec/core/array/select_spec.rb +35 -8
- data/spec/core/array/shared/collect.rb +0 -0
- data/spec/core/array/shared/enumeratorize.rb +12 -0
- data/spec/core/array/shared/eql.rb +95 -0
- data/spec/core/array/shared/index.rb +37 -0
- data/spec/core/array/shared/inspect.rb +3 -0
- data/spec/core/array/shared/join.rb +7 -0
- data/spec/core/array/shared/keep_if.rb +0 -0
- data/spec/core/array/shared/length.rb +0 -0
- data/spec/core/array/shared/replace.rb +0 -0
- data/spec/core/array/shared/slice.rb +0 -0
- data/spec/core/array/shift_spec.rb +132 -23
- data/spec/core/array/shuffle_spec.rb +82 -6
- data/spec/core/array/size_spec.rb +7 -4
- data/spec/core/array/slice_spec.rb +132 -1
- data/spec/core/array/sort_spec.rb +263 -14
- data/spec/core/array/take_spec.rb +24 -16
- data/spec/core/array/take_while_spec.rb +14 -10
- data/spec/core/array/to_a_spec.rb +18 -1
- data/spec/core/array/to_ary_spec.rb +15 -1
- data/spec/core/array/try_convert_spec.rb +39 -2
- data/spec/core/array/uniq_spec.rb +148 -3
- data/spec/core/array/unshift_spec.rb +36 -1
- data/spec/core/array/zip_spec.rb +36 -1
- data/spec/core/class/new_spec.rb +8 -6
- data/spec/core/enumerable/all_spec.rb +37 -9
- data/spec/core/enumerable/any_spec.rb +45 -7
- data/spec/core/enumerable/collect_spec.rb +4 -1
- data/spec/core/enumerable/count_spec.rb +4 -1
- data/spec/core/enumerable/detect_spec.rb +2 -2
- data/spec/core/enumerable/drop_spec.rb +4 -1
- data/spec/core/enumerable/drop_while_spec.rb +4 -1
- data/spec/core/enumerable/each_slice_spec.rb +2 -1
- data/spec/core/enumerable/each_with_index_spec.rb +4 -1
- data/spec/core/enumerable/each_with_object_spec.rb +4 -1
- data/spec/core/enumerable/entries_spec.rb +4 -1
- data/spec/core/enumerable/find_all_spec.rb +4 -1
- data/spec/core/enumerable/find_index_spec.rb +4 -1
- data/spec/core/enumerable/find_spec.rb +5 -2
- data/spec/core/enumerable/first_spec.rb +4 -1
- data/spec/core/enumerable/fixtures/classes.rb +198 -2
- data/spec/core/enumerable/grep_spec.rb +4 -1
- data/spec/core/enumerable/take_spec.rb +4 -1
- data/spec/core/enumerable/to_a_spec.rb +4 -1
- data/spec/core/false/and_spec.rb +11 -0
- data/spec/core/false/inspect_spec.rb +7 -0
- data/spec/core/false/or_spec.rb +11 -0
- data/spec/core/false/to_s_spec.rb +7 -0
- data/spec/core/false/xor_spec.rb +11 -0
- data/spec/core/kernel/rand_spec.rb +5 -5
- data/spec/core/module/const_get_spec.rb +4 -4
- data/spec/core/module/fixtures/classes.rb +434 -0
- data/spec/core/module/method_defined_spec.rb +49 -0
- data/spec/core/module/module_function_spec.rb +28 -0
- data/spec/core/nil/and_spec.rb +3 -1
- data/spec/core/nil/dup_spec.rb +7 -0
- data/spec/core/nil/inspect_spec.rb +3 -1
- data/spec/core/nil/nil_spec.rb +3 -1
- data/spec/core/nil/or_spec.rb +4 -2
- data/spec/core/nil/to_a_spec.rb +3 -1
- data/spec/core/nil/to_f_spec.rb +3 -1
- data/spec/core/nil/to_i_spec.rb +3 -1
- data/spec/core/nil/to_s_spec.rb +3 -1
- data/spec/core/nil/xor_spec.rb +4 -2
- data/spec/core/string/element_reference_spec.rb +14 -1
- data/spec/core/string/fixtures/classes.rb +0 -0
- data/spec/core/true/and_spec.rb +11 -0
- data/spec/core/true/inspect_spec.rb +7 -0
- data/spec/core/true/or_spec.rb +11 -0
- data/spec/core/true/to_s_spec.rb +7 -0
- data/spec/core/true/xor_spec.rb +11 -0
- data/spec/{core → core_ext}/array/element_reference_spec.rb +0 -0
- data/spec/{core → core_ext}/array/equal_value_spec.rb +0 -0
- data/spec/{core → core_ext}/array/fill_spec.rb +0 -0
- data/spec/{core → core_ext}/array/reduce_spec.rb +0 -0
- data/spec/core_ext/basic_object/send_spec.rb +3 -3
- data/spec/{core → core_ext}/boolean/singleton_class_spec.rb +0 -0
- data/spec/{core → core_ext}/boolean/to_json_spec.rb +0 -0
- data/spec/core_ext/class/_inherited_spec.rb +3 -3
- data/spec/core_ext/class/proc_methods_spec.rb +2 -2
- data/spec/core_ext/class/singleton_methods_spec.rb +8 -8
- data/spec/core_ext/method_missing_spec.rb +3 -3
- data/spec/core_ext/native/method_missing_spec.rb +3 -2
- data/spec/core_ext/native/to_native_spec.rb +3 -2
- data/spec/{core → core_ext}/nil/to_json_spec.rb +0 -0
- data/spec/date.rb +0 -0
- data/spec/fileutils.rb +0 -0
- data/spec/filters/ancestors.rb +4 -0
- data/spec/filters/array_delete.rb +3 -0
- data/spec/filters/array_fetch.rb +3 -0
- data/spec/filters/array_first.rb +3 -0
- data/spec/filters/array_flatten.rb +14 -0
- data/spec/filters/array_intersection.rb +5 -0
- data/spec/filters/array_join.rb +6 -0
- data/spec/filters/array_subclasses.rb +4 -0
- data/spec/filters/block_args.rb +3 -0
- data/spec/filters/coerce_integer.rb +9 -0
- data/spec/filters/frozen.rb +4 -0
- data/spec/filters/mocks.rb +3 -0
- data/spec/filters/should_receive.rb +4 -0
- data/spec/filters/tainted.rb +7 -0
- data/spec/fixtures/class.rb +124 -0
- data/spec/fixtures/class_variables.rb +0 -0
- data/spec/fixtures/constants.rb +0 -0
- data/spec/grammar/alias_spec.rb +1 -1
- data/spec/grammar/def_spec.rb +1 -0
- data/spec/grammar/lvar_spec.rb +1 -2
- data/spec/grammar/nth_ref_spec.rb +13 -0
- data/spec/grammar/sclass_spec.rb +6 -7
- data/spec/grammar/str_spec.rb +4 -4
- data/spec/grammar/string_spec.rb +8 -0
- data/spec/grammar/xstr_spec.rb +4 -4
- data/spec/iconv.rb +0 -0
- data/spec/language/alias_spec.rb +140 -3
- data/spec/language/and_spec.rb +14 -7
- data/spec/language/array_spec.rb +57 -5
- data/spec/language/block_spec.rb +466 -49
- data/spec/language/break_spec.rb +294 -44
- data/spec/language/case_spec.rb +151 -3
- data/spec/language/class_spec.rb +196 -0
- data/spec/language/class_variable_spec.rb +56 -0
- data/spec/language/def_spec.rb +507 -4
- data/spec/language/defined_spec.rb +19 -7
- data/spec/language/ensure_spec.rb +26 -39
- data/spec/language/execution_spec.rb +15 -0
- data/spec/language/fixtures/array.rb +11 -0
- data/spec/language/fixtures/block.rb +57 -0
- data/spec/language/fixtures/break.rb +240 -0
- data/spec/language/fixtures/ensure.rb +72 -0
- data/spec/language/fixtures/literal_lambda.rb +7 -0
- data/spec/language/fixtures/metaclass.rb +33 -0
- data/spec/language/fixtures/module.rb +24 -0
- data/spec/language/fixtures/next.rb +78 -12
- data/spec/language/fixtures/return.rb +118 -0
- data/spec/language/fixtures/send.rb +110 -0
- data/spec/language/fixtures/send_1.9.rb +22 -0
- data/spec/language/fixtures/super.rb +308 -0
- data/spec/language/fixtures/variables.rb +58 -0
- data/spec/language/fixtures/yield.rb +5 -0
- data/spec/language/for_spec.rb +192 -0
- data/spec/language/hash_spec.rb +29 -5
- data/spec/language/if_spec.rb +90 -9
- data/spec/language/literal_lambda_spec.rb +1 -47
- data/spec/language/loop_spec.rb +39 -2
- data/spec/language/metaclass_spec.rb +151 -5
- data/spec/language/module_spec.rb +56 -0
- data/spec/language/next_spec.rb +370 -12
- data/spec/language/not_spec.rb +55 -0
- data/spec/language/numbers_spec.rb +56 -0
- data/spec/language/or_spec.rb +31 -3
- data/spec/language/order_spec.rb +79 -0
- data/spec/language/precedence_spec.rb +483 -0
- data/spec/language/proc_spec.rb +249 -21
- data/spec/language/redo_spec.rb +67 -0
- data/spec/language/rescue_spec.rb +121 -0
- data/spec/language/retry_spec.rb +56 -0
- data/spec/language/return_spec.rb +281 -0
- data/spec/language/send_spec.rb +141 -48
- data/spec/language/singleton_class_spec.rb +1 -1
- data/spec/language/string_spec.rb +11 -0
- data/spec/language/super_spec.rb +213 -133
- data/spec/language/symbol_spec.rb +2 -1
- data/spec/language/undef_spec.rb +3 -1
- data/spec/language/unless_spec.rb +6 -2
- data/spec/language/until_spec.rb +102 -3
- data/spec/language/variables_spec.rb +1212 -16
- data/spec/language/versions/array_1.9.rb +39 -0
- data/spec/language/versions/case_1.9.rb +20 -0
- data/spec/language/versions/hash_1.9.rb +18 -0
- data/spec/language/versions/literal_lambda_1.9.rb +143 -0
- data/spec/language/versions/not_1.9.rb +22 -0
- data/spec/language/versions/send_1.9.rb +241 -0
- data/spec/language/versions/symbol_1.9.rb +15 -0
- data/spec/language/versions/variables_1.9.rb +8 -0
- data/spec/language/while_spec.rb +70 -5
- data/spec/language/yield_spec.rb +32 -6
- data/spec/mspec/guards/block_device.rb +0 -0
- data/spec/mspec/guards/endian.rb +0 -0
- data/spec/mspec/helpers/environment.rb +0 -0
- data/spec/mspec/helpers/language_version.rb +0 -0
- data/spec/mspec/helpers/tmp.rb +0 -0
- data/spec/ospec/filter.rb +32 -0
- data/spec/ospec/main.rb.erb +18 -0
- data/spec/ospec/phantom.rb +97 -0
- data/spec/ospec/runner.rb +95 -0
- data/spec/ospec/sprockets.js +40 -0
- data/spec/pp.rb +3 -0
- data/spec/rbconfig.rb +5 -0
- data/spec/spec_helper.rb +53 -26
- data/spec/yaml.rb +0 -0
- metadata +275 -31
- data/config.ru +0 -8
- data/lib/opal/processor.rb +0 -47
- data/lib/opal/scope.rb +0 -236
- data/lib/opal/server.rb +0 -94
- data/spec/core/boolean/and_spec.rb +0 -17
- data/spec/core/boolean/inspect_spec.rb +0 -9
- data/spec/core/boolean/or_spec.rb +0 -17
- data/spec/core/boolean/to_s_spec.rb +0 -9
- data/spec/core/boolean/xor_spec.rb +0 -17
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
require File.expand_path('../fixtures/module', __FILE__)
|
3
|
+
|
4
|
+
describe "The module keyword" do
|
5
|
+
pending "creates a new module with a non-qualified constant name" do
|
6
|
+
module ModuleSpecsToplevel; end
|
7
|
+
ModuleSpecsToplevel.should be_an_instance_of(Module)
|
8
|
+
end
|
9
|
+
|
10
|
+
pending "creates a new module with a qualified constant name" do
|
11
|
+
module ModuleSpecs::Nested; end
|
12
|
+
ModuleSpecs::Nested.should be_an_instance_of(Module)
|
13
|
+
end
|
14
|
+
|
15
|
+
pending "creates a new module with a variable qualified constant name" do
|
16
|
+
m = Module.new
|
17
|
+
module m::N; end
|
18
|
+
m::N.should be_an_instance_of(Module)
|
19
|
+
end
|
20
|
+
|
21
|
+
pending "reopens an existing module" do
|
22
|
+
module ModuleSpecs; Reopened = true; end
|
23
|
+
ModuleSpecs::Reopened.should be_true
|
24
|
+
end
|
25
|
+
|
26
|
+
pending "reopens a module included in Object" do
|
27
|
+
module IncludedModuleSpecs; Reopened = true; end
|
28
|
+
ModuleSpecs::IncludedInObject::IncludedModuleSpecs::Reopened.should be_true
|
29
|
+
end
|
30
|
+
|
31
|
+
pending "raises a TypeError if the constant is a Class" do
|
32
|
+
lambda do
|
33
|
+
module ModuleSpecs::Modules::Klass; end
|
34
|
+
end.should raise_error(TypeError)
|
35
|
+
end
|
36
|
+
|
37
|
+
pending "raises a TypeError if the constant is a String" do
|
38
|
+
lambda { module ModuleSpecs::Modules::A; end }.should raise_error(TypeError)
|
39
|
+
end
|
40
|
+
|
41
|
+
pending "raises a TypeError if the constant is a Fixnum" do
|
42
|
+
lambda { module ModuleSpecs::Modules::B; end }.should raise_error(TypeError)
|
43
|
+
end
|
44
|
+
|
45
|
+
pending "raises a TypeError if the constant is nil" do
|
46
|
+
lambda { module ModuleSpecs::Modules::C; end }.should raise_error(TypeError)
|
47
|
+
end
|
48
|
+
|
49
|
+
pending "raises a TypeError if the constant is true" do
|
50
|
+
lambda { module ModuleSpecs::Modules::D; end }.should raise_error(TypeError)
|
51
|
+
end
|
52
|
+
|
53
|
+
pending "raises a TypeError if the constant is false" do
|
54
|
+
lambda { module ModuleSpecs::Modules::D; end }.should raise_error(TypeError)
|
55
|
+
end
|
56
|
+
end
|
data/spec/language/next_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
1
2
|
require File.expand_path('../fixtures/next', __FILE__)
|
2
3
|
|
3
4
|
describe "The next statement from within the block" do
|
@@ -38,17 +39,33 @@ describe "The next statement from within the block" do
|
|
38
39
|
}.should == :method_return_value
|
39
40
|
|
40
41
|
NextSpecs.yielding_method(1) {
|
41
|
-
next 1
|
42
|
+
next 1
|
42
43
|
fail("next didn't end the block execution")
|
43
44
|
}.should == :method_return_value
|
44
45
|
|
45
46
|
NextSpecs.yielding_method([1, 2, 3]) {
|
46
|
-
next 1, 2, 3
|
47
|
+
next 1, 2, 3
|
47
48
|
fail("next didn't end the block execution")
|
48
49
|
}.should == :method_return_value
|
49
50
|
end
|
50
51
|
|
51
|
-
|
52
|
+
pending "returns to the currently yielding method in case of chained calls" do
|
53
|
+
class ChainedNextTest
|
54
|
+
def self.meth_with_yield(&b)
|
55
|
+
yield.should == :next_return_value
|
56
|
+
:method_return_value
|
57
|
+
end
|
58
|
+
def self.invoking_method(&b)
|
59
|
+
meth_with_yield(&b)
|
60
|
+
end
|
61
|
+
def self.enclosing_method
|
62
|
+
invoking_method do
|
63
|
+
next :next_return_value
|
64
|
+
:wrong_return_value
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
52
69
|
ChainedNextTest.enclosing_method.should == :method_return_value
|
53
70
|
end
|
54
71
|
|
@@ -64,6 +81,24 @@ describe "The next statement from within the block" do
|
|
64
81
|
|
65
82
|
ScratchPad.recorded.should == [:begin, :ensure]
|
66
83
|
end
|
84
|
+
|
85
|
+
it "skips following code outside an exception block" do
|
86
|
+
3.times do |i|
|
87
|
+
begin
|
88
|
+
ScratchPad << :begin
|
89
|
+
next if i == 0
|
90
|
+
break if i == 2
|
91
|
+
ScratchPad << :begin_end
|
92
|
+
ensure
|
93
|
+
ScratchPad << :ensure
|
94
|
+
end
|
95
|
+
|
96
|
+
ScratchPad << :after
|
97
|
+
end
|
98
|
+
|
99
|
+
ScratchPad.recorded.should == [
|
100
|
+
:begin, :ensure, :begin, :begin_end, :ensure, :after, :begin, :ensure]
|
101
|
+
end
|
67
102
|
end
|
68
103
|
|
69
104
|
describe "The next statement" do
|
@@ -73,10 +108,6 @@ describe "The next statement" do
|
|
73
108
|
|
74
109
|
describe "in a while loop" do
|
75
110
|
describe "when not passed an argument" do
|
76
|
-
before :each do
|
77
|
-
ScratchPad.record []
|
78
|
-
end
|
79
|
-
|
80
111
|
it "causes ensure blocks to run" do
|
81
112
|
NextSpecs.while_next(false)
|
82
113
|
|
@@ -91,10 +122,6 @@ describe "The next statement" do
|
|
91
122
|
end
|
92
123
|
|
93
124
|
describe "when passed an argument" do
|
94
|
-
before :each do
|
95
|
-
ScratchPad.record []
|
96
|
-
end
|
97
|
-
|
98
125
|
it "causes ensure blocks to run" do
|
99
126
|
NextSpecs.while_next(true)
|
100
127
|
|
@@ -107,5 +134,336 @@ describe "The next statement" do
|
|
107
134
|
ScratchPad.recorded.should == [:begin, :ensure]
|
108
135
|
end
|
109
136
|
end
|
137
|
+
|
138
|
+
it "causes nested ensure blocks to run" do
|
139
|
+
x = true
|
140
|
+
while x
|
141
|
+
begin
|
142
|
+
ScratchPad << :outer_begin
|
143
|
+
x = false
|
144
|
+
begin
|
145
|
+
ScratchPad << :inner_begin
|
146
|
+
next
|
147
|
+
ensure
|
148
|
+
ScratchPad << :inner_ensure
|
149
|
+
end
|
150
|
+
ensure
|
151
|
+
ScratchPad << :outer_ensure
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
ScratchPad.recorded.should == [:outer_begin, :inner_begin, :inner_ensure, :outer_ensure]
|
156
|
+
end
|
157
|
+
|
158
|
+
it "causes ensure blocks to run when mixed with break" do
|
159
|
+
x = 1
|
160
|
+
while true
|
161
|
+
begin
|
162
|
+
ScratchPad << :begin
|
163
|
+
break if x > 1
|
164
|
+
x += 1
|
165
|
+
next
|
166
|
+
ensure
|
167
|
+
ScratchPad << :ensure
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
ScratchPad.recorded.should == [:begin, :ensure, :begin, :ensure]
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
describe "in an until loop" do
|
176
|
+
describe "when not passed an argument" do
|
177
|
+
it "causes ensure blocks to run" do
|
178
|
+
NextSpecs.until_next(false)
|
179
|
+
|
180
|
+
ScratchPad.recorded.should == [:begin, :ensure]
|
181
|
+
end
|
182
|
+
|
183
|
+
it "causes ensure blocks to run when nested in an block" do
|
184
|
+
NextSpecs.until_within_iter(false)
|
185
|
+
|
186
|
+
ScratchPad.recorded.should == [:begin, :ensure]
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
describe "when passed an argument" do
|
191
|
+
it "causes ensure blocks to run" do
|
192
|
+
NextSpecs.until_next(true)
|
193
|
+
|
194
|
+
ScratchPad.recorded.should == [:begin, :ensure]
|
195
|
+
end
|
196
|
+
|
197
|
+
it "causes ensure blocks to run when nested in an block" do
|
198
|
+
NextSpecs.until_within_iter(true)
|
199
|
+
|
200
|
+
ScratchPad.recorded.should == [:begin, :ensure]
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
it "causes nested ensure blocks to run" do
|
205
|
+
x = false
|
206
|
+
until x
|
207
|
+
begin
|
208
|
+
ScratchPad << :outer_begin
|
209
|
+
x = true
|
210
|
+
begin
|
211
|
+
ScratchPad << :inner_begin
|
212
|
+
next
|
213
|
+
ensure
|
214
|
+
ScratchPad << :inner_ensure
|
215
|
+
end
|
216
|
+
ensure
|
217
|
+
ScratchPad << :outer_ensure
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
ScratchPad.recorded.should == [:outer_begin, :inner_begin, :inner_ensure, :outer_ensure]
|
222
|
+
end
|
223
|
+
|
224
|
+
it "causes ensure blocks to run when mixed with break" do
|
225
|
+
x = 1
|
226
|
+
until false
|
227
|
+
begin
|
228
|
+
ScratchPad << :begin
|
229
|
+
break if x > 1
|
230
|
+
x += 1
|
231
|
+
next
|
232
|
+
ensure
|
233
|
+
ScratchPad << :ensure
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
ScratchPad.recorded.should == [:begin, :ensure, :begin, :ensure]
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
describe "in a loop" do
|
242
|
+
describe "when not passed an argument" do
|
243
|
+
it "causes ensure blocks to run" do
|
244
|
+
NextSpecs.loop_next(false)
|
245
|
+
|
246
|
+
ScratchPad.recorded.should == [:begin, :ensure]
|
247
|
+
end
|
248
|
+
|
249
|
+
it "causes ensure blocks to run when nested in an block" do
|
250
|
+
NextSpecs.loop_within_iter(false)
|
251
|
+
|
252
|
+
ScratchPad.recorded.should == [:begin, :ensure]
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
describe "when passed an argument" do
|
257
|
+
it "causes ensure blocks to run" do
|
258
|
+
NextSpecs.loop_next(true)
|
259
|
+
|
260
|
+
ScratchPad.recorded.should == [:begin, :ensure]
|
261
|
+
end
|
262
|
+
|
263
|
+
it "causes ensure blocks to run when nested in an block" do
|
264
|
+
NextSpecs.loop_within_iter(true)
|
265
|
+
|
266
|
+
ScratchPad.recorded.should == [:begin, :ensure]
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
it "causes nested ensure blocks to run" do
|
271
|
+
x = 1
|
272
|
+
loop do
|
273
|
+
break if x == 2
|
274
|
+
|
275
|
+
begin
|
276
|
+
ScratchPad << :outer_begin
|
277
|
+
begin
|
278
|
+
ScratchPad << :inner_begin
|
279
|
+
x += 1
|
280
|
+
next
|
281
|
+
ensure
|
282
|
+
ScratchPad << :inner_ensure
|
283
|
+
end
|
284
|
+
ensure
|
285
|
+
ScratchPad << :outer_ensure
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
ScratchPad.recorded.should == [:outer_begin, :inner_begin, :inner_ensure, :outer_ensure]
|
290
|
+
end
|
291
|
+
|
292
|
+
it "causes ensure blocks to run when mixed with break" do
|
293
|
+
x = 1
|
294
|
+
loop do
|
295
|
+
begin
|
296
|
+
ScratchPad << :begin
|
297
|
+
break if x > 1
|
298
|
+
x += 1
|
299
|
+
next
|
300
|
+
ensure
|
301
|
+
ScratchPad << :ensure
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
ScratchPad.recorded.should == [:begin, :ensure, :begin, :ensure]
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
describe "Assignment via next" do
|
311
|
+
it "assigns objects" do
|
312
|
+
def r(val); a = yield(); val.should == a; end
|
313
|
+
r(nil){next}
|
314
|
+
r(nil){next nil}
|
315
|
+
r(1){next 1}
|
316
|
+
r([]){next []}
|
317
|
+
r([1]){next [1]}
|
318
|
+
r([nil]){next [nil]}
|
319
|
+
r([[]]){next [[]]}
|
320
|
+
r([]){next [*[]]}
|
321
|
+
r([1]){next [*[1]]}
|
322
|
+
r([1,2]){next [*[1,2]]}
|
323
|
+
end
|
324
|
+
|
325
|
+
ruby_version_is ""..."1.9" do
|
326
|
+
it "assigns splatted objects" do
|
327
|
+
def r(val); a = yield(); val.should == a; end
|
328
|
+
r(nil){next *nil}
|
329
|
+
r(1){next *1}
|
330
|
+
r(nil){next *[]}
|
331
|
+
r(1){next *[1]}
|
332
|
+
r(nil){next *[nil]}
|
333
|
+
r([]){next *[[]]}
|
334
|
+
r(nil){next *[*[]]}
|
335
|
+
r(1){next *[*[1]]}
|
336
|
+
r([1,2]){next *[*[1,2]]}
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
ruby_version_is "1.9" do
|
341
|
+
pending "assigns splatted objects" do
|
342
|
+
def r(val); a = yield(); val.should == a; end
|
343
|
+
r([]){next *nil}
|
344
|
+
r([1]){next *1}
|
345
|
+
r([]){next *[]}
|
346
|
+
r([1]){next *[1]}
|
347
|
+
r([nil]){next *[nil]}
|
348
|
+
r([[]]){next *[[]]}
|
349
|
+
r([]){next *[*[]]}
|
350
|
+
r([1]){next *[*[1]]}
|
351
|
+
r([1,2]){next *[*[1,2]]}
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
ruby_version_is ""..."1.9" do
|
356
|
+
it "assigns objects to a splatted reference" do
|
357
|
+
def r(val); *a = yield(); val.should == a; end
|
358
|
+
r([nil]){next}
|
359
|
+
r([nil]){next nil}
|
360
|
+
r([1]){next 1}
|
361
|
+
r([[]]){next []}
|
362
|
+
r([[1]]){next [1]}
|
363
|
+
r([[nil]]){next [nil]}
|
364
|
+
r([[[]]]){next [[]]}
|
365
|
+
r([[1,2]]){next [1,2]}
|
366
|
+
r([[]]){next [*[]]}
|
367
|
+
r([[1]]){next [*[1]]}
|
368
|
+
r([[1,2]]){next [*[1,2]]}
|
369
|
+
end
|
110
370
|
end
|
111
|
-
|
371
|
+
|
372
|
+
ruby_version_is "1.9" do
|
373
|
+
pending "assigns objects to a splatted reference" do
|
374
|
+
def r(val); *a = yield(); val.should == a; end
|
375
|
+
r([nil]){next}
|
376
|
+
r([nil]){next nil}
|
377
|
+
r([1]){next 1}
|
378
|
+
r([]){next []}
|
379
|
+
r([1]){next [1]}
|
380
|
+
r([nil]){next [nil]}
|
381
|
+
r([[]]){next [[]]}
|
382
|
+
r([1,2]){next [1,2]}
|
383
|
+
r([]){next [*[]]}
|
384
|
+
r([1]){next [*[1]]}
|
385
|
+
r([1,2]){next [*[1,2]]}
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
389
|
+
ruby_version_is ""..."1.9" do
|
390
|
+
it "assigns splatted objects to a splatted reference via a splatted yield" do
|
391
|
+
def r(val); *a = *yield(); val.should == a; end
|
392
|
+
r([nil]){next *nil}
|
393
|
+
r([1]){next *1}
|
394
|
+
r([nil]){next *[]}
|
395
|
+
r([1]){next *[1]}
|
396
|
+
r([nil]){next *[nil]}
|
397
|
+
r([]){next *[[]]}
|
398
|
+
r([1,2]){next *[1,2]}
|
399
|
+
r([nil]){next *[*[]]}
|
400
|
+
r([1]){next *[*[1]]}
|
401
|
+
r([1,2]){next *[*[1,2]]}
|
402
|
+
end
|
403
|
+
end
|
404
|
+
|
405
|
+
ruby_version_is "1.9" do
|
406
|
+
pending "assigns splatted objects to a splatted reference via a splatted yield" do
|
407
|
+
def r(val); *a = *yield(); val.should == a; end
|
408
|
+
r([]){next *nil}
|
409
|
+
r([1]){next *1}
|
410
|
+
r([]){next *[]}
|
411
|
+
r([1]){next *[1]}
|
412
|
+
r([nil]){next *[nil]}
|
413
|
+
r([[]]){next *[[]]}
|
414
|
+
r([1,2]){next *[1,2]}
|
415
|
+
r([]){next *[*[]]}
|
416
|
+
r([1]){next *[*[1]]}
|
417
|
+
r([1,2]){next *[*[1,2]]}
|
418
|
+
end
|
419
|
+
end
|
420
|
+
|
421
|
+
it "assigns objects to multiple variables" do
|
422
|
+
def r(val); a,b,*c = yield(); val.should == [a,b,c]; end
|
423
|
+
r([nil,nil,[]]){next}
|
424
|
+
r([nil,nil,[]]){next nil}
|
425
|
+
r([1,nil,[]]){next 1}
|
426
|
+
r([nil,nil,[]]){next []}
|
427
|
+
r([1,nil,[]]){next [1]}
|
428
|
+
r([nil,nil,[]]){next [nil]}
|
429
|
+
r([[],nil,[]]){next [[]]}
|
430
|
+
r([1,2,[]]){next [1,2]}
|
431
|
+
r([nil,nil,[]]){next [*[]]}
|
432
|
+
r([1,nil,[]]){next [*[1]]}
|
433
|
+
r([1,2,[]]){next [*[1,2]]}
|
434
|
+
end
|
435
|
+
|
436
|
+
ruby_version_is ""..."1.9" do
|
437
|
+
it "assigns splatted objects to multiple variables" do
|
438
|
+
def r(val); a,b,*c = *yield(); val.should == [a,b,c]; end
|
439
|
+
r([nil,nil,[]]){next *nil}
|
440
|
+
r([1,nil,[]]){next *1}
|
441
|
+
r([nil,nil,[]]){next *[]}
|
442
|
+
r([1,nil,[]]){next *[1]}
|
443
|
+
r([nil,nil,[]]){next *[nil]}
|
444
|
+
r([nil,nil,[]]){next *[[]]}
|
445
|
+
r([1,2,[]]){next *[1,2]}
|
446
|
+
r([nil,nil,[]]){next *[*[]]}
|
447
|
+
r([1,nil,[]]){next *[*[1]]}
|
448
|
+
r([1,2,[]]){next *[*[1,2]]}
|
449
|
+
end
|
450
|
+
end
|
451
|
+
|
452
|
+
ruby_version_is "1.9" do
|
453
|
+
pending "assigns splatted objects to multiple variables" do
|
454
|
+
def r(val); a,b,*c = *yield(); val.should == [a,b,c]; end
|
455
|
+
r([nil,nil,[]]){next *nil}
|
456
|
+
r([1,nil,[]]){next *1}
|
457
|
+
r([nil,nil,[]]){next *[]}
|
458
|
+
r([1,nil,[]]){next *[1]}
|
459
|
+
r([nil,nil,[]]){next *[nil]}
|
460
|
+
r([[],nil,[]]){next *[[]]}
|
461
|
+
r([1,2,[]]){next *[1,2]}
|
462
|
+
r([nil,nil,[]]){next *[*[]]}
|
463
|
+
r([1,nil,[]]){next *[*[1]]}
|
464
|
+
r([1,2,[]]){next *[*[1,2]]}
|
465
|
+
end
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
469
|
+
# language_version __FILE__, "next"
|