ruby_parser 1.0.0 → 2.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.

Potentially problematic release.


This version of ruby_parser might be problematic. Click here for more details.

@@ -8,59 +8,29 @@ $: << File.expand_path('~/Work/p4/zss/src/ParseTree/dev/test')
8
8
 
9
9
  require 'pt_testcase'
10
10
 
11
- class TestRubyParser < Test::Unit::TestCase # ParseTreeTestCase
12
-
13
- # Regular ParseTreeTestCase tests
14
- eval ParseTreeTestCase.testcases.map { |node, data|
15
- next if node.to_s =~ /bmethod|dmethod/
16
- next if Array === data['Ruby'] # runtime only crap
17
- "def test_#{node}
18
- rb = #{data['Ruby'].inspect}
19
- pt = #{data['ParseTree'].inspect}
20
-
21
- assert_not_nil rb, \"Ruby for #{node} undefined\"
22
- assert_not_nil pt, \"ParseTree for #{node} undefined\"
23
-
24
- assert_equal Sexp.from_array(pt), @processor.parse(rb)
25
- end"
26
- }.compact.join("\n")
27
-
28
- # Scour the world and compare against ParseTree
29
- if ENV['ZOMGPONIES'] or File.exist? 'zomgponies' then
30
- require 'parse_tree'
31
-
32
- base = "/usr/lib/ruby"
33
- base = "unit"
34
-
35
- files = Dir[File.join(base, "**/*.rb")]
36
-
37
- # these files/patterns cause parse_tree_show to bus error (or just suck):
38
- files.reject! { |f| f =~ /environments.environment|rss.maker.base|rails_generator|ferret.browser|rubinius.spec.core.module.(constants|name|remove_const)_spec|tkextlib.tcllib.tablelist/ }
39
-
40
- # these are rejected for dasgn_curr ordering failures... I'll fix them later.
41
- # (or mri parse errors--I should have separated them out)
42
- files.reject! { |f| f =~ /lib.flog|lib.autotest.notify|lib.analyzer.tools.rails.stat|flog.lib.flog|rakelib.struct.generator|rubinius.kernel.core.array|lib.rbosa.rb|src.rbosa.rb|spec.spec.mocks.mock.spec.rb|dsl.shared.behaviour.spec.rb|spec.spec.dsl.behaviour.spec|lib.hpricot.parse.rb|resolve.rb|parsers.parse.f95|rubinius.shotgun.lib.primitives.ltm|rubinius.lib.bin.compile|rubinius.kernel.core.object|rubinius.kernel.core.file|rubinius.compiler2.garnet.bindingagent|ruby_to_c_test_r2ctestcase|lib.more.like.this|resolv\.rb|test.r2ctestcase/ }
43
-
44
- warn "Generating #{files.size} tests from #{base}"
45
-
46
- eval files.map { |file|
47
- name = file[base.size..-1].gsub(/\W+/, '_')
11
+ class RubyParser
12
+ def process input
13
+ parse input
14
+ end
15
+ end
48
16
 
49
- loc = `wc -l #{file}`.strip.to_i
17
+ class RubyParserTestCase < ParseTreeTestCase
18
+ def self.previous key
19
+ "Ruby"
20
+ end
50
21
 
51
- "def test#{name}_#{loc}
52
- file = #{file.inspect}
53
- rb = File.read(file)
22
+ def self.generate_test klass, node, data, input_name, output_name
23
+ return if node.to_s =~ /bmethod|dmethod/
24
+ return if Array === data['Ruby']
54
25
 
55
- pt = ParseTree.new.parse_tree_for_string rb
56
- assert_not_nil pt, \"ParseTree for #{name} undefined\"
26
+ output_name = "ParseTree"
57
27
 
58
- rp = @processor.parse rb
59
- assert_equal Sexp.from_array(pt).first, rp, \"RP different from PT\"
60
- File.unlink #{file.inspect}
61
- end"
62
- }.compact.join("\n")
28
+ super
63
29
  end
30
+ end
31
+
32
+ class TestRubyParser < RubyParserTestCase
33
+ alias :refute_nil :assert_not_nil unless defined? Mini
64
34
 
65
35
  def setup
