@@ -307,6 +307,101 @@ def test_class_tokenize_string
307307 assert_equal expected , tokens
308308 end
309309
310+ def test_class_tokenize_string_with_escape
311+ tokens = RDoc ::RubyLex . tokenize <<'RUBY' , nil
312+ [
313+ '\\',
314+ '\'',
315+ "'",
316+ "\'\"\`",
317+ "\#",
318+ "\#{}",
319+ "#",
320+ "#{}",
321+ /'"/,
322+ /\'\"/,
323+ /\//,
324+ /\\/,
325+ /\#/,
326+ /\#{}/,
327+ /#/,
328+ /#{}/
329+ ]
330+ RUBY
331+
332+ expected = [
333+ @TK ::TkLBRACK . new ( 0 , 1 , 0 , "[" ) ,
334+ @TK ::TkNL . new ( 1 , 1 , 1 , "\n " ) ,
335+ @TK ::TkSPACE . new ( 2 , 2 , 0 , " " ) ,
336+ @TK ::TkSTRING . new ( 4 , 2 , 2 , "'\\ \\ '" ) ,
337+ @TK ::TkCOMMA . new ( 8 , 2 , 6 , "," ) ,
338+ @TK ::TkNL . new ( 9 , 2 , 2 , "\n " ) ,
339+ @TK ::TkSPACE . new ( 10 , 3 , 0 , " " ) ,
340+ @TK ::TkSTRING . new ( 12 , 3 , 2 , "'\\ ''" ) ,
341+ @TK ::TkCOMMA . new ( 16 , 3 , 6 , "," ) ,
342+ @TK ::TkNL . new ( 17 , 3 , 10 , "\n " ) ,
343+ @TK ::TkSPACE . new ( 18 , 4 , 0 , " " ) ,
344+ @TK ::TkSTRING . new ( 20 , 4 , 2 , "\" '\" " ) ,
345+ @TK ::TkCOMMA . new ( 23 , 4 , 5 , "," ) ,
346+ @TK ::TkNL . new ( 24 , 4 , 18 , "\n " ) ,
347+ @TK ::TkSPACE . new ( 25 , 5 , 0 , " " ) ,
348+ @TK ::TkSTRING . new ( 27 , 5 , 2 , "\" \\ '\\ \" \\ `\" " ) ,
349+ @TK ::TkCOMMA . new ( 35 , 5 , 10 , "," ) ,
350+ @TK ::TkNL . new ( 36 , 5 , 25 , "\n " ) ,
351+ @TK ::TkSPACE . new ( 37 , 6 , 0 , " " ) ,
352+ @TK ::TkSTRING . new ( 39 , 6 , 2 , "\" \\ #\" " ) ,
353+ @TK ::TkCOMMA . new ( 43 , 6 , 6 , "," ) ,
354+ @TK ::TkNL . new ( 44 , 6 , 37 , "\n " ) ,
355+ @TK ::TkSPACE . new ( 45 , 7 , 0 , " " ) ,
356+ @TK ::TkSTRING . new ( 47 , 7 , 2 , "\" \\ \# {}\" " ) ,
357+ @TK ::TkCOMMA . new ( 53 , 7 , 8 , "," ) ,
358+ @TK ::TkNL . new ( 54 , 7 , 45 , "\n " ) ,
359+ @TK ::TkSPACE . new ( 55 , 8 , 0 , " " ) ,
360+ @TK ::TkSTRING . new ( 57 , 8 , 2 , "\" #\" " ) ,
361+ @TK ::TkCOMMA . new ( 60 , 8 , 5 , "," ) ,
362+ @TK ::TkNL . new ( 61 , 8 , 55 , "\n " ) ,
363+ @TK ::TkSPACE . new ( 62 , 9 , 0 , " " ) ,
364+ @TK ::TkDSTRING . new ( 64 , 9 , 2 , "\" \# {}\" " ) ,
365+ @TK ::TkCOMMA . new ( 69 , 9 , 7 , "," ) ,
366+ @TK ::TkNL . new ( 70 , 9 , 62 , "\n " ) ,
367+ @TK ::TkSPACE . new ( 71 , 10 , 0 , " " ) ,
368+ @TK ::TkREGEXP . new ( 73 , 10 , 2 , "/'\" /" ) ,
369+ @TK ::TkCOMMA . new ( 77 , 10 , 6 , "," ) ,
370+ @TK ::TkNL . new ( 78 , 10 , 71 , "\n " ) ,
371+ @TK ::TkSPACE . new ( 79 , 11 , 0 , " " ) ,
372+ @TK ::TkREGEXP . new ( 81 , 11 , 2 , "/\\ '\\ \" /" ) ,
373+ @TK ::TkCOMMA . new ( 87 , 11 , 8 , "," ) ,
374+ @TK ::TkNL . new ( 88 , 11 , 79 , "\n " ) ,
375+ @TK ::TkSPACE . new ( 89 , 12 , 0 , " " ) ,
376+ @TK ::TkREGEXP . new ( 91 , 12 , 2 , "/\\ //" ) ,
377+ @TK ::TkCOMMA . new ( 95 , 12 , 6 , "," ) ,
378+ @TK ::TkNL . new ( 96 , 12 , 89 , "\n " ) ,
379+ @TK ::TkSPACE . new ( 97 , 13 , 0 , " " ) ,
380+ @TK ::TkREGEXP . new ( 99 , 13 , 2 , "/\\ \\ /" ) ,
381+ @TK ::TkCOMMA . new ( 103 , 13 , 6 , "," ) ,
382+ @TK ::TkNL . new ( 104 , 13 , 97 , "\n " ) ,
383+ @TK ::TkSPACE . new ( 105 , 14 , 0 , " " ) ,
384+ @TK ::TkREGEXP . new ( 107 , 14 , 2 , "/\\ #/" ) ,
385+ @TK ::TkCOMMA . new ( 111 , 14 , 6 , "," ) ,
386+ @TK ::TkNL . new ( 112 , 14 , 105 , "\n " ) ,
387+ @TK ::TkSPACE . new ( 113 , 15 , 0 , " " ) ,
388+ @TK ::TkREGEXP . new ( 115 , 15 , 2 , "/\\ \# {}/" ) ,
389+ @TK ::TkCOMMA . new ( 121 , 15 , 8 , "," ) ,
390+ @TK ::TkNL . new ( 122 , 15 , 113 , "\n " ) ,
391+ @TK ::TkSPACE . new ( 123 , 16 , 0 , " " ) ,
392+ @TK ::TkREGEXP . new ( 125 , 16 , 2 , "/#/" ) ,
393+ @TK ::TkCOMMA . new ( 128 , 16 , 5 , "," ) ,
394+ @TK ::TkNL . new ( 129 , 16 , 123 , "\n " ) ,
395+ @TK ::TkSPACE . new ( 130 , 17 , 0 , " " ) ,
396+ @TK ::TkDREGEXP . new ( 132 , 17 , 2 , "/\# {}/" ) ,
397+ @TK ::TkNL . new ( 137 , 17 , 7 , "\n " ) ,
398+ @TK ::TkRBRACK . new ( 138 , 18 , 0 , "]" ) ,
399+ @TK ::TkNL . new ( 139 , 18 , 138 , "\n " )
400+ ]
401+
402+ assert_equal expected , tokens
403+ end
404+
310405 def test_class_tokenize_string_escape
311406 tokens = RDoc ::RubyLex . tokenize '"\\n"' , nil
312407 assert_equal @TK ::TkSTRING . new ( 0 , 1 , 0 , "\" \\ n\" " ) , tokens . first
0 commit comments