rcodetools 0.4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/CHANGES +18 -0
  2. data/README +34 -0
  3. data/README.emacs +54 -0
  4. data/README.method_analysis +13 -0
  5. data/README.vim +84 -0
  6. data/README.xmpfilter +202 -0
  7. data/Rakefile +123 -0
  8. data/Rakefile.method_analysis +30 -0
  9. data/THANKS +6 -0
  10. data/bin/rct-complete +37 -0
  11. data/bin/rct-doc +50 -0
  12. data/bin/rct-meth-args +392 -0
  13. data/bin/xmpfilter +75 -0
  14. data/icicles-rcodetools.el +31 -0
  15. data/lib/method_analyzer.rb +107 -0
  16. data/lib/rcodetools/completion.rb +282 -0
  17. data/lib/rcodetools/doc.rb +176 -0
  18. data/lib/rcodetools/options.rb +83 -0
  19. data/lib/rcodetools/xmpfilter.rb +208 -0
  20. data/lib/rcodetools/xmptestunitfilter.rb +197 -0
  21. data/rcodetools.el +162 -0
  22. data/rcodetools.vim +118 -0
  23. data/setup.rb +1585 -0
  24. data/test/data/add_markers-input.rb +2 -0
  25. data/test/data/add_markers-output.rb +2 -0
  26. data/test/data/bindings-input.rb +26 -0
  27. data/test/data/bindings-output.rb +31 -0
  28. data/test/data/completion-input.rb +1 -0
  29. data/test/data/completion-output.rb +2 -0
  30. data/test/data/completion_emacs-input.rb +1 -0
  31. data/test/data/completion_emacs-output.rb +5 -0
  32. data/test/data/completion_emacs_icicles-input.rb +1 -0
  33. data/test/data/completion_emacs_icicles-output.rb +5 -0
  34. data/test/data/doc-input.rb +1 -0
  35. data/test/data/doc-output.rb +1 -0
  36. data/test/data/method_analyzer-data.rb +33 -0
  37. data/test/data/method_args.data.rb +106 -0
  38. data/test/data/no_warnings-input.rb +3 -0
  39. data/test/data/no_warnings-output.rb +4 -0
  40. data/test/data/refe-input.rb +1 -0
  41. data/test/data/refe-output.rb +1 -0
  42. data/test/data/ri-input.rb +1 -0
  43. data/test/data/ri-output.rb +1 -0
  44. data/test/data/ri_emacs-input.rb +1 -0
  45. data/test/data/ri_emacs-output.rb +1 -0
  46. data/test/data/ri_vim-input.rb +1 -0
  47. data/test/data/ri_vim-output.rb +1 -0
  48. data/test/data/rspec-input.rb +48 -0
  49. data/test/data/rspec-output.rb +52 -0
  50. data/test/data/rspec_poetry-input.rb +48 -0
  51. data/test/data/rspec_poetry-output.rb +52 -0
  52. data/test/data/simple_annotation-input.rb +8 -0
  53. data/test/data/simple_annotation-output.rb +8 -0
  54. data/test/data/unit_test-input.rb +50 -0
  55. data/test/data/unit_test-output.rb +52 -0
  56. data/test/data/unit_test_poetry-input.rb +50 -0
  57. data/test/data/unit_test_poetry-output.rb +52 -0
  58. data/test/test_completion.rb +467 -0
  59. data/test/test_doc.rb +403 -0
  60. data/test/test_functional.rb +18 -0
  61. data/test/test_method_analyzer.rb +99 -0
  62. data/test/test_method_args.rb +134 -0
  63. data/test/test_run.rb +41 -0
  64. data/test/test_xmpfilter.rb +36 -0
  65. data/test/test_xmptestunitfilter.rb +84 -0
  66. metadata +139 -0