66
36
  super
@@ -70,29 +40,29 @@ class TestRubyParser < Test::Unit::TestCase # ParseTreeTestCase
70
40
  @processor = RubyParser.new
71
41
  end
72
42
 
73
- def test_block_append
74
- head = s(:args)
75
- tail = s(:zsuper)
76
- expected = s(:block, s(:args), s(:zsuper))
77
- assert_equal expected, @processor.block_append(head, tail)
43
+ def test_attrasgn_array_lhs
44
+ rb = '[1, 2, 3, 4][from .. to] = ["a", "b", "c"]'
45
+ pt = s(:attrasgn,
46
+ s(:array, s(:lit, 1), s(:lit, 2), s(:lit, 3), s(:lit, 4)),
47
+ :[]=,
48
+ s(:arglist,
49
+ s(:dot2,
50
+ s(:call, nil, :from, s(:arglist)),
51
+ s(:call, nil, :to, s(:arglist))),
52
+ s(:array, s(:str, "a"), s(:str, "b"), s(:str, "c"))))
53
+
54
+ result = @processor.parse(rb)
55
+
56
+ assert_equal pt, result
78
57
  end
79
58
 
80
- def test_block_append_block
81
- head = s(:block, s(:args))
59
+ def test_block_append
60
+ head = s(:args)
82
61
  tail = s(:zsuper)
83
62
  expected = s(:block, s(:args), s(:zsuper))
84
63
  assert_equal expected, @processor.block_append(head, tail)
85
64
  end
86
65
 
87
- def test_block_append_tail_block
88
- head = s(:vcall, :f1)
89
- tail = s(:block, s(:undef, s(:lit, :x)), s(:undef, s(:lit, :y)))
90
- expected = s(:block,
91
- s(:vcall, :f1),
92
- s(:block, s(:undef, s(:lit, :x)), s(:undef, s(:lit, :y))))
93
- assert_equal expected, @processor.block_append(head, tail)
94
- end
95
-
96
66
  def test_block_append_begin_begin
97
67
  head = s(:begin, s(:args))
98
68
  tail = s(:begin, s(:args))
@@ -100,6 +70,13 @@ class TestRubyParser < Test::Unit::TestCase # ParseTreeTestCase
100
70
  assert_equal expected, @processor.block_append(head, tail)
101
71
  end
102
72
 
73
+ def test_block_append_block
74
+ head = s(:block, s(:args))
75
+ tail = s(:zsuper)
76
+ expected = s(:block, s(:args), s(:zsuper))
77
+ assert_equal expected, @processor.block_append(head, tail)
78
+ end
79
+
103
80
  def test_block_append_nil_head
104
81
  head = nil
105
82
  tail = s(:zsuper)
@@ -114,18 +91,123 @@ class TestRubyParser < Test::Unit::TestCase # ParseTreeTestCase
114
91
  assert_equal expected, @processor.block_append(head, tail)
115
92
  end
116
93
 
94
+ def test_block_append_tail_block
95
+ head = s(:call, nil, :f1, s(:arglist))
96
+ tail = s(:block, s(:undef, s(:lit, :x)), s(:undef, s(:lit, :y)))
97
+ expected = s(:block,
98
+ s(:call, nil, :f1, s(:arglist)),
99
+ s(:block, s(:undef, s(:lit, :x)), s(:undef, s(:lit, :y))))
100
+ assert_equal expected, @processor.block_append(head, tail)
101
+ end
102
+
117
103
  def test_call_env
118
104
  @processor.env[:a] = :lvar
119
- expected = s(:call, s(:lvar, :a), :happy)
105
+ expected = s(:call, s(:lvar, :a), :happy, s(:arglist))
120
106
 
121
107
  assert_equal expected, @processor.parse('a.happy')
122
108
  end
123
109
 
