ParseTree 2.2.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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