@@ -283,6 +283,11 @@ def hello; end
283
283
src = "%#{ tok } {\n a b c\n d e f\n }"
284
284
expect ( stmt ( src ) . source ) . to eq src
285
285
end
286
+
287
+ it "shows proper source for %#{ tok } [] array" do
288
+ src = "%#{ tok } [\n a b c\n d e f\n ]"
289
+ expect ( stmt ( src ) . source ) . to eq src
290
+ end
286
291
end
287
292
288
293
{ 'i' => :qsymbols_literal , 'I' => :symbols_literal ,
@@ -300,6 +305,33 @@ def hello; end
300
305
end
301
306
end
302
307
308
+ it "parses %#{ id } {...} literals" do
309
+ [
310
+ "TEST = %#{ id } {A B C}" ,
311
+ "TEST = %#{ id } { A B C }" ,
312
+ "TEST = %#{ id } { \n A \n B \n C \n }" ,
313
+ "TEST = %#{ id } {\n \n AD\n \n B\n \n C\n \n }" ,
314
+ "TEST = %#{ id } {\n A\n B\n C\n }" ,
315
+ ] . each do |str |
316
+ node = stmt ( str ) . jump ( sym )
317
+ expect ( node . source ) . to eq ( str [ /(\% #{ id } \{ .+\} )/m , 1 ] )
318
+ end
319
+ end
320
+
321
+ it "parses %#{ id } [...] literals" do
322
+ [
323
+ "TEST = %#{ id } [A B C]" ,
324
+ "TEST = %#{ id } [ A B C ]" ,
325
+ "TEST = %#{ id } [ \n A \n B \n C \n ]" ,
326
+ "TEST = %#{ id } [\n \n AD\n \n B\n \n C\n \n ]" ,
327
+ "TEST = %#{ id } [\n A\n B\n C\n ]" ,
328
+ "TEST = %#{ id } [\n A]" ,
329
+ ] . each do |str |
330
+ node = stmt ( str ) . jump ( sym )
331
+ expect ( node . source ) . to eq ( str [ /(\% #{ id } \[ .+\] )/m , 1 ] )
332
+ end
333
+ end
334
+
303
335
it "tokenizing %#{ id } (...) returns correct tokens" do
304
336
toks = tokenize ( "TEST = %#{ id } (A B C)" ) . flatten
305
337
expect ( toks . count ( :tstring_content ) ) . to eq ( 3 )
@@ -327,7 +359,7 @@ def method
327
359
# Method comment not docstring
328
360
end
329
361
eof
330
-
362
+
331
363
tokens = tokenize ( src . gsub ( /^ +/ , '' ) )
332
364
expect ( tokens ) . to eq ( tokens . sort_by { |t | t . last } )
333
365
expect ( tokens . map { |t | t . first } ) . to eq %i( kw sp ident nl comment kw nl )
@@ -370,6 +402,27 @@ class Foo
370
402
expect ( s . jump ( :array ) . source ) . to eq "['foo', 'bar']"
371
403
end
372
404
405
+ it "parses [[]] as array of arrays" do
406
+ s = stmt ( <<-eof )
407
+ class Foo
408
+ FOO = [['foo', 'bar']]
409
+ end
410
+ eof
411
+ expect ( s . jump ( :array ) . source ) . to eq "[['foo', 'bar']]"
412
+ end
413
+
414
+ it "parses %w() array inside another empty array" do
415
+ s = stmts ( <<-eof )
416
+ FOO = [%w( foo bar )]
417
+ eof
418
+ expect ( s [ 0 ] . jump ( :array ) . source ) . to eq '[%w( foo bar )]'
419
+ end
420
+
421
+ it "parses %w() array inside another populated array" do
422
+ s = stmts ( "FOO = ['1', %w[]]" )
423
+ expect ( s [ 0 ] . jump ( :array ) . source ) . to eq "['1', %w[]]"
424
+ end
425
+
373
426
it "shows source for unary minus" do
374
427
expect ( stmt ( "X = - 1" ) . jump ( :unary ) . source ) . to eq '- 1'
375
428
end
0 commit comments