110
+ def test_dasgn_icky2
111
+ rb = "a do\n v = nil\n begin\n yield\n rescue Exception => v\n break\n end\nend"
112
+ pt = s(:iter,
113
+ s(:call, nil, :a, s(:arglist)),
114
+ nil,
115
+ s(:block,
116
+ s(:lasgn, :v, s(:nil)),
117
+ s(:rescue,
118
+ s(:yield),
119
+ s(:resbody,
120
+ s(:array, s(:const, :Exception), s(:lasgn, :v, s(:gvar, :$!))),
121
+ s(:break)))))
122
+
123
+ assert_equal pt, @processor.parse(rb)
124
+ end
125
+
126
+ def test_class_comments
127
+ rb = "# blah 1\n# blah 2\n\nclass X\n # blah 3\n def blah\n # blah 4\n end\nend"
128
+ pt = s(:class, :X, nil,
129
+ s(:scope,
130
+ s(:defn, :blah, s(:args), s(:scope, s(:block, s(:nil))))))
131
+
132
+ actual = @processor.parse(rb)
133
+ assert_equal pt, actual
134
+
135
+ assert_equal "# blah 1\n# blah 2\n\n", actual.comments
136
+ assert_equal "# blah 3\n", actual.scope.defn.comments
137
+ end
138
+
139
+ def test_module_comments
140
+ rb = "# blah 1\n \n # blah 2\n\nmodule X\n # blah 3\n def blah\n # blah 4\n end\nend"
141
+ pt = s(:module, :X,
142
+ s(:scope,
143
+ s(:defn, :blah, s(:args), s(:scope, s(:block, s(:nil))))))
144
+
145
+ actual = @processor.parse(rb)
146
+ assert_equal pt, actual
147
+ assert_equal "# blah 1\n\n# blah 2\n\n", actual.comments
148
+ assert_equal "# blah 3\n", actual.scope.defn.comments
149
+ end
150
+
151
+ def test_defn_comments
152
+ rb = "# blah 1\n# blah 2\n\ndef blah\nend"
153
+ pt = s(:defn, :blah, s(:args), s(:scope, s(:block, s(:nil))))
154
+
155
+ actual = @processor.parse(rb)
156
+ assert_equal pt, actual
157
+ assert_equal "# blah 1\n# blah 2\n\n", actual.comments
158
+ end
159
+
160
+ def test_defs_comments
161
+ rb = "# blah 1\n# blah 2\n\ndef self.blah\nend"
162
+ pt = s(:defs, s(:self), :blah, s(:args), s(:scope, s(:block)))
163
+
164
+ actual = @processor.parse(rb)
165
+ assert_equal pt, actual
166
+ assert_equal "# blah 1\n# blah 2\n\n", actual.comments
167
+ end
168
+
124
169
  def test_do_bug # TODO: rename
125
170
  rb = "a 1\na.b do |c|\n # do nothing\nend"
126
171
  pt = s(:block,
127
- s(:fcall, :a, s(:array, s(:lit, 1))),
128
- s(:iter, s(:call, s(:vcall, :a), :b), s(:dasgn_curr, :c)))
172
+ s(:call, nil, :a, s(:arglist, s(:lit, 1))),
173
+ s(:iter,
174
+ s(:call, s(:call, nil, :a, s(:arglist)), :b, s(:arglist)),
175
+ s(:lasgn, :c)))
176
+
177
+ assert_equal pt, @processor.parse(rb)
178
+ end
179
+
180
+ def test_dstr_evstr
181
+ rb = "\"#\{'a'}#\{b}\""
182
+ pt = s(:dstr, "a", s(:evstr, s(:call, nil, :b, s(:arglist))))
183
+
184
+ assert_equal pt, @processor.parse(rb)
185
+ end
186
+
187
+ def test_dstr_str
188
+ rb = "\"#\{'a'} b\""
189
+ pt = s(:str, "a b")
190
+
191
+ assert_equal pt, @processor.parse(rb)
192
+ end
193
+
194
+ def test_empty
195
+ rb = ""
196
+ pt = nil
197
+
198
+ assert_equal pt, @processor.parse(rb)
199
+ end
200
+
201
+ def test_evstr_evstr
202
+ rb = "\"#\{a}#\{b}\""
203
+ pt = s(:dstr, "", s(:evstr, s(:call, nil, :a, s(:arglist))), s(:evstr, s(:call, nil, :b, s(:arglist))))
204
+
205
+ assert_equal pt, @processor.parse(rb)
206
+ end
207
+
208
+ def test_evstr_str
209
+ rb = "\"#\{a} b\""
210
+ pt = s(:dstr, "", s(:evstr, s(:call, nil, :a, s(:arglist))), s(:str, " b"))
129
211
 
