ParseTree 2.2.0 → 3.0.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.
@@ -4,7 +4,8 @@ dir = File.expand_path "~/.ruby_inline"
4
4
  if test ?d, dir then
5
5
  require 'fileutils'
6
6
  puts "nuking #{dir}"
7
- FileUtils.rm_r dir
7
+ # force removal, Windoze is bitching at me, something to hunt later...
8
+ FileUtils.rm_r dir, :force => true
8
9
  end
9
10
 
10
11
  require 'test/unit'
@@ -18,17 +19,11 @@ class SomethingWithInitialize
18
19
  def protected_meth; end
19
20
  end
20
21
 
21
- $verbose_methods = {
22
- "test_begin_rescue_twice" => true,
23
- "test_block_stmt_after" => true,
24
- "test_block_stmt_both" => true,
25
- }
26
-
27
- class ParseTree
22
+ class RawParseTree
28
23
  def process(input, verbose = nil) # TODO: remove
29
24
 
30
25
  test_method = caller[0][/\`(.*)\'/, 1]
31
- verbose = $verbose_methods[test_method]
26
+ verbose = test_method =~ /mri_verbose_flag/ ? true : nil
32
27
 
33
28
  # um. kinda stupid, but cleaner
34
29
  case input
@@ -40,10 +35,19 @@ class ParseTree
40
35
  end
41
36
  end
42
37
 
43
- class TestParseTree < ParseTreeTestCase
38
+ class TestRawParseTree < ParseTreeTestCase
44
39
  def setup
45
40
  super
46
- @processor = ParseTree.new(false)
41
+ @processor = RawParseTree.new(false)
42
+ end
43
+
44
+ def test_parse_tree_for_string_with_newlines
45
+ @processor = RawParseTree.new(true)
46
+ actual = @processor.parse_tree_for_string "1 +\n nil", 'test.rb', 5
47
+ expected = [[:newline, 6, "test.rb",
48
+ [:call, [:lit, 1], :+, [:array, [:nil]]]]]
49
+
50
+ assert_equal expected, actual
47
51
  end
48
52
 
49
53
  def test_class_initialize
@@ -84,15 +88,6 @@ class TestParseTree < ParseTreeTestCase
84
88
  assert_equal expected, actual
85
89
  end
86
90
 
87
- def test_parse_tree_for_string_with_newlines
88
- @processor = ParseTree.new(true)
89
- actual = @processor.parse_tree_for_string "1 +\n nil", 'test.rb', 5
90
- expected = [[:newline, 6, "test.rb",
91
- [:call, [:lit, 1], :+, [:array, [:nil]]]]]
92
-
93
- assert_equal expected, actual
94
- end
95
-
96
91
  def test_parse_tree_for_str
97
92
  actual = @processor.parse_tree_for_str '1 + nil', '(string)', 1
98
93
  expected = [[:call, [:lit, 1], :+, [:array, [:nil]]]]
@@ -124,6 +119,7 @@ class TestParseTree < ParseTreeTestCase
124
119
  [:fcall, :puts, [:array, [:call, [:lvar, :arg3], :to_s]]],
125
120
  [:return,
126
121
  [:str, "foo"]]]]]
122
+
127
123
  @@multi_args = [:defn, :multi_args,
128
124
  [:scope,
129
125
  [:block,
@@ -139,11 +135,13 @@ class TestParseTree < ParseTreeTestCase
139
135
  [:fcall, :puts, [:array, [:call, [:lvar, :arg3], :to_s]]],
140
136
  [:return,
141
137
  [:str, "foo"]]]]]
138
+
142
139
  @@unknown_args = [:defn, :unknown_args,
143
140
  [:scope,
144
141
  [:block,
145
142
  [:args, :arg1, :arg2],
146
143
  [:return, [:lvar, :arg1]]]]]
144
+
147
145
  @@bbegin = [:defn, :bbegin,
148
146
  [:scope,
149
147
  [:block,
@@ -225,3 +223,37 @@ class TestParseTree < ParseTreeTestCase
225
223
  "Must return a lot of shit")
226
224
  end
227
225
  end
226
+
227
+ class TestParseTree < ParseTreeTestCase
228
+ def setup
229
+ super
230
+ @processor = ParseTree.new(false)
231
+ end
232
+
233
+ def test_process_string
234
+ actual = @processor.process '1 + nil'
235
+ expected = s(:call, s(:lit, 1), :+, s(:arglist, s(:nil)))
236
+
237
+ assert_equal expected, actual
238
+
239
+ actual = @processor.process 'puts 42'
240
+ expected = s(:call, nil, :puts, s(:arglist, s(:lit, 42)))
241
+
242
+ assert_equal expected, actual
243
+ end
244
+
245
+ def test_process_string_newlines
246
+ @processor = ParseTree.new(true)
247
+ actual = @processor.process "1 +\n nil", false, 'test.rb', 5
248
+ expected = s(:newline, 6, "test.rb",
249
+ s(:call, s(:lit, 1), :+, s(:arglist, s(:nil))))
250
+
251
+ assert_equal expected, actual
252
+ end
253
+
254
+ # TODO: test_process_proc ?
255
+ # TODO: test_process_method ?
256
+ # TODO: test_process_class ?
257
+ # TODO: test_process_module ?
258
+
259
+ end
@@ -0,0 +1,39 @@
1
+ require 'test/unit'
2
+ require 'parse_tree'
3
+ require 'parse_tree_extensions'
4
+ require 'tmpdir'
5
+
6
+ $: << "../../ruby2ruby/dev/lib" # unoffical dependency - user responsibility
7
+ require 'ruby2ruby'
8
+
9
+ class R2RTestCase < Test::Unit::TestCase
10
+ def test_proc_to_ruby
11
+ util_setup_inline
12
+ block = proc { puts "something" }
13
+ assert_equal 'proc { puts("something") }', block.to_ruby
14
+ end
15
+
16
+ def test_proc_to_sexp
17
+ util_setup_inline
18
+ p = proc { 1 + 1 }
19
+ s = s(:iter,
20
+ s(:call, nil, :proc, s(:arglist)),
21
+ nil,
22
+ s(:call, s(:lit, 1), :+, s(:arglist, s(:lit, 1))))
23
+ assert_equal s, p.to_sexp
24
+ end
25
+
26
+ def test_unbound_method_to_ruby
27
+ util_setup_inline
28
+ r = "proc { ||\n util_setup_inline\n p = proc { (1 + 1) }\n s = s(:iter, s(:call, nil, :proc, s(:arglist)), nil, s(:call, s(:lit, 1), :+, s(:arglist, s(:lit, 1))))\n assert_equal(s, p.to_sexp)\n}"
29
+ m = self.class.instance_method(:test_proc_to_sexp)
30
+
31
+ assert_equal r, m.to_ruby
32
+ end
33
+
34
+ def util_setup_inline
35
+ @rootdir = File.join(Dir.tmpdir, "test_ruby_to_ruby.#{$$}")
36
+ Dir.mkdir @rootdir, 0700 unless test ?d, @rootdir
37
+ ENV['INLINEDIR'] = @rootdir
38
+ end
39
+ end
@@ -7,12 +7,13 @@ require 'test/unit/testcase'
7
7
  require 'sexp'
8
8
  require 'sexp_processor'
9
9
  require 'unified_ruby'
10
+ require 'pt_testcase'
10
11
 
11
12
  class TestUnifier < SexpProcessor
12
13
  include UnifiedRuby
13
14
  end
14
15
 
15
- # TODO:
16
+ # (old) TODO:
16
17
  #
17
18
  # 1) DONE [vf]call => call
18
19
  # 2) DONE defn scope block args -> defn args scope block
@@ -21,237 +22,294 @@ end
21
22
  # 5) defs x -> defn self.x # ON HOLD
22
23
  # 6) ? :block_arg into args list?
23
24
 
24
- class TestUnifiedRuby < Test::Unit::TestCase
25
- def setup
26
- @sp = TestUnifier.new
27
- @sp.require_empty = false
28
- end
25
+ # ParseTreeTestCase.testcase_order << "UnifiedRuby"
26
+ # class TestUnifiedRuby < ParseTreeTestCase
27
+ # def setup
28
+ # super
29
+ # @processor = TestUnifier.new
30
+ # end
31
+ # end
32
+
33
+ # add_test("alias", :skip)
34
+ # add_test("alias_ugh", :skip)
35
+ # add_test("and", :skip)
36
+ # add_test("argscat_inside", :skip)
37
+ # add_test("argscat_svalue", :skip)
38
+ # add_test("argspush", :skip)
39
+ # add_test("array", :skip)
40
+ # add_test("array_pct_W", :skip)
41
+ # add_test("attrasgn", :skip)
42
+ # add_test("attrasgn_index_equals", :skip)
43
+ # add_test("attrasgn_index_equals_space", :skip)
44
+ # add_test("attrset", :skip)
45
+ # add_test("back_ref", :skip)
46
+ # add_test("begin", :skip)
47
+ # add_test("begin_def", :skip)
48
+ # add_test("begin_rescue_ensure", :skip)
49
+ # add_test("begin_rescue_twice", :skip)
50
+ # add_test("block_lasgn", :skip)
51
+ # add_test("block_mystery_block", :skip)
52
+ # add_test("block_pass_args_and_splat", :skip)
53
+ # add_test("block_pass_call_0", :skip)
54
+ # add_test("block_pass_call_1", :skip)
55
+ # add_test("block_pass_call_n", :skip)
56
+ # add_test("block_pass_fcall_0", :skip)
57
+ # add_test("block_pass_fcall_1", :skip)
58
+ # add_test("block_pass_fcall_n", :skip)
59
+ # add_test("block_pass_omgwtf", :skip)
60
+ # add_test("block_pass_splat", :skip)
61
+ # add_test("block_pass_thingy", :skip)
62
+ # add_test("block_stmt_after", :skip)
63
+ # add_test("block_stmt_before", :skip)
64
+ # add_test("block_stmt_both", :skip)
65
+ # add_test("bmethod", :skip)
66
+ # add_test("bmethod_noargs", :skip)
67
+ # add_test("bmethod_splat", :skip)
68
+ # add_test("break", :skip)
69
+ # add_test("break_arg", :skip)
70
+ # add_test("call", :skip)
71
+ # add_test("call_arglist", :skip)
72
+ # add_test("call_arglist_hash", :skip)
73
+ # add_test("call_arglist_norm_hash", :skip)
74
+ # add_test("call_arglist_norm_hash_splat", :skip)
75
+ # add_test("call_command", :skip)
76
+ # add_test("call_expr", :skip)
77
+ # add_test("call_index", :skip)
78
+ # add_test("call_index_no_args", :skip)
79
+ # add_test("call_index_space", :skip)
80
+ # add_test("call_unary_neg", :skip)
81
+ # add_test("case", :skip)
82
+ # add_test("case_nested", :skip)
83
+ # add_test("case_nested_inner_no_expr", :skip)
84
+ # add_test("case_no_expr", :skip)
85
+ # add_test("case_splat", :skip)
86
+ # add_test("cdecl", :skip)
87
+ # add_test("class_plain", :skip)
88
+ # add_test("class_scoped", :skip)
89
+ # add_test("class_scoped3", :skip)
90
+ # add_test("class_super_array", :skip)
91
+ # add_test("class_super_expr", :skip)
92
+ # add_test("class_super_object", :skip)
93
+ # add_test("colon2", :skip)
94
+ # add_test("colon3", :skip)
95
+ # add_test("conditional1", :skip)
96
+ # add_test("conditional2", :skip)
97
+ # add_test("conditional3", :skip)
98
+ # add_test("conditional4", :skip)
99
+ # add_test("conditional5", :skip)
100
+ # add_test("conditional_post_if", :skip)
101
+ # add_test("conditional_post_if_not", :skip)
102
+ # add_test("conditional_post_unless", :skip)
103
+ # add_test("conditional_post_unless_not", :skip)
104
+ # add_test("conditional_pre_if", :skip)
105
+ # add_test("conditional_pre_if_not", :skip)
106
+ # add_test("conditional_pre_unless", :skip)
107
+ # add_test("conditional_pre_unless_not", :skip)
108
+ # add_test("const", :skip)
109
+ # add_test("constX", :skip)
110
+ # add_test("constY", :skip)
111
+ # add_test("constZ", :skip)
112
+ # add_test("cvar", :skip)
113
+ # add_test("cvasgn", :skip)
114
+ # add_test("cvasgn_cls_method", :skip)
115
+ # add_test("cvdecl", :skip)
116
+ # add_test("dasgn_0", :skip)
117
+ # add_test("dasgn_1", :skip)
118
+ # add_test("dasgn_2", :skip)
119
+ # add_test("dasgn_curr", :skip)
120
+ # add_test("dasgn_icky", :skip)
121
+ # add_test("dasgn_mixed", :skip)
122
+ # add_test("defined", :skip)
123
+ # add_test("defn_args_mand_opt_block", :skip)
124
+ # add_test("defn_args_mand_opt_splat", :skip)
125
+ # add_test("defn_args_mand_opt_splat_block", :skip)
126
+ # add_test("defn_args_mand_opt_splat_no_name", :skip)
127
+ # add_test("defn_args_opt_block", :skip)
128
+ # add_test("defn_args_opt_splat_no_name", :skip)
129
+ # add_test("defn_empty", :skip)
130
+ # add_test("defn_empty_args", :skip)
131
+ # add_test("defn_lvar_boundary", :skip)
132
+ # add_test("defn_optargs", :skip)
133
+ # add_test("defn_or", :skip)
134
+ # add_test("defn_rescue", :skip)
135
+ # add_test("defn_something_eh", :skip)
136
+ # add_test("defn_splat_no_name", :skip)
137
+ # add_test("defn_zarray", :skip)
138
+ # add_test("defs", :skip)
139
+ # add_test("defs_args_mand_opt_splat_block", :skip)
140
+ # add_test("defs_empty", :skip)
141
+ # add_test("defs_empty_args", :skip)
142
+ # add_test("dmethod", :skip)
143
+ # add_test("dot2", :skip)
144
+ # add_test("dot3", :skip)
145
+ # add_test("dregx", :skip)
146
+ # add_test("dregx_interp", :skip)
147
+ # add_test("dregx_n", :skip)
148
+ # add_test("dregx_once", :skip)
149
+ # add_test("dregx_once_n_interp", :skip)
150
+ # add_test("dstr", :skip)
151
+ # add_test("dstr_2", :skip)
152
+ # add_test("dstr_3", :skip)
153
+ # add_test("dstr_concat", :skip)
154
+ # add_test("dstr_heredoc_expand", :skip)
155
+ # add_test("dstr_heredoc_windoze_sucks", :skip)
156
+ # add_test("dstr_heredoc_yet_again", :skip)
157
+ # add_test("dstr_nest", :skip)
158
+ # add_test("dstr_str_lit_start", :skip)
159
+ # add_test("dstr_the_revenge", :skip)
160
+ # add_test("dsym", :skip)
161
+ # add_test("dxstr", :skip)
162
+ # add_test("ensure", :skip)
163
+ # add_test("false", :skip)
164
+ # add_test("fbody", :skip)
165
+ # add_test("fcall_arglist", :skip)
166
+ # add_test("fcall_arglist_hash", :skip)
167
+ # add_test("fcall_arglist_norm_hash", :skip)
168
+ # add_test("fcall_arglist_norm_hash_splat", :skip)
169
+ # add_test("fcall_block", :skip)
170
+ # add_test("fcall_index_space", :skip)
171
+ # add_test("fcall_keyword", :skip)
172
+ # add_test("flip2", :skip)
173
+ # add_test("flip2_method", :skip)
174
+ # add_test("flip3", :skip)
175
+ # add_test("for", :skip)
176
+ # add_test("for_no_body", :skip)
177
+ # add_test("gasgn", :skip)
178
+ # add_test("global", :skip)
179
+ # add_test("gvar", :skip)
180
+ # add_test("gvar_underscore", :skip)
181
+ # add_test("gvar_underscore_blah", :skip)
182
+ # add_test("hash", :skip)
183
+ # add_test("hash_rescue", :skip)
184
+ # add_test("iasgn", :skip)
185
+ # add_test("if_block_condition", :skip)
186
+ # add_test("if_lasgn_short", :skip)
187
+ # add_test("iteration1", :skip)
188
+ # add_test("iteration2", :skip)
189
+ # add_test("iteration3", :skip)
190
+ # add_test("iteration4", :skip)
191
+ # add_test("iteration5", :skip)
192
+ # add_test("iteration6", :skip)
193
+ # add_test("iteration7", :skip)
194
+ # add_test("iteration8", :skip)
195
+ # add_test("iteration9", :skip)
196
+ # add_test("iteration_dasgn_curr_dasgn_madness", :skip)
197
+ # add_test("iteration_double_var", :skip)
198
+ # add_test("iteration_masgn", :skip)
199
+ # add_test("ivar", :skip)
200
+ # add_test("lasgn_array", :skip)
201
+ # add_test("lasgn_call", :skip)
202
+ # add_test("lit_bool_false", :skip)
203
+ # add_test("lit_bool_true", :skip)
204
+ # add_test("lit_float", :skip)
205
+ # add_test("lit_long", :skip)
206
+ # add_test("lit_long_negative", :skip)
207
+ # add_test("lit_range2", :skip)
208
+ # add_test("lit_range3", :skip)
209
+ # add_test("lit_regexp", :skip)
210
+ # add_test("lit_regexp_i_wwtt", :skip)
211
+ # add_test("lit_regexp_n", :skip)
212
+ # add_test("lit_regexp_once", :skip)
213
+ # add_test("lit_sym", :skip)
214
+ # add_test("lit_sym_splat", :skip)
215
+ # add_test("lvar_def_boundary", :skip)
216
+ # add_test("masgn", :skip)
217
+ # add_test("masgn_argscat", :skip)
218
+ # add_test("masgn_attrasgn", :skip)
219
+ # add_test("masgn_iasgn", :skip)
220
+ # add_test("masgn_masgn", :skip)
221
+ # add_test("masgn_splat", :skip)
222
+ # add_test("masgn_splat_no_name_to_ary", :skip)
223
+ # add_test("masgn_splat_no_name_trailing", :skip)
224
+ # add_test("masgn_splat_to_ary", :skip)
225
+ # add_test("masgn_splat_to_ary2", :skip)
226
+ # add_test("match", :skip)
227
+ # add_test("match2", :skip)
228
+ # add_test("match3", :skip)
229
+ # add_test("module", :skip)
230
+ # add_test("module_scoped", :skip)
231
+ # add_test("module_scoped3", :skip)
232
+ # add_test("next", :skip)
233
+ # add_test("next_arg", :skip)
234
+ # add_test("not", :skip)
235
+ # add_test("nth_ref", :skip)
236
+ # add_test("op_asgn1", :skip)
237
+ # add_test("op_asgn2", :skip)
238
+ # add_test("op_asgn2_self", :skip)
239
+ # add_test("op_asgn_and", :skip)
240
+ # add_test("op_asgn_and_ivar2", :skip)
241
+ # add_test("op_asgn_or", :skip)
242
+ # add_test("op_asgn_or_block", :skip)
243
+ # add_test("op_asgn_or_ivar", :skip)
244
+ # add_test("op_asgn_or_ivar2", :skip)
245
+ # add_test("or", :skip)
246
+ # add_test("or_big", :skip)
247
+ # add_test("or_big2", :skip)
248
+ # add_test("parse_floats_as_args", :skip)
249
+ # add_test("postexe", :skip)
250
+ # add_test("proc_args_0", :skip)
251
+ # add_test("proc_args_1", :skip)
252
+ # add_test("proc_args_2", :skip)
253
+ # add_test("proc_args_no", :skip)
254
+ # add_test("redo", :skip)
255
+ # add_test("rescue", :skip)
256
+ # add_test("rescue_block_body", :skip)
257
+ # add_test("rescue_block_nada", :skip)
258
+ # add_test("rescue_exceptions", :skip)
259
+ # add_test("retry", :skip)
260
+ # add_test("return_0", :skip)
261
+ # add_test("return_1", :skip)
262
+ # add_test("return_n", :skip)
263
+ # add_test("sclass", :skip)
264
+ # add_test("sclass_trailing_class", :skip)
265
+ # add_test("splat", :skip)
266
+ # add_test("str", :skip)
267
+ # add_test("str_concat_newline", :skip)
268
+ # add_test("str_concat_space", :skip)
269
+ # add_test("str_heredoc", :skip)
270
+ # add_test("str_heredoc_call", :skip)
271
+ # add_test("str_heredoc_double", :skip)
272
+ # add_test("str_heredoc_indent", :skip)
273
+ # add_test("str_interp_file", :skip)
274
+ # add_test("structure_extra_block_for_dvar_scoping", :skip)
275
+ # add_test("structure_remove_begin_1", :skip)
276
+ # add_test("structure_remove_begin_2", :skip)
277
+ # add_test("structure_unused_literal_wwtt", :skip)
278
+ # add_test("super", :skip)
279
+ # add_test("super_block_pass", :skip)
280
+ # add_test("super_block_splat", :skip)
281
+ # add_test("super_multi", :skip)
282
+ # add_test("svalue", :skip)
283
+ # add_test("to_ary", :skip)
284
+ # add_test("true", :skip)
285
+ # add_test("undef", :skip)
286
+ # add_test("undef_2", :skip)
287
+ # add_test("undef_3", :skip)
288
+ # add_test("undef_block_1", :skip)
289
+ # add_test("undef_block_2", :skip)
290
+ # add_test("undef_block_3", :skip)
291
+ # add_test("undef_block_3_post", :skip)
292
+ # add_test("undef_block_wtf", :skip)
293
+ # add_test("until_post", :skip)
294
+ # add_test("until_post_not", :skip)
295
+ # add_test("until_pre", :skip)
296
+ # add_test("until_pre_mod", :skip)
297
+ # add_test("until_pre_not", :skip)
298
+ # add_test("until_pre_not_mod", :skip)
299
+ # add_test("valias", :skip)
300
+ # add_test("vcall", :skip)
301
+ # add_test("while_post", :skip)
302
+ # add_test("while_post_not", :skip)
303
+ # add_test("while_pre", :skip)
304
+ # add_test("while_pre_mod", :skip)
305
+ # add_test("while_pre_nil", :skip)
306
+ # add_test("while_pre_not", :skip)
307
+ # add_test("while_pre_not_mod", :skip)
308
+ # add_test("xstr", :skip)
309
+ # add_test("yield", :skip)
310
+ # add_test("yield_arg", :skip) # TODO: make it always have an argslist
311
+ # add_test("yield_args", :skip) # TODO: array -> argslist
312
+ # add_test("zarray", :skip)
313
+ # add_test("zsuper", :skip)
314
+ # end
29
315
 
30
- def doit
31
- assert_equal @expect, @sp.process(@insert)
32
- end
33
-
34
- def test_call_args
35
- @insert = s(:call, s(:lit, 42), :y, s(:array, s(:lit, 24)))
36
- @expect = s(:call, s(:lit, 42), :y, s(:arglist, s(:lit, 24)))
37
-
38
- doit
39
- end
40
-
41
- def test_call_array_args
42
- @insert = s(:call, s(:lit, 42), :y, s(:array))
43
- @expect = s(:call, s(:lit, 42), :y, s(:arglist))
44
-
45
- doit
46
- end
47
-
48
- def test_call_no_args
49
- @insert = s(:call, s(:lit, 42), :y)
50
- @expect = s(:call, s(:lit, 42), :y, s(:arglist))
51
-
52
- doit
53
- end
54
-
55
- def test_rewrite_bmethod
56
- @insert = s(:bmethod,
57
- s(:dasgn_curr, :x),
58
- s(:call, s(:dvar, :x), :+, s(:array, s(:lit, 1))))
59
- @expect = s(:scope,
60
- s(:block,
61
- s(:args, :x),
62
- s(:call, s(:lvar, :x), :+, s(:arglist, s(:lit, 1)))))
63
-
64
- doit
65
- end
66
-
67
- # [:proc, [:masgn, [:array, [:dasgn_curr, :x], [:dasgn_curr, :y]]]]
68
-
69
- # proc { |x,y| x + y }
70
- # =
71
- # s(:iter,
72
- # s(:fcall, :proc),
73
- # s(:masgn, s(:array, s(:dasgn_curr, :x), s(:dasgn_curr, :y))),
74
- # s(:call, s(:dvar, :x), :+, s(:array, s(:dvar, :y))))
75
-
76
- def test_rewrite_bmethod_noargs
77
- @insert = s(:bmethod,
78
- nil,
79
- s(:call, s(:vcall, :x), :+, s(:array, s(:lit, 1))))
80
- @expect = s(:scope,
81
- s(:block,
82
- s(:args),
83
- s(:call, s(:call, nil, :x, s(:arglist)),
84
- :+, s(:arglist, s(:lit, 1)))))
85
-
86
- doit
87
- end
88
-
89
- def test_rewrite_bmethod_splat
90
- @insert = s(:bmethod,
91
- s(:masgn, s(:dasgn_curr, :params)),
92
- s(:lit, 42))
93
- @expect = s(:scope,
94
- s(:block,
95
- s(:args, :"*params"),
96
- s(:lit, 42)))
97
-
98
- doit
99
- end
100
-
101
- def test_rewrite_defn
102
- @insert = s(:defn, :x, s(:scope, s(:block, s(:args), s(:nil))))
103
- @expect = s(:defn, :x, s(:args), s(:scope, s(:block, s(:nil))))
104
-
105
- doit
106
- end
107
-
108
- def test_rewrite_defn_attr
109
- @insert = s(:defn, :writer=, s(:attrset, :@writer))
110
- @expect = s(:defn, :writer=, s(:args), s(:attrset, :@writer))
111
-
112
- doit
113
- end
114
-
115
- def test_rewrite_defn_block_arg
116
- @insert = s(:defn, :blah,
117
- s(:scope,
118
- s(:block,
119
- s(:args, "*args".intern),
120
- s(:block_arg, :block),
121
- s(:block_pass,
122
- s(:lvar, :block),
123
- s(:fcall, :other, s(:splat, s(:lvar, :args)))))))
124
- @expect = s(:defn, :blah,
125
- s(:args, "*args".intern, s(:block_arg, :block)),
126
- s(:scope,
127
- s(:block,
128
- s(:block_pass,
129
- s(:lvar, :block),
130
- s(:call, nil, :other,
131
- s(:splat, s(:lvar, :args)))))))
132
-
133
- doit
134
- end
135
-
136
- def test_rewrite_defn_bmethod_alias
137
- @insert = s(:defn, :group,
138
- s(:fbody,
139
- s(:bmethod,
140
- s(:masgn, s(:dasgn_curr, :params)),
141
- s(:block,
142
- s(:lit, 42)))))
143
- @expect = s(:defn, :group,
144
- s(:args, :"*params"),
145
- s(:scope,
146
- s(:block, s(:lit, 42))))
147
-
148
- doit
149
- end
150
-
151
- def test_rewrite_defn_ivar
152
- @insert = s(:defn, :reader, s(:ivar, :@reader))
153
- @expect = s(:defn, :reader, s(:args), s(:ivar, :@reader))
154
-
155
- doit
156
- end
157
-
158
- def test_rewrite_defs
159
- @insert = s(:defs, s(:self), :meth, s(:scope, s(:block, s(:args), s(:true))))
160
- @expect = s(:defs, s(:self), :meth, s(:args), s(:scope, s(:block, s(:true))))
161
-
162
- doit
163
- end
164
-
165
- def test_rewrite_dmethod
166
- @insert = s(:dmethod,
167
- :a_method,
168
- s(:scope,
169
- s(:block,
170
- s(:args, :x),
171
- s(:lit, 42))))
172
- @expect = s(:scope,
173
- s(:block,
174
- s(:args, :x),
175
- s(:lit, 42)))
176
-
177
- doit
178
- end
179
-
180
- def test_rewrite_fcall
181
- @insert = s(:fcall, :puts, s(:array, s(:lit, :blah)))
182
- @expect = s(:call, nil, :puts, s(:arglist, s(:lit, :blah)))
183
-
184
- doit
185
- end
186
-
187
- def test_rewrite_fcall_loop
188
- @insert = s(:iter, s(:fcall, :loop), nil)
189
- @expect = s(:iter, s(:call, nil, :loop, s(:arglist)), nil)
190
-
191
- doit
192
- end
193
-
194
- def test_rewrite_fcall_splat
195
- @insert = s(:fcall, :method, s(:splat, s(:vcall, :a)))
196
- @expect = s(:call, nil, :method, s(:splat, s(:call, nil, :a, s(:arglist))))
197
- doit
198
- end
199
-
200
- # TODO: think about flattening out to 1 resbody only
201
- def test_rewrite_resbody
202
- @insert = s(:resbody,
203
- s(:array, s(:const, :SyntaxError)),
204
- s(:block, s(:lasgn, :e1, s(:gvar, :$!)), s(:lit, 2)),
205
- s(:resbody,
206
- s(:array, s(:const, :Exception)),
207
- s(:block, s(:lasgn, :e2, s(:gvar, :$!)), s(:lit, 3))))
208
-
209
- @expect = s(:resbody,
210
- s(:array, s(:const, :SyntaxError), s(:lasgn, :e1, s(:gvar, :$!))),
211
- s(:block, s(:lit, 2)),
212
- s(:resbody,
213
- s(:array, s(:const, :Exception), s(:lasgn, :e2, s(:gvar, :$!))),
214
- s(:block, s(:lit, 3))))
215
-
216
- doit
217
- end
218
-
219
- def test_rewrite_resbody_empty
220
- # begin require 'rubygems'; rescue LoadError; end
221
- @insert = s(:begin,
222
- s(:rescue,
223
- s(:fcall, :require, s(:array, s(:str, "rubygems"))),
224
- s(:resbody, s(:array, s(:const, :LoadError)))))
225
- @expect = s(:begin,
226
- s(:rescue,
227
- s(:call, nil, :require, s(:arglist, s(:str, "rubygems"))),
228
- s(:resbody, s(:array, s(:const, :LoadError)), nil)))
229
-
230
- doit
231
- end
232
-
233
- def test_rewrite_resbody_lasgn
234
- @insert = s(:resbody,
235
- s(:array, s(:const, :SyntaxError)),
236
- s(:lasgn, :e1, s(:gvar, :$!)),
237
- s(:resbody,
238
- s(:array, s(:const, :Exception)),
239
- s(:block, s(:lasgn, :e2, s(:gvar, :$!)), s(:lit, 3))))
240
-
241
- @expect = s(:resbody,
242
- s(:array, s(:const, :SyntaxError), s(:lasgn, :e1, s(:gvar, :$!))),
243
- nil,
244
- s(:resbody,
245
- s(:array, s(:const, :Exception), s(:lasgn, :e2, s(:gvar, :$!))),
246
- s(:block, s(:lit, 3))))
247
-
248
- doit
249
- end
250
-
251
- def test_rewrite_vcall
252
- @insert = s(:vcall, :puts)
253
- @expect = s(:call, nil, :puts, s(:arglist))
254
-
255
- doit
256
- end
257
- end