PageRenderTime 46ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/projects/jruby-1.7.3/test/externals/ruby1.9/ripper/test_scanner_events.rb

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