130
212
  assert_equal pt, @processor.parse(rb)
131
213
  end
@@ -134,11 +216,91 @@ class TestRubyParser < Test::Unit::TestCase # ParseTreeTestCase
134
216
  rb = 'a = 42'
135
217
  pt = s(:lasgn, :a, s(:lit, 42))
136
218
  expected_env = { :a => :lvar }
137
-
219
+
138
220
  assert_equal pt, @processor.parse(rb)
139
221
  assert_equal expected_env, @processor.env.all
140
222
  end
141
223
 
224
+ def test_list_append
225
+ a = s(:lit, 1)
226
+ b = s(:lit, 2)
227
+ c = s(:lit, 3)
228
+
229
+ result = @processor.list_append(s(:array, b.dup), c.dup)
230
+
231
+ assert_equal s(:array, b, c), result
232
+
233
+ result = @processor.list_append(b.dup, c.dup)
234
+
235
+ assert_equal s(:array, b, c), result
236
+
237
+ result = @processor.list_append(result, a.dup)
238
+
239
+ assert_equal s(:array, b, c, a), result
240
+
241
+ lhs, rhs = s(:array, s(:lit, :iter)), s(:when, s(:const, :BRANCHING), nil)
242
+ expected = s(:array, s(:lit, :iter), s(:when, s(:const, :BRANCHING), nil))
243
+
244
+ assert_equal expected, @processor.list_append(lhs, rhs)
245
+ end
246
+
247
+ def test_list_prepend
248
+ a = s(:lit, 1)
249
+ b = s(:lit, 2)
250
+ c = s(:lit, 3)
251
+
252
+ result = @processor.list_prepend(b.dup, s(:array, c.dup))
253
+
254
+ assert_equal s(:array, b, c), result
255
+
256
+ result = @processor.list_prepend(b.dup, c.dup)
257
+
258
+ assert_equal s(:array, b, c), result
259
+
260
+ result = @processor.list_prepend(a.dup, result)
261
+
262
+ assert_equal s(:array, a, b, c), result
263
+ end
264
+
265
+ def test_literal_concat_dstr_dstr
266
+ lhs = s(:dstr, "Failed to download spec ",
267
+ s(:evstr, s(:call, nil, :spec_name, s(:arglist))),
268
+ s(:str, " from "),
269
+ s(:evstr, s(:call, nil, :source_uri, s(:arglist))),
270
+ s(:str, ":\n"))
271
+ rhs = s(:dstr, "\t",
272
+ s(:evstr, s(:call, s(:ivar, :@fetch_error), :message)))
273
+ expected = s(:dstr, "Failed to download spec ",
274
+ s(:evstr, s(:call, nil, :spec_name, s(:arglist))),
275
+ s(:str, " from "),
276
+ s(:evstr, s(:call, nil, :source_uri, s(:arglist))),
277
+ s(:str, ":\n"),
278
+ s(:str, "\t"),
279
+ s(:evstr, s(:call, s(:ivar, :@fetch_error), :message)))
280
+
281
+ assert_equal expected, @processor.literal_concat(lhs, rhs)
282
+ end
283
+
284
+ def test_literal_concat_dstr_evstr
285
+ lhs, rhs = s(:dstr, "a"), s(:evstr, s(:call, nil, :b, s(:arglist)))
286
+ expected = s(:dstr, "a", s(:evstr, s(:call, nil, :b, s(:arglist))))
287
+
288
+ assert_equal expected, @processor.literal_concat(lhs, rhs)
289
+ end
290
+
291
+ def test_literal_concat_evstr_evstr
292
+ lhs, rhs = s(:evstr, s(:lit, 1)), s(:evstr, s(:lit, 2))
293
+ expected = s(:dstr, "", s(:evstr, s(:lit, 1)), s(:evstr, s(:lit, 2)))
294
+
295
+ assert_equal expected, @processor.literal_concat(lhs, rhs)
296
+ end
297
+
298
+ def test_literal_concat_str_evstr
299
+ lhs, rhs = s(:str, ""), s(:evstr, s(:str, "blah"))
300
+
301
+ assert_equal s(:str, "blah"), @processor.literal_concat(lhs, rhs)
302
+ end
303
+
142
304
  def test_logop_12