@@ -0,0 +1,8 @@
1
+
2
+ a = 1
3
+ 10.times do |i|
4
+ i ** 2 # =>
5
+ a += i
6
+ end
7
+ A = 1
8
+ A = 1
@@ -0,0 +1,8 @@
1
+
2
+ a = 1
3
+ 10.times do |i|
4
+ i ** 2 # => 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
5
+ a += i
6
+ end
7
+ A = 1
8
+ A = 1 # !> already initialized constant A
@@ -0,0 +1,50 @@
1
+
2
+ class X
3
+ Y = Struct.new(:a)
4
+ def foo(b); b ? Y.new(2) : 2 end
5
+ def bar; raise "No good" end
6
+ def baz; nil end
7
+ def fubar(x); x ** 2.0 + 1 end
8
+ def babar; [1,2] end
9
+ A = 1
10
+ A = 1
11
+ def difftype() [1, "s"] end
12
+ end
13
+
14
+
15
+ require 'test/unit'
16
+ class Test_X < Test::Unit::TestCase
17
+ def setup
18
+ @o = X.new
19
+ end
20
+
21
+ def test_foo
22
+ @o.foo(true) # =>
23
+ @o.foo(true).a # =>
24
+ @o.foo(false) # =>
25
+ end
26
+
27
+ def test_bar
28
+ @o.bar # =>
29
+ end
30
+
31
+ def test_baz
32
+ @o.baz # =>
33
+ end
34
+
35
+ def test_babar
36
+ @o.babar # =>
37
+ end
38
+
39
+ def test_fubar
40
+ @o.fubar(10) # =>
41
+ end
42
+
43
+ def test_difftype
44
+ for x in @o.difftype
45
+ x # =>
46
+ end
47
+ end
48
+
49
+ end
50
+
@@ -0,0 +1,52 @@
1
+
2
+ class X
3
+ Y = Struct.new(:a)
4
+ def foo(b); b ? Y.new(2) : 2 end
5
+ def bar; raise "No good" end
6
+ def baz; nil end
7
+ def fubar(x); x ** 2.0 + 1 end
8
+ def babar; [1,2] end
9
+ A = 1
10
+ A = 1 # !> already initialized constant A
11
+ def difftype() [1, "s"] end
12
+ end
13
+
14
+
15
+ require 'test/unit'
16
+ class Test_X < Test::Unit::TestCase
17
+ def setup
18
+ @o = X.new
19
+ end
20
+
21
+ def test_foo
22
+ assert_kind_of(X::Y, @o.foo(true))
23
+ assert_equal("#<struct X::Y a=2>", @o.foo(true).inspect)
24
+ assert_equal(2, @o.foo(true).a)
25
+ assert_equal(2, @o.foo(false))
26
+ end
27
+
28
+ def test_bar
29
+ assert_raise(RuntimeError){@o.bar}
30
+ end
31
+
32
+ def test_baz
33
+ assert_nil(@o.baz)
34
+ end
35
+
36
+ def test_babar
37
+ assert_equal([1, 2], @o.babar)
38
+ end
39
+
40
+ def test_fubar
41
+ assert_in_delta(101.0, @o.fubar(10), 0.0001)
42
+ end
43
+
44
+ def test_difftype
45
+ for x in @o.difftype
46
+ #xmpfilter: WARNING!! extra values ignored
47
+ assert_equal(1, x)
48
+ end
49
+ end
50
+
51
+ end
52
+
@@ -0,0 +1,50 @@
1
+
2
+ class X
3
+ Y = Struct.new(:a)
4
+ def foo(b); b ? Y.new(2) : 2 end
5
+ def bar; raise "No good" end
6
+ def baz; nil end
7
+ def fubar(x); x ** 2.0 + 1 end
8
+ def babar; [1,2] end
9
+ A = 1
10
+ A = 1
11
+ def difftype() [1, "s"] end
12
+ end
13
+
14
+
15
+ require 'test/unit'
16
+ class Test_X < Test::Unit::TestCase
17
+ def setup
18
+ @o = X.new
19
+ end
20
+
21
+ def test_foo
22
+ @o.foo(true) # =>
23
+ @o.foo(true).a # =>
24
+ @o.foo(false) # =>
25
+ end
26
+
27
+ def test_bar
28
+ @o.bar # =>
29
+ end
30
+
31
+ def test_baz
32
+ @o.baz # =>
33
+ end
34
+
35
+ def test_babar
36
+ @o.babar # =>
37
+ end
38
+
39
+ def test_fubar
40
+ @o.fubar(10) # =>
41
+ end
42
+
43
+ def test_difftype
44
+ for x in @o.difftype
45
+ x # =>
46
+ end
47
+ end
48
+
49
+ end
50
+
@@ -0,0 +1,52 @@
1
+
2
+ class X
3
+ Y = Struct.new(:a)
4
+ def foo(b); b ? Y.new(2) : 2 end
5
+ def bar; raise "No good" end
6
+ def baz; nil end
7
+ def fubar(x); x ** 2.0 + 1 end
8
+ def babar; [1,2] end
9
+ A = 1
10
+ A = 1 # !> already initialized constant A
11
+ def difftype() [1, "s"] end
12
+ end
13
+
14
+
15
+ require 'test/unit'
16
+ class Test_X < Test::Unit::TestCase
17
+ def setup
18
+ @o = X.new
19
+ end
20
+
21
+ def test_foo
22
+ assert_kind_of X::Y, @o.foo(true)
23
+ assert_equal "#<struct X::Y a=2>", @o.foo(true).inspect
24
+ assert_equal 2, @o.foo(true).a
25
+ assert_equal 2, @o.foo(false)
26
+ end
27
+
28
+ def test_bar
29
+ assert_raise(RuntimeError){@o.bar}
30
+ end
31
+
32
+ def test_baz
33
+ assert_nil @o.baz
34
+ end
35
+
36
+ def test_babar
37
+ assert_equal [1, 2], @o.babar
38
+ end
39
+
40
+ def test_fubar
41
+ assert_in_delta 101.0, @o.fubar(10), 0.0001
42
+ end
43
+
44
+ def test_difftype
45
+ for x in @o.difftype
46
+ #xmpfilter: WARNING!! extra values ignored
47
+ assert_equal 1, x
48
+ end
49
+ end
50
+
51
+ end
52
+
@@ -0,0 +1,467 @@
1
+ $: << ".." << "../lib"
2
+ require 'rcodetools/completion'
3
+ require 'test/unit'
4
+
5
+ class TestXMPCompletionFilter < Test::Unit::TestCase
6
+ def doit(code, lineno, column=nil, options={})
7
+ xmp = XMPCompletionFilter.new options
8
+ xmp.candidates(code, lineno, column).sort
9
+ end
10
+
11
+ def test_complete_method__simple
12
+ assert_equal(["length"], doit('"a".lengt', 1))
13
+ assert_equal(["length"], doit('`echo a`.lengt', 1))
14
+ end
15
+
16
+ def test_complete_method__in_arg
17
+ assert_equal(["length"], doit('print("a".lengt)', 1, 15))
18
+ assert_equal(["length"], doit("print('a'.lengt)", 1, 15))
19
+ assert_equal(["length"], doit("((a, b = 1 + 'a'.lengt))", 1, 22))
20
+ end
21
+
22
+ def test_complete_method__in_method
23
+ assert_equal(["length"], doit(<<EOC, 2))
24
+ def hoge
25
+ "a".lengt
26
+ end
27
+ hoge
28
+ EOC
29
+ end
30
+
31
+ def test_complete_method__in_not_passing_method
32
+ ## FIXME I do not know how to handle not-passing method!!
33
+ assert_equal([], doit(<<EOC, 2))
34
+ def hoge
35
+ "a".lengt
36
+ end
37
+ EOC
38
+ end
39
+
40
+ def test_complete_singleton_method
41
+ assert_equal(["aaaaa", "aaaab"], doit(<<EOC, 6))
42
+ a = 'a'
43
+ def a.aaaaa
44
+ end
45
+ def a.aaaab
46
+ end
47
+ a.aa
48
+ EOC
49
+ end
50
+
51
+ def test_complete_global_variable
52
+ assert_equal(["$hoge"], doit(<<EOC, 2))
53
+ $hoge = 100
54
+ $ho
55
+ EOC
56
+ end
57
+
58
+ def test_complete_global_variable__with_class
59
+ assert_equal(["open"], doit(<<EOC, 2))
60
+ $hoge = File
61
+ $hoge.op
62
+ EOC
63
+ end
64
+
65
+
66
+ def test_complete_instance_variable
67
+ assert_equal(["@hoge"], doit(<<EOC, 2))
68
+ @hoge = 100
69
+ @ho
70
+ EOC
71
+ end
72
+
73
+ def test_complete_class_variable_module
74
+ assert_equal(["@@hoge"], doit(<<EOC, 3))
75
+ module X
76
+ @@hoge = 100
77
+ @@ho
78
+ end
79
+ EOC
80
+ end
81
+
82
+ def test_complete_class_variable__in_class
83
+ assert_equal(["@@hoge"], doit(<<EOC, 3))
84
+ class X
85
+ @@hoge = 100
86
+ @@ho
87
+ end
88
+ EOC
89
+ end
90
+
91
+ def test_complete_class_variable__toplevel
92
+ assert_equal(["@@hoge"], doit(<<EOC, 2))
93
+ @@hoge = 100
94
+ @@ho
95
+ EOC
96
+ end
97
+
98
+ def test_complete_class_variable__in_method
99
+ assert_equal(["@@hoge"], doit(<<EOC, 4))
100
+ class Foo
101
+ def foo
102
+ @@hoge = 100
103
+ @@ho
104
+ end
105
+ end
106
+ Foo.new.foo
107
+ EOC
108
+ end
109
+
110
+ def test_complete_constant__nested
111
+ assert_equal(["Stat"], doit('File::Sta',1))
112
+ end
113
+
114
+ def test_complete_class_method
115
+ assert_equal(["popen"], doit('File::pop',1))
116
+ assert_equal(["popen"], doit('::File::pop',1))
117
+
118
+ assert_equal(["popen"], doit('File.pop',1))
119
+ end
120
+
121
+
122
+ def test_complete_constant__in_class
123
+ assert_equal(["Fixclass", "Fixnum"], doit(<<EOC, 3))
124
+ class Fixclass
125
+ class Bar
126
+ Fix
127
+ end
128
+ end
129
+ EOC
130
+ end
131
+
132
+
133
+ def test_complete_toplevel_constant
134
+ assert_equal(["Fixnum"], doit(<<EOC,3))
135
+ class Foo
136
+ class Fixnum
137
+ ::Fixn
138
+ end
139
+ end
140
+ EOC
141
+
142
+ assert_equal(["Fixnum"], doit(<<EOC,3))
143
+ class Foo
144
+ class Fixnum
145
+ ::Foo::Fixn
146
+ end
147
+ end
148
+ EOC
149
+
150
+ assert_equal(["Bar"], doit(<<EOC,5))
151
+ class Foo
152
+ class Bar
153
+ end
154
+ end
155
+ ::Foo::B
156
+ EOC
157
+ end
158
+
159
+ def test_bare_word__local_variable
160
+ assert_equal(["aaaaaxx"], doit(<<EOC,2))
161
+ aaaaaxx = 1
162
+ aaaa
163
+ EOC
164
+ end
165
+
166
+ def test_bare_word__method
167
+ assert_equal(["trace_var"], doit("trace",1))
168
+ end
169
+
170
+ def test_bare_word__constant
171
+ assert_equal(["Fixnum"], doit("Fixn",1))
172
+ end
173
+
174
+ def test_bare_word__method_in_class
175
+ assert_equal(["attr_accessor"], doit(<<EOC,2))
176
+ class X
177
+ attr_acc
178
+ end
179
+ EOC
180
+ end
181
+
182
+ def test_bare_word__public_method
183
+ assert_equal(["hoge"], doit(<<EOC,4))
184
+ class X
185
+ def hoge() end
186
+ def boke
187
+ hog
188
+ end
189
+ new.boke
190
+ end
191
+ EOC
192
+ end
193
+
194
+ def test_bare_word__private_method
195
+ assert_equal(["hoge"], doit(<<EOC,5))
196
+ class X
197
+ def hoge() end
198
+ private :hoge
199
+ def boke
200
+ hog
201
+ end
202
+ new.boke
203
+ end
204
+ EOC
205
+ end
206
+
207
+ def test_complete_symbol
208
+ assert_equal([":vccaex"], doit(<<EOC,2))
209
+ a = :vccaex
210
+ :vcca
211
+ EOC
212
+
213
+ end
214
+
215
+ #### tricky testcases
216
+ def test_two_pass
217
+ assert_equal(["inspect"], doit(<<EOC,2))
218
+ [1, "a"].each do |x|
219
+ x.inspec
220
+ end
221
+ EOC
222
+ end
223
+
224
+ def test_string
225
+ assert_equal(["inspect"], doit('"()".inspe',1))
226
+ assert_equal(["inspect"], doit('`echo ()`.inspe',1))
227
+ end
228
+
229
+ def test_not_last_line
230
+ assert_equal(["inspect"], doit(<<EOC,1))
231
+ "".inspe
232
+ 1
233
+ EOC
234
+ end
235
+
236
+ def test_column
237
+ assert_equal(["length"], doit('print("a".lengt + "b".size)', 1, 15))
238
+ end
239
+
240
+ def test_method_chain__String
241
+ assert_equal(["length"], doit('"a".upcase.capitalize.leng', 1))
242
+ end
243
+
244
+ def test_method_chain__Fixnum
245
+ assert_equal(["length"], doit('1.to_s.upcase.leng', 1))
246
+ end
247
+
248
+ def test_multi_line__do
249
+ assert_equal(["each_with_index"], doit(<<EOC, 1, 16))
250
+ [].each_with_ind do |x|
251
+ end
252
+ EOC
253
+ assert_equal(["each_with_index"], doit(<<EOC, 1, 16))
254
+ [].each_with_ind()do |x|
255
+ end
256
+ EOC
257
+ assert_equal(["each_with_index"], doit(<<EOC, 1, 16))
258
+ [].each_with_ind do |x,y| end
259
+ EOC
260
+ assert_equal(["each_with_index"], doit(<<EOC, 1, 16))
261
+ [1].each_with_index do |x,y| [].each do end end
262
+ EOC
263
+ assert_equal(["each_with_index"], doit(<<EOC, 1, 16))
264
+ [].each_with_ind ; do-do
265
+ EOC
266
+ end
267
+
268
+ def test_multi_line__braces
269
+ assert_equal(["each_with_index"], doit(<<EOC, 1, 16))
270
+ [].each_with_ind { |x|
271
+ }
272
+ EOC
273
+ assert_equal(["each_with_index"], doit(<<EOC, 1, 16))
274
+ [].each_with_ind(){ |x|
275
+ }
276
+ EOC
277
+ assert_equal(["each_with_index"], doit(<<EOC, 1, 16))
278
+ [].each_with_ind {|x,y| }
279
+ EOC
280
+ assert_equal(["each_with_index"], doit(<<EOC, 1, 16))
281
+ [1].each_with_in {|x,y| [].each { }}
282
+ EOC
283
+ assert_equal(["each_with_index"], doit(<<EOC, 1, 20))
284
+ { [1].each_with_inde {|x,y| [].each { }},1}
285
+
286
+ EOC
287
+ end
288
+
289
+ def test_multi_line__brackets
290
+ assert_equal(["each_with_index"], doit(<<EOC, 1, 20))
291
+ [ [1].each_with_inde {|x,y| [].each { }},
292
+ 1]
293
+ EOC
294
+ end
295
+
296
+ def test_multi_line__parentheses
297
+ assert_equal(["each_with_index"], doit(<<EOC, 1, 23))
298
+ foo( [1].each_with_inde {|x,y| [].each { }},
299
+ 1)
300
+ EOC
301
+ =begin FIXME
302
+ assert_equal(["each_with_index"], doit(<<EOC, 2, 23))
303
+ foo( 1,
304
+ [1].each_with_inde {|x,y| [].each { }})
305
+ EOC
306
+ =end
307
+ end
308
+
309
+ def test_multi_line__control_structures__if
310
+ assert_equal(["length"], doit(<<EOC, 1))
311
+ if "a".leng
312
+ end
313
+ EOC
314
+ assert_equal(["length"], doit(<<EOC, 1, 8))
315
+ "a".leng if true
316
+ EOC
317
+ assert_equal(["length"], doit(<<EOC, 1, 8))
318
+ "a".leng ; if true
319
+ 1
320
+ end
321
+ EOC
322
+ assert_equal(["length"], doit(<<EOC, 1, 8))
323
+ "a".leng ;if true
324
+ 1
325
+ end
326
+ EOC
327
+ end
328
+
329
+ def test_multi_line__control_structures__if_in_string
330
+ assert_equal(["length"], doit(<<EOC, 1))
331
+ "if a".leng
332
+ EOC
333
+ assert_equal(["length"], doit(<<EOC, 1))
334
+ 'if a'.leng
335
+ EOC
336
+ assert_equal(["length"], doit(<<EOC, 1))
337
+ `if a`.leng
338
+ EOC
339
+ end
340
+
341
+ def test_multi_line__control_structures__other_keywords
342
+ assert_equal(["length"], doit(<<EOC, 1))
343
+ unless "a".leng
344
+ end
345
+ EOC
346
+ assert_equal(["length"], doit(<<EOC, 1))
347
+ while "a".leng
348
+ end
349
+ EOC
350
+ assert_equal(["length"], doit(<<EOC, 1))
351
+ until "a".leng
352
+ end
353
+ EOC
354
+ assert_equal(["split"], doit(<<EOC, 1))
355
+ for a in "a".spli
356
+ end
357
+ EOC
358
+ end
359
+
360
+ def test_phrase
361
+ assert_equal(["uniq", "uniq!"], doit('Array.new(3).uni',1))
362
+ assert_equal(["uniq", "uniq!"], doit('Array.new(3).to_a.uni',1))
363
+ assert_equal(["uniq", "uniq!"], doit('Array.new(3).map{|x| x.to_i}.uni',1))
364
+ assert_equal(["uniq", "uniq!"], doit('[][0,(1+1)].uni',1))
365
+ end
366
+
367
+ def test_percent__String
368
+ assert_equal(["length"], doit('%!foo!.leng',1))
369
+ assert_equal(["length"], doit('%q!foo!.leng',1))
370
+ assert_equal(["length"], doit('%Q!foo!.leng',1))
371
+ assert_equal(["length"], doit('%x!foo!.leng',1))
372
+
373
+ assert_equal(["length"], doit('%{foo}.leng',1))
374
+ assert_equal(["length"], doit('%q{foo}.leng',1))
375
+ assert_equal(["length"], doit('%q!(!.leng',1))
376
+ assert_equal(["length"], doit('%Q!(!.leng',1))
377
+ assert_equal(["length"], doit('%x!(!.leng',1))
378
+ assert_equal(["length"], doit('%x{(}.leng',1))
379
+
380
+ assert_equal(["length"], doit('%{f(o)o}.leng',1))
381
+ assert_equal(["length"], doit('%{f{o}o}.leng',1))
382
+ assert_equal(["length"], doit('(%{f{o}o}+%!}x!).leng',1))
383
+ end
384
+
385
+ def test_percent__Array
386
+ assert_equal(["length"], doit('%w!foo!.leng',1))
387
+ assert_equal(["length"], doit('%W!foo!.leng',1))
388
+
389
+ assert_equal(["length"], doit('%w{foo}.leng',1))
390
+ assert_equal(["length"], doit('%W{foo}.leng',1))
391
+ assert_equal(["length"], doit('%w!(!.leng',1))
392
+ assert_equal(["length"], doit('%W!(!.leng',1))
393
+ assert_equal(["length"], doit('%w{(}.leng',1))
394
+
395
+ assert_equal(["length"], doit('%w{f(o)o}.leng',1))
396
+ assert_equal(["length"], doit('%w{f{o}o}.leng',1))
397
+ assert_equal(["length"], doit('(%W{f{o}o}+%w!}x!).leng',1))
398
+ end
399
+
400
+ def test_percent__Regexp
401
+ assert_equal(["kcode"], doit('%r!foo!.kcod',1))
402
+ assert_equal(["kcode"], doit('%r{foo}.kcod',1))
403
+ assert_equal(["kcode"], doit('%r!(!.kcod',1))
404
+ assert_equal(["kcode"], doit('%r{(}.kcod',1))
405
+ assert_equal(["kcode"], doit('%r{f(o)o}.kcod',1))
406
+ end
407
+
408
+ def test_percent__Symbol
409
+ assert_equal(["id2name"], doit('%s!foo!.id2nam',1))
410
+ assert_equal(["id2name"], doit('%s{foo}.id2nam',1))
411
+ assert_equal(["id2name"], doit('%s!(!.id2nam',1))
412
+ assert_equal(["id2name"], doit('%s{(}.id2nam',1))
413
+ assert_equal(["id2name"], doit('%s{f(o)o}.id2nam',1))
414
+ end
415
+
416
+ def test_complete_method__with_NoMethodError
417
+ assert_equal(["module_function"], doit(<<EOC, 3, nil, :ignore_NoMethodError=>true))
418
+ module X
419
+ xx # normally NoMethodError
420
+ module_funct
421
+ end
422
+ EOC
423
+ end
424
+
425
+ # drawback of ignore_NoMethodError
426
+ def test_with_or_without_ignore_NoMethodError
427
+ code = <<EOC
428
+ a=[1]
429
+ x = a[1][0] rescue "aaa"
430
+ x.lengt
431
+ EOC
432
+ assert_equal(["length"], doit(code, 3))
433
+ assert_equal([], doit(code, 3, nil, :ignore_NoMethodError=>true))
434
+ end
435
+
436
+ def test__syntax_error
437
+ assert_raise(ProcessParticularLine::NewCodeError) do
438
+ doit(<<EOC, 5)
439
+ end
440
+ module X
441
+ def x
442
+ end
443
+ module_function
444
+ end
445
+ EOC
446
+ end
447
+ end
448
+
449
+ def test__runtime_error
450
+ assert_raise(ProcessParticularLine::NewCodeError) do
451
+ doit(<<EOC, 5)
452
+ __undefined_method__
453
+ module X
454
+ def x
455
+ end
456
+ module_function
457
+ end
458
+ EOC
459
+ end
460
+ end
461
+
462
+
463
+ # This is a caveat!! You should use dabbrev for this case.
464
+ def XXtest_oneline
465
+ assert_equal(["aaa"], doit('aaa=1; aa', 1))
466
+ end
467
+ end