* configure.in (rb_cv_broken_glibc_ia64_erfc): renamed from
[ruby-svn.git] / test / ripper / test_scanner_events.rb
blob4389946104d3935fec3283015da8570c0fda281f
2 # test_scanner_events.rb
4 begin
6 require 'ripper'
7 require 'test/unit'
9 class TestRipper_ScannerEvents < Test::Unit::TestCase
11   def test_event_coverage
12     dispatched = Ripper::SCANNER_EVENTS.map {|event,_| event }
13     dispatched.each do |e|
14       assert_equal true, respond_to?("test_#{e}", true), "event not tested: #{e}"
15     end
16   end
18   def scan(target, str)
19     sym = "on_#{target}".intern
20     Ripper.lex(str).select {|_1,type,_2| type == sym }.map {|_1,_2,tok| tok }
21   end
23   def test_tokenize
24     assert_equal [],
25                  Ripper.tokenize('')
26     assert_equal ['a'],
27                  Ripper.tokenize('a')
28     assert_equal ['1'],
29                  Ripper.tokenize('1')
30     assert_equal ['1', ';', 'def', ' ', 'm', '(', 'arg', ')', 'end'],
31                  Ripper.tokenize("1;def m(arg)end")
32     assert_equal ['print', '(', '<<EOS', ')', "\n", "heredoc\n", "EOS\n"],
33                  Ripper.tokenize("print(<<EOS)\nheredoc\nEOS\n")
34     assert_equal ['print', '(', ' ', '<<EOS', ')', "\n", "heredoc\n", "EOS\n"],
35                  Ripper.tokenize("print( <<EOS)\nheredoc\nEOS\n")
36     assert_equal ["\#\n", "\n", "\#\n", "\n", "nil", "\n"],
37                  Ripper.tokenize("\#\n\n\#\n\nnil\n")
38   end
40   def test_lex
41     assert_equal [],
42                  Ripper.lex('')
43     assert_equal [[[1,0], :on_ident, "a"]],
44                  Ripper.lex('a')
45     assert_equal [[[1, 0], :on_kw, "nil"]],
46                  Ripper.lex("nil")
47     assert_equal [[[1, 0], :on_kw, "def"],
48                   [[1, 3], :on_sp, " "],
49                   [[1, 4], :on_ident, "m"],
50                   [[1, 5], :on_lparen, "("],
51                   [[1, 6], :on_ident, "a"],
52                   [[1, 7], :on_rparen, ")"],
53                   [[1, 8], :on_kw, "end"]],
54                  Ripper.lex("def m(a)end")
55     assert_equal [[[1, 0], :on_int, "1"],
56                   [[1, 1], :on_nl, "\n"],
57                   [[2, 0], :on_int, "2"],
58                   [[2, 1], :on_nl, "\n"],
59                   [[3, 0], :on_int, "3"]],
60                  Ripper.lex("1\n2\n3")
61     assert_equal [[[1, 0], :on_heredoc_beg, "<<EOS"],
62                   [[1, 5], :on_nl, "\n"],
63                   [[2, 0], :on_tstring_content, "heredoc\n"],
64                   [[3, 0], :on_heredoc_end, "EOS"]],
65                  Ripper.lex("<<EOS\nheredoc\nEOS")
66   end
68   def test_location
69     validate_location ""
70     validate_location " "
71     validate_location "@"
72     validate_location "\n"
73     validate_location "\r\n"
74     validate_location "\n\n\n\n\n\r\n\n\n"
75     validate_location "\n;\n;\n;\n;\n"
76     validate_location "nil"
77     validate_location "@ivar"
78     validate_location "1;2;3"
79     validate_location "1\n2\n3"
80     validate_location "1\n2\n3\n"
81     validate_location "def m(a) nil end"
82     validate_location "if true then false else nil end"
83     validate_location "BEGIN{print nil}"
84     validate_location "%w(a b\nc\r\nd \ne )"
85     validate_location %Q["a\nb\r\nc"]
86     validate_location "print(<<EOS)\nheredoc\nEOS\n"
87     validate_location %Q[print(<<-"EOS")\nheredoc\n     EOS\n]
88   end
90   def validate_location(src)
91     buf = ''
92     Ripper.lex(src).each do |pos, type, tok|
93       line, col = *pos
94       assert_equal buf.count("\n") + 1, line,
95           "wrong lineno: #{tok.inspect} (#{type}) [#{line}:#{col}]"
96       assert_equal buf.sub(/\A.*\n/m, '').size, col,
97           "wrong column: #{tok.inspect} (#{type}) [#{line}:#{col}]"
98       buf << tok
99     end
100     assert_equal src, buf
101   end
103   def test_backref
104     assert_equal ["$`", "$&", "$'", '$1', '$2', '$3'],
105                  scan('backref', %q[m($~, $`, $&, $', $1, $2, $3)])
106   end
108   def test_backtick
109     assert_equal ["`"],
110                  scan('backtick', %q[p `make all`])
111   end
113   def test_comma
114     assert_equal [','] * 6,
115                  scan('comma', %q[ m(0,1,2,3,4,5,6) ])
116     assert_equal [],
117                  scan('comma', %q[".,.,.,.,.,.,.."])
118     assert_equal [],
119                  scan('comma', %Q[<<EOS\n,,,,,,,,,,\nEOS])
120   end
122   def test_period
123     assert_equal [],
124                  scan('period', '')
125     assert_equal ['.'],
126                  scan('period', 'a.b')
127     assert_equal ['.'],
128                  scan('period', 'Object.new')
129     assert_equal [],
130                  scan('period', '"."')
131     assert_equal [],
132                  scan('period', '1..2')
133     assert_equal [],
134                  scan('period', '1...3')
135   end
137   def test_const
138     assert_equal ['CONST'],
139                  scan('const', 'CONST')
140     assert_equal ['C'],
141                  scan('const', 'C')
142     assert_equal ['CONST_A'],
143                  scan('const', 'CONST_A')
144     assert_equal ['Const', 'Const2', 'Const3'],
145                  scan('const', 'Const; Const2; Const3')
146     assert_equal ['Const'],
147                  scan('const', 'Const(a)')
148     assert_equal ['M', 'A', 'A2'],
149                  scan('const', 'M(A,A2)')
150     assert_equal [],
151                  scan('const', '')
152     assert_equal [],
153                  scan('const', 'm(lvar, @ivar, @@cvar, $gvar)')
154   end
156   def test_cvar
157     assert_equal [],
158                  scan('cvar', '')
159     assert_equal ['@@cvar'],
160                  scan('cvar', '@@cvar')
161     assert_equal ['@@__cvar__'],
162                  scan('cvar', '@@__cvar__')
163     assert_equal ['@@CVAR'],
164                  scan('cvar', '@@CVAR')
165     assert_equal ['@@cvar'],
166                  scan('cvar', '   @@cvar#comment')
167     assert_equal ['@@cvar'],
168                  scan('cvar', ':@@cvar')
169     assert_equal ['@@cvar'],
170                  scan('cvar', 'm(lvar, @ivar, @@cvar, $gvar)')
171     assert_equal [],
172                  scan('cvar', '"@@cvar"')
173   end
175   def test_embexpr_beg
176     assert_equal [],
177                  scan('embexpr_beg', '')
178     assert_equal ['#{'],
179                  scan('embexpr_beg', '"#{expr}"')
180     assert_equal [],
181                  scan('embexpr_beg', '%q[#{expr}]')
182     assert_equal ['#{'],
183                  scan('embexpr_beg', '%Q[#{expr}]')
184     assert_equal ['#{'],
185                  scan('embexpr_beg', "m(<<EOS)\n\#{expr}\nEOS")
186   end
188   def test_embexpr_end
189 =begin
190     # currently detected as "rbrace"
191     assert_equal [],
192                  scan('embexpr_end', '')
193     assert_equal ['}'],
194                  scan('embexpr_end', '"#{expr}"')
195     assert_equal [],
196                  scan('embexpr_end', '%q[#{expr}]')
197     assert_equal ['}'],
198                  scan('embexpr_end', '%Q[#{expr}]')
199     assert_equal ['}'],
200                  scan('embexpr_end', "m(<<EOS)\n\#{expr}\nEOS")
201 =end
202   end
204   def test_embvar
205     assert_equal [],
206                  scan('embvar', '')
207     assert_equal ['#'],
208                  scan('embvar', '"#$gvar"')
209     assert_equal ['#'],
210                  scan('embvar', '"#@ivar"')
211     assert_equal ['#'],
212                  scan('embvar', '"#@@cvar"')
213     assert_equal [],
214                  scan('embvar', '"#lvar"')
215     assert_equal [],
216                  scan('embvar', '"#"')
217     assert_equal [],
218                  scan('embvar', '"\#$gvar"')
219     assert_equal [],
220                  scan('embvar', '"\#@ivar"')
221     assert_equal [],
222                  scan('embvar', '%q[#@ivar]')
223     assert_equal ['#'],
224                  scan('embvar', '%Q[#@ivar]')
225   end
227   def test_float
228     assert_equal [],
229                  scan('float', '')
230     assert_equal ['1.000'],
231                  scan('float', '1.000')
232     assert_equal ['123.456'],
233                  scan('float', '123.456')
234     assert_equal ['1.2345678901234567890123456789'],
235                  scan('float', '1.2345678901234567890123456789')
236     assert_equal ['1.000'],
237                  scan('float', '   1.000# comment')
238     assert_equal ['1.234e5'],
239                  scan('float', '1.234e5')
240     assert_equal ['1.234e1234567890'],
241                  scan('float', '1.234e1234567890')
242     assert_equal ['1.0'],
243                  scan('float', 'm(a,b,1.0,c,d)')
244   end
246   def test_gvar
247     assert_equal [],
248                  scan('gvar', '')
249     assert_equal ['$a'],
250                  scan('gvar', '$a')
251     assert_equal ['$A'],
252                  scan('gvar', '$A')
253     assert_equal ['$gvar'],
254                  scan('gvar', 'm(lvar, @ivar, @@cvar, $gvar)')
255     assert_equal %w($_ $~ $* $$ $? $! $@ $/ $\\ $; $, $. $= $: $< $> $"),
256                  scan('gvar', 'm($_, $~, $*, $$, $?, $!, $@, $/, $\\, $;, $,, $., $=, $:, $<, $>, $")')
257   end
259   def test_ident
260     assert_equal [],
261                  scan('ident', '')
262     assert_equal ['lvar'],
263                  scan('ident', 'lvar')
264     assert_equal ['m', 'lvar'],
265                  scan('ident', 'm(lvar, @ivar, @@cvar, $gvar)')
266   end
268   def test_int
269     assert_equal [],
270                  scan('int', '')
271     assert_equal ['1', '10', '100000000000000'],
272                  scan('int', 'm(1,10,100000000000000)')
273   end
275   def test_ivar
276     assert_equal [],
277                  scan('ivar', '')
278     assert_equal ['@ivar'],
279                  scan('ivar', '@ivar')
280     assert_equal ['@__ivar__'],
281                  scan('ivar', '@__ivar__')
282     assert_equal ['@IVAR'],
283                  scan('ivar', '@IVAR')
284     assert_equal ['@ivar'],
285                  scan('ivar', 'm(lvar, @ivar, @@cvar, $gvar)')
286   end
288   def test_kw
289     assert_equal [],
290                  scan('kw', '')
291     assert_equal %w(not),
292                  scan('kw', 'not 1')
293     assert_equal %w(and),
294                  scan('kw', '1 and 2')
295     assert_equal %w(or),
296                  scan('kw', '1 or 2')
297     assert_equal %w(if then else end),
298                  scan('kw', 'if 1 then 2 else 3 end')
299     assert_equal %w(if then elsif else end),
300                  scan('kw', 'if 1 then 2 elsif 3 else 4 end')
301     assert_equal %w(unless then end),
302                  scan('kw', 'unless 1 then end')
303     assert_equal %w(if true),
304                  scan('kw', '1 if true')
305     assert_equal %w(unless false),
306                  scan('kw', '2 unless false')
307     assert_equal %w(case when when else end),
308                  scan('kw', 'case n; when 1; when 2; else 3 end')
309     assert_equal %w(while do nil end),
310                  scan('kw', 'while 1 do nil end')
311     assert_equal %w(until do nil end),
312                  scan('kw', 'until 1 do nil end')
313     assert_equal %w(while),
314                  scan('kw', '1 while 2')
315     assert_equal %w(until),
316                  scan('kw', '1 until 2')
317     assert_equal %w(while break next retry end),
318                  scan('kw', 'while 1; break; next; retry end')
319     assert_equal %w(for in next break end),
320                  scan('kw', 'for x in obj; next 1; break 2 end')
321     assert_equal %w(begin rescue retry end),
322                  scan('kw', 'begin 1; rescue; retry; end')
323     assert_equal %w(rescue),
324                  scan('kw', '1 rescue 2')
325     assert_equal %w(def redo return end),
326                  scan('kw', 'def m() redo; return end')
327     assert_equal %w(def yield yield end),
328                  scan('kw', 'def m() yield; yield 1 end')
329     assert_equal %w(def super super super end),
330                  scan('kw', 'def m() super; super(); super(1) end')
331     assert_equal %w(alias),
332                  scan('kw', 'alias a b')
333     assert_equal %w(undef),
334                  scan('kw', 'undef public')
335     assert_equal %w(class end),
336                  scan('kw', 'class A < Object; end')
337     assert_equal %w(module end),
338                  scan('kw', 'module M; end')
339     assert_equal %w(class end),
340                  scan('kw', 'class << obj; end')
341     assert_equal %w(BEGIN),
342                  scan('kw', 'BEGIN { }')
343     assert_equal %w(END),
344                  scan('kw', 'END { }')
345     assert_equal %w(self),
346                  scan('kw', 'self.class')
347     assert_equal %w(nil true false),
348                  scan('kw', 'p(nil, true, false)')
349     assert_equal %w(__FILE__ __LINE__),
350                  scan('kw', 'p __FILE__, __LINE__')
351     assert_equal %w(defined?),
352                  scan('kw', 'defined?(Object)')
353   end
355   def test_lbrace
356     assert_equal [],
357                  scan('lbrace', '')
358     assert_equal ['{'],
359                  scan('lbrace', '3.times{ }')
360     assert_equal ['{'],
361                  scan('lbrace', '3.times  { }')
362     assert_equal ['{'],
363                  scan('lbrace', '3.times{}')
364     assert_equal [],
365                  scan('lbrace', '"{}"')
366     assert_equal ['{'],
367                  scan('lbrace', '{1=>2}')
368   end
370   def test_rbrace
371     assert_equal [],
372                  scan('rbrace', '')
373     assert_equal ['}'],
374                  scan('rbrace', '3.times{ }')
375     assert_equal ['}'],
376                  scan('rbrace', '3.times  { }')
377     assert_equal ['}'],
378                  scan('rbrace', '3.times{}')
379     assert_equal [],
380                  scan('rbrace', '"{}"')
381     assert_equal ['}'],
382                  scan('rbrace', '{1=>2}')
383   end
385   def test_lbracket
386     assert_equal [],
387                  scan('lbracket', '')
388     assert_equal ['['],
389                  scan('lbracket', '[]')
390     assert_equal ['['],
391                  scan('lbracket', 'a[1]')
392     assert_equal [],
393                  scan('lbracket', 'm(%q[])')
394   end
396   def test_rbracket
397     assert_equal [],
398                  scan('rbracket', '')
399     assert_equal [']'],
400                  scan('rbracket', '[]')
401     assert_equal [']'],
402                  scan('rbracket', 'a[1]')
403     assert_equal [],
404                  scan('rbracket', 'm(%q[])')
405   end
407   def test_lparen
408     assert_equal [],
409                  scan('lparen', '')
410     assert_equal ['('],
411                  scan('lparen', '()')
412     assert_equal ['('],
413                  scan('lparen', 'm()')
414     assert_equal ['('],
415                  scan('lparen', 'm (a)')
416     assert_equal [],
417                  scan('lparen', '"()"')
418     assert_equal [],
419                  scan('lparen', '"%w()"')
420   end
422   def test_rparen
423     assert_equal [],
424                  scan('rparen', '')
425     assert_equal [')'],
426                  scan('rparen', '()')
427     assert_equal [')'],
428                  scan('rparen', 'm()')
429     assert_equal [')'],
430                  scan('rparen', 'm (a)')
431     assert_equal [],
432                  scan('rparen', '"()"')
433     assert_equal [],
434                  scan('rparen', '"%w()"')
435   end
437   def test_op
438     assert_equal [],
439                  scan('op', '')
440     assert_equal ['|'],
441                  scan('op', '1 | 1')
442     assert_equal ['^'],
443                  scan('op', '1 ^ 1')
444     assert_equal ['&'],
445                  scan('op', '1 & 1')
446     assert_equal ['<=>'],
447                  scan('op', '1 <=> 1')
448     assert_equal ['=='],
449                  scan('op', '1 == 1')
450     assert_equal ['==='],
451                  scan('op', '1 === 1')
452     assert_equal ['=~'],
453                  scan('op', '1 =~ 1')
454     assert_equal ['>'],
455                  scan('op', '1 > 1')
456     assert_equal ['>='],
457                  scan('op', '1 >= 1')
458     assert_equal ['<'],
459                  scan('op', '1 < 1')
460     assert_equal ['<='],
461                  scan('op', '1 <= 1')
462     assert_equal ['<<'],
463                  scan('op', '1 << 1')
464     assert_equal ['>>'],
465                  scan('op', '1 >> 1')
466     assert_equal ['+'],
467                  scan('op', '1 + 1')
468     assert_equal ['-'],
469                  scan('op', '1 - 1')
470     assert_equal ['*'],
471                  scan('op', '1 * 1')
472     assert_equal ['/'],
473                  scan('op', '1 / 1')
474     assert_equal ['%'],
475                  scan('op', '1 % 1')
476     assert_equal ['**'],
477                  scan('op', '1 ** 1')
478     assert_equal ['~'],
479                  scan('op', '~1')
480     assert_equal ['-'],
481                  scan('op', '-a')
482     assert_equal ['+'],
483                  scan('op', '+a')
484     assert_equal ['[]'],
485                  scan('op', ':[]')
486     assert_equal ['[]='],
487                  scan('op', ':[]=')
488     assert_equal [],
489                  scan('op', %q[`make all`])
490   end
492   def test_symbeg
493     assert_equal [],
494                  scan('symbeg', '')
495     assert_equal [':'],
496                  scan('symbeg', ':sym')
497     assert_equal [':'],
498                  scan('symbeg', '[1,2,3,:sym]')
499     assert_equal [],
500                  scan('symbeg', '":sym"')
501     assert_equal [],
502                  scan('symbeg', 'a ? b : c')
503   end
505   def test_tstring_beg
506     assert_equal [],
507                  scan('tstring_beg', '')
508     assert_equal ['"'],
509                  scan('tstring_beg', '"abcdef"')
510     assert_equal ['%q['],
511                  scan('tstring_beg', '%q[abcdef]')
512     assert_equal ['%Q['],
513                  scan('tstring_beg', '%Q[abcdef]')
514   end
516   def test_tstring_content
517     assert_equal [],
518                  scan('tstring_content', '')
519     assert_equal ['abcdef'],
520                  scan('tstring_content', '"abcdef"')
521     assert_equal ['abcdef'],
522                  scan('tstring_content', '%q[abcdef]')
523     assert_equal ['abcdef'],
524                  scan('tstring_content', '%Q[abcdef]')
525     assert_equal ['abc', 'def'],
526                  scan('tstring_content', '"abc#{1}def"')
527     assert_equal ['sym'],
528                  scan('tstring_content', ':"sym"')
529   end
531   def test_tstring_end
532     assert_equal [],
533                  scan('tstring_end', '')
534     assert_equal ['"'],
535                  scan('tstring_end', '"abcdef"')
536     assert_equal [']'],
537                  scan('tstring_end', '%q[abcdef]')
538     assert_equal [']'],
539                  scan('tstring_end', '%Q[abcdef]')
540   end
542   def test_regexp_beg
543     assert_equal [],
544                  scan('regexp_beg', '')
545     assert_equal ['/'],
546                  scan('regexp_beg', '/re/')
547     assert_equal ['%r<'],
548                  scan('regexp_beg', '%r<re>')
549     assert_equal [],
550                  scan('regexp_beg', '5 / 5')
551   end
553   def test_regexp_end
554     assert_equal [],
555                  scan('regexp_end', '')
556     assert_equal ['/'],
557                  scan('regexp_end', '/re/')
558     assert_equal ['>'],
559                  scan('regexp_end', '%r<re>')
560   end
562   def test_words_beg
563     assert_equal [],
564                  scan('words_beg', '')
565     assert_equal ['%W('],
566                  scan('words_beg', '%W()')
567     assert_equal ['%W('],
568                  scan('words_beg', '%W(w w w)')
569     assert_equal ['%W( '],
570                  scan('words_beg', '%W( w w w )')
571   end
573   def test_qwords_beg
574     assert_equal [],
575                  scan('qwords_beg', '')
576     assert_equal ['%w('],
577                  scan('qwords_beg', '%w()')
578     assert_equal ['%w('],
579                  scan('qwords_beg', '%w(w w w)')
580     assert_equal ['%w( '],
581                  scan('qwords_beg', '%w( w w w )')
582   end
584   # FIXME: Close paren must not present (`words_end' scanner event?).
585   def test_words_sep
586     assert_equal [],
587                  scan('words_sep', '')
588     assert_equal [')'],
589                  scan('words_sep', '%w()')
590     assert_equal [' ', ' ', ')'],
591                  scan('words_sep', '%w(w w w)')
592     assert_equal [' ', ' ', ' )'],
593                  scan('words_sep', '%w( w w w )')
594     assert_equal ["\n", ' ', ' )'],
595                  scan('words_sep', "%w( w\nw w )")
596   end
598   def test_heredoc_beg
599     assert_equal [],
600                  scan('heredoc_beg', '')
601     assert_equal ['<<EOS'],
602                  scan('heredoc_beg', "<<EOS\nheredoc\nEOS")
603     assert_equal ['<<EOS'],
604                  scan('heredoc_beg', "<<EOS\nheredoc\nEOS\n")
605     assert_equal ['<<EOS'],
606                  scan('heredoc_beg', "<<EOS\nheredoc\nEOS \n")
607     assert_equal ['<<-EOS'],
608                  scan('heredoc_beg', "<<-EOS\nheredoc\n\tEOS \n")
609     assert_equal ['<<"EOS"'],
610                  scan('heredoc_beg', %Q[<<"EOS"\nheredoc\nEOS])
611     assert_equal [%q(<<'EOS')],
612                  scan('heredoc_beg', "<<'EOS'\nheredoc\nEOS")
613     assert_equal [%q(<<`EOS`)],
614                  scan('heredoc_beg', "<<`EOS`\nheredoc\nEOS")
615     assert_equal [%q(<<" ")],
616                  scan('heredoc_beg', %Q[<<" "\nheredoc\nEOS])
617   end
619   def test_tstring_content_HEREDOC
620     assert_equal [],
621                  scan('tstring_content', '')
622     assert_equal ["heredoc\n"],
623                  scan('tstring_content', "<<EOS\nheredoc\nEOS")
624     assert_equal ["heredoc\n"],
625                  scan('tstring_content', "<<EOS\nheredoc\nEOS\n")
626     assert_equal ["heredoc \n"],
627                  scan('tstring_content', "<<EOS\nheredoc \nEOS \n")
628     assert_equal ["heredoc\n"],
629                  scan('tstring_content', "<<-EOS\nheredoc\n\tEOS \n")
630   end
632   def test_heredoc_end
633     assert_equal [],
634                  scan('heredoc_end', '')
635     assert_equal ["EOS"],
636                  scan('heredoc_end', "<<EOS\nheredoc\nEOS")
637     assert_equal ["EOS\n"],
638                  scan('heredoc_end', "<<EOS\nheredoc\nEOS\n")
639     assert_equal ["EOS \n"],
640                  scan('heredoc_end', "<<EOS\nheredoc\nEOS \n")
641     assert_equal ["\tEOS \n"],
642                  scan('heredoc_end', "<<-EOS\nheredoc\n\tEOS \n")
643   end
645   def test_semicolon
646     assert_equal [],
647                  scan('semicolon', '')
648     assert_equal %w(;),
649                  scan('semicolon', ';')
650     assert_equal %w(; ;),
651                  scan('semicolon', '; ;')
652     assert_equal %w(; ; ;),
653                  scan('semicolon', 'nil;nil;nil;')
654     assert_equal %w(; ; ;),
655                  scan('semicolon', 'nil;nil;nil;nil')
656     assert_equal [],
657                  scan('semicolon', '";"')
658     assert_equal [],
659                  scan('semicolon', '%w(;)')
660     assert_equal [],
661                  scan('semicolon', '/;/')
662   end
664   def test_comment
665     assert_equal [],
666                  scan('comment', '')
667     assert_equal ['# comment'],
668                  scan('comment', '# comment')
669     assert_equal ["# comment\n"],
670                  scan('comment', "# comment\n")
671     assert_equal ["# comment\n"],
672                  scan('comment', "# comment\n1 + 1")
673     assert_equal ["# comment\n"],
674                  scan('comment', "1 + 1 + 1# comment\n1 + 1")
675   end
677   def test_embdoc_beg
678     assert_equal [],
679                  scan('embdoc_beg', '')
680     assert_equal ["=begin\n"],
681                  scan('embdoc_beg', "=begin\ndoc\n=end")
682     assert_equal ["=begin \n"],
683                  scan('embdoc_beg', "=begin \ndoc\n=end\n")
684     assert_equal ["=begin comment\n"],
685                  scan('embdoc_beg', "=begin comment\ndoc\n=end\n")
686   end
688   def test_embdoc
689     assert_equal [],
690                  scan('embdoc', '')
691     assert_equal ["doc\n"],
692                  scan('embdoc', "=begin\ndoc\n=end")
693     assert_equal ["doc\n"],
694                  scan('embdoc', "=begin\ndoc\n=end\n")
695   end
697   def test_embdoc_end
698     assert_equal [],
699                  scan('embdoc_end', '')
700     assert_equal ["=end"],
701                  scan('embdoc_end', "=begin\ndoc\n=end")
702     assert_equal ["=end\n"],
703                  scan('embdoc_end', "=begin\ndoc\n=end\n")
704   end
706   def test_sp
707     assert_equal [],
708                  scan('sp', '')
709     assert_equal [' '],
710                  scan('sp', ' ')
711     assert_equal [' '],
712                  scan('sp', ' 1')
713     assert_equal [],
714                  scan('sp', "\n")
715     assert_equal [' '],
716                  scan('sp', " \n")
717     assert_equal [' ', ' '],
718                  scan('sp', "1 + 1")
719     assert_equal [],
720                  scan('sp', "' '")
721     assert_equal [],
722                  scan('sp', "%w(  )")
723     assert_equal [],
724                  scan('sp', "%w(  w  )")
725     assert_equal [],
726                  scan('sp', "p(/ /)")
727   end
729   # `nl' event always means End-Of-Statement.
730   def test_nl
731     assert_equal [],
732                  scan('nl', '')
733     assert_equal [],
734                  scan('nl', "\n")
735     assert_equal ["\n"],
736                  scan('nl', "1 + 1\n")
737     assert_equal ["\n", "\n"],
738                  scan('nl', "1 + 1\n2 + 2\n")
739     assert_equal [],
740                  scan('nl', "1 +\n1")
741     assert_equal [],
742                  scan('nl', "1;\n")
743     assert_equal ["\r\n"],
744                  scan('nl', "1 + 1\r\n")
745     assert_equal [],
746                  scan('nl', "1;\r\n")
747   end
749   def test_ignored_nl
750     assert_equal [],
751                  scan('ignored_nl', '')
752     assert_equal ["\n"],
753                  scan('ignored_nl', "\n")
754     assert_equal [],
755                  scan('ignored_nl', "1 + 1\n")
756     assert_equal [],
757                  scan('ignored_nl', "1 + 1\n2 + 2\n")
758     assert_equal ["\n"],
759                  scan('ignored_nl', "1 +\n1")
760     assert_equal ["\n"],
761                  scan('ignored_nl', "1;\n")
762     assert_equal [],
763                  scan('ignored_nl', "1 + 1\r\n")
764     assert_equal ["\r\n"],
765                  scan('ignored_nl', "1;\r\n")
766   end
768   def test___end__
769     assert_equal [],
770                  scan('__end__', "")
771     assert_equal ["__END__"],
772                  scan('__end__', "__END__")
773     assert_equal ["__END__\n"],
774                  scan('__end__', "__END__\n")
775     assert_equal ["__END__\n"],
776                  Ripper.tokenize("__END__\njunk junk junk")
777     assert_equal ["__END__"],
778                  scan('__end__', "1\n__END__")
779     assert_equal [],
780                  scan('__end__', "print('__END__')")
781   end
783   def test_CHAR
784     assert_equal [],
785                  scan('CHAR', "")
786     assert_equal ["@"],
787                  scan('CHAR', "@")
788     assert_equal [],
789                  scan('CHAR', "@ivar")
790   end
792   def test_label
793   end
795   def test_tlambda
796   end
798   def test_tlambeg
799   end
801   def test_tlambda_arg
802   end
806 rescue LoadError