143
305
  lhs = s(:lit, 1)
144
306
  rhs = s(:lit, 2)
@@ -147,10 +309,18 @@ class TestRubyParser < Test::Unit::TestCase # ParseTreeTestCase
147
309
  assert_equal exp, @processor.logop(:and, lhs, rhs)
148
310
  end
149
311
 
150
- def test_logop_12_3
151
- lhs = s(:and, s(:lit, 1), s(:lit, 2))
152
- rhs = s(:lit, 3)
153
- exp = s(:and, s(:lit, 1), s(:and, s(:lit, 2), s(:lit, 3)))
312
+ def test_logop_1234_5
313
+ lhs = s(:and, s(:lit, 1), s(:and, s(:lit, 2), s(:and, s(:lit, 3), s(:lit, 4))))
314
+ rhs = s(:lit, 5)
315
+ exp = s(:and,
316
+ s(:lit, 1),
317
+ s(:and,
318
+ s(:lit, 2),
319
+ s(:and,
320
+ s(:lit, 3),
321
+ s(:and,
322
+ s(:lit, 4),
323
+ s(:lit, 5)))))
154
324
 
155
325
  assert_equal exp, @processor.logop(:and, lhs, rhs)
156
326
  end
@@ -169,28 +339,20 @@ class TestRubyParser < Test::Unit::TestCase # ParseTreeTestCase
169
339
  assert_equal exp, @processor.logop(:and, lhs, rhs)
170
340
  end
171
341
 
172
- def test_logop_1234_5
173
- lhs = s(:and, s(:lit, 1), s(:and, s(:lit, 2), s(:and, s(:lit, 3), s(:lit, 4))))
174
- rhs = s(:lit, 5)
175
- exp = s(:and,
176
- s(:lit, 1),
177
- s(:and,
178
- s(:lit, 2),
179
- s(:and,
180
- s(:lit, 3),
181
- s(:and,
182
- s(:lit, 4),
183
- s(:lit, 5)))))
342
+ def test_logop_12_3
343
+ lhs = s(:and, s(:lit, 1), s(:lit, 2))
344
+ rhs = s(:lit, 3)
345
+ exp = s(:and, s(:lit, 1), s(:and, s(:lit, 2), s(:lit, 3)))
184
346
 
185
347
  assert_equal exp, @processor.logop(:and, lhs, rhs)
186
348
  end
187
349
 
188
350
  def test_logop_nested_mix
189
- lhs = s(:or, s(:vcall, :a), s(:vcall, :b))
190
- rhs = s(:and, s(:vcall, :c), s(:vcall, :d))
351
+ lhs = s(:or, s(:call, nil, :a, s(:arglist)), s(:call, nil, :b, s(:arglist)))
352
+ rhs = s(:and, s(:call, nil, :c, s(:arglist)), s(:call, nil, :d, s(:arglist)))
191
353
  exp = s(:or,
192
- s(:or, s(:vcall, :a), s(:vcall, :b)),
193
- s(:and, s(:vcall, :c), s(:vcall, :d)))
354
+ s(:or, s(:call, nil, :a, s(:arglist)), s(:call, nil, :b, s(:arglist))),
355
+ s(:and, s(:call, nil, :c, s(:arglist)), s(:call, nil, :d, s(:arglist))))
194
356
 
195
357
  lhs.paren = true
196
358
  rhs.paren = true
@@ -198,48 +360,16 @@ class TestRubyParser < Test::Unit::TestCase # ParseTreeTestCase
198
360
  assert_equal exp, @processor.logop(:or, lhs, rhs)
199
361
  end
200
362
 
201
- def test_literal_concat_str_evstr
202
- lhs, rhs = s(:str, ""), s(:evstr, s(:str, "blah"))
203
-
204
- assert_equal s(:str, "blah"), @processor.literal_concat(lhs, rhs)
205
- end
206
-
207
- def test_literal_concat_evstr_evstr
208
- lhs, rhs = s(:evstr, s(:lit, 1)), s(:evstr, s(:lit, 2))
209
- expected = s(:dstr, "", s(:evstr, s(:lit, 1)), s(:evstr, s(:lit, 2)))
210
-
211
- assert_equal expected, @processor.literal_concat(lhs, rhs)
212
- end
213
-
214
- def test_literal_concat_dstr_evstr
215
- lhs, rhs = s(:dstr, "a"), s(:evstr, s(:vcall, :b))
216
- expected = s(:dstr, "a", s(:evstr, s(:vcall, :b)))
217
-
218
- assert_equal expected, @processor.literal_concat(lhs, rhs)
219
- end
220
-
221
- def test_literal_concat_dstr_dstr
222
- lhs = s(:dstr, "Failed to download spec ",
223
- s(:evstr, s(:vcall, :spec_name)),
224
- s(:str, " from "),
225
- s(:evstr, s(:vcall, :source_uri)),
226
- s(:str, ":\n"))
227
- rhs = s(:dstr, "\t",
228
- s(:evstr, s(:call, s(:ivar, :@fetch_error), :message)))
229
- expected = s(:dstr, "Failed to download spec ",
230
- s(:evstr, s(:vcall, :spec_name)),
231
- s(:str, " from "),
232
- s(:evstr, s(:vcall, :source_uri)),
233
- s(:str, ":\n"),
234
- s(:str, "\t"),
235
- s(:evstr, s(:call, s(:ivar, :@fetch_error), :message)))
363
+ def test_str_evstr
364
+ rb = "\"a #\{b}\""
365
+ pt = s(:dstr, "a ", s(:evstr, s(:call, nil, :b, s(:arglist))))
236
366
 
237
- assert_equal expected, @processor.literal_concat(lhs, rhs)
367
+ assert_equal pt, @processor.parse(rb)
238
368
  end
239
369
 
240
370
  def test_str_pct_Q_nested
241
371
  rb = "%Q[before [#\{nest}] after]"
242
- pt = s(:dstr, "before [", s(:evstr, s(:vcall, :nest)), s(:str, "] after"))
372
+ pt = s(:dstr, "before [", s(:evstr, s(:call, nil, :nest, s(:arglist))), s(:str, "] after"))
243
373
 
244
374
  assert_equal pt, @processor.parse(rb)
245
375
  end
@@ -258,69 +388,81 @@ class TestRubyParser < Test::Unit::TestCase # ParseTreeTestCase
258
388
  assert_equal pt, @processor.parse(rb)
259
389
  end
260
390
 
261
- def test_dstr_str
262
- rb = "\"#\{'a'} b\""
263
- pt = s(:str, "a b")
264
-
265
- assert_equal pt, @processor.parse(rb)
391
+ STARTING_LINE = {
392
+ "begin_def" => 2,
393
+ "block_stmt_after" => 2,
394
+ "block_stmt_after_mri_verbose_flag" => 2,
395
+ "block_stmt_before" => 2,
396
+ "block_stmt_before_mri_verbose_flag" => 2,
397
+ "block_stmt_both" => 2,
398
+ "block_stmt_both_mri_verbose_flag" => 2,
399
+ "case_nested_inner_no_expr" => 2,
400
+ "case_no_expr" => 2,
401
+ "case_splat" => 2,
402
+ "cvasgn" => 2,
403
+ "defn_args_none" => 2,
404
+ "defn_zarray" => 2,
405
+ "structure_unused_literal_wwtt" => 3, # yes, 3... odd test
406
+ "super_0" => 2,
407
+ "super_1" => 2,
408
+ "super_1_array" => 2,
409
+ "super_n" => 2,
410
+ "super_multi" => 2,
411
+ "undef_block_1" => 2,
412
+ "undef_block_2" => 2,
413
+ "undef_block_3" => 2,
414
+ "undef_block_wtf" => 2,
415
+ "zsuper" => 2,
416
+ }
417
+
418
+ def after_process_hook klass, node, data, input_name, output_name
419
+ expected = STARTING_LINE[node] || 1
420
+ assert_equal expected, @result.line, "should have proper line number"
266
421
  end
267
422
 
268
- def test_str_evstr
269
- rb = "\"a #\{b}\""
270
- pt = s(:dstr, "a ", s(:evstr, s(:vcall, :b)))
271
-
272
- assert_equal pt, @processor.parse(rb)
273
- end
423
+ def test_position_info
424
+ rb = "a = 42\np a"
425
+ pt = s(:block,
426
+ s(:lasgn, :a, s(:lit, 42)),
427
+ s(:call, nil, :p, s(:arglist, s(:lvar, :a))))
274
428
 
275
- def test_dstr_evstr
276
- rb = "\"#\{'a'}#\{b}\""
277
- pt = s(:dstr, "a", s(:evstr, s(:vcall, :b)))
429
+ result = @processor.parse(rb, "blah.rb")
278
430
 
279
- assert_equal pt, @processor.parse(rb)
280
- end
431
+ assert_equal pt, result
281
432
 
282
- def test_evstr_str
283
- rb = "\"#\{a} b\""
284
- pt = s(:dstr, "", s(:evstr, s(:vcall, :a)), s(:str, " b"))
433
+ assert_equal 1, result.line, "block should have line number"
434
+ assert_equal 1, result.lasgn.line, "lasgn should have line number"
435
+ assert_equal 2, result.call.line, "call should have line number"
285
436
 
286
- assert_equal pt, @processor.parse(rb)
287
- end
437
+ expected = "blah.rb"
288
438
 
289
- def test_evstr_evstr
290
- rb = "\"#\{a}#\{b}\""
291
- pt = s(:dstr, "", s(:evstr, s(:vcall, :a)), s(:evstr, s(:vcall, :b)))
439
+ assert_equal expected, result.file
440
+ assert_equal expected, result.lasgn.file
441
+ assert_equal expected, result.call.file
292
442
 
293
- assert_equal pt, @processor.parse(rb)
443
+ assert_same result.file, result.lasgn.file
444
+ assert_same result.file, result.call.file
294
445
  end
295
446
 
447
+ def test_position_info2
448
+ rb = "def x(y)\n p(y)\n y *= 2\n return y;\nend" # TODO: remove () & ;
449
+ pt = s(:defn, :x, s(:args, :y),
450
+ s(:scope,
451
+ s(:block,
452
+ s(:call, nil, :p, s(:arglist, s(:lvar, :y))),
453
+ s(:lasgn, :y,
454
+ s(:call, s(:lvar, :y), :*, s(:arglist, s(:lit, 2)))),
455
+ s(:return, s(:lvar, :y)))))
296
456
 
297
- def test_dasgn_icky2
298
- rb = "a do\n v = nil\n begin\n yield\n rescue Exception => v\n break\n end\nend"
299
- pt = s(:iter,
300
- s(:fcall, :a),
301
- nil,
302
- s(:block,
303
- s(:dasgn_curr, :v, s(:nil)),
304
- s(:begin,
305
- s(:rescue,
306
- s(:yield),
307
- s(:resbody,
308
- s(:array, s(:const, :Exception)),
309
- s(:block, s(:dasgn_curr, :v, s(:gvar, :$!)), s(:break)))))))
457
+ result = @processor.parse(rb)
310
458
 
311
- assert_equal pt, @processor.parse(rb)
312
- end
459
+ assert_equal pt, result
313
460
 
314
- def test_list_append
315
- lhs, rhs = s(:array, s(:lit, :iter)), s(:when, s(:const, :BRANCHING), nil)
316
- expected = s(:array, s(:lit, :iter), s(:when, s(:const, :BRANCHING), nil))
461
+ body = result.scope.block
317
462
 
318
- assert_equal expected, @processor.list_append(lhs, rhs)
463
+ assert_equal 1, result.line, "defn should have line number"
464
+ assert_equal 2, body.call.line, "call should have line number"
465
+ assert_equal 3, body.lasgn.line, "lasgn should have line number"
466
+ assert_equal 4, body.return.line, "return should have line number"
319
467
  end
320
468
  end
321
-
322
- __END__
323
-
324
- # blah18.rb
325
-
326
- assert_equal("sub", $_)