source: EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-bin-debugger/bintest/print.rb@ 439

Last change on this file since 439 was 439, checked in by coas-nagasima, 4 years ago

mrubyを2.1.1に更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 17.2 KB
Line 
1require 'open3'
2require 'tempfile'
3require 'strscan'
4
5class BinTest_MrubyBinDebugger
6# @debug1=false
7# @debug2=true
8 def self.test(rubysource, testcase)
9 script, bin = Tempfile.new(['test', '.rb']), Tempfile.new(['test', '.mrb'])
10
11 # .rb
12 script.write rubysource
13 script.flush
14
15 # compile
16 `./bin/mrbc -g -o "#{bin.path}" "#{script.path}"`
17
18 # add mrdb quit
19 testcase << {:cmd=>"quit"}
20
21 stdin_data = testcase.map{|t| t[:cmd]}.join("\n") << "\n"
22
23 prompt = /^\(#{Regexp.escape(script.path)}:\d+\) /
24 ["bin/mrdb #{script.path}","bin/mrdb -b #{bin.path}"].each do |cmd|
25 o, s = Open3.capture2(cmd, :stdin_data => stdin_data)
26 scanner = StringScanner.new(o)
27 scanner.skip_until(prompt)
28 testcase.each do |tc|
29 exp = tc[:exp]
30 if exp
31 act = scanner.scan_until(/\n/)
32 break unless assert_operator act, :start_with?, exp
33 end
34 scanner.skip_until(prompt)
35 end
36
37=begin
38if @debug1
39 o.split("\n").each_with_index do |i,actual|
40 p [i,actual]
41 end
42end
43 # compare actual / expected
44 o.split("\n").each do |actual|
45 next if actual.empty?
46 exp = exp_vals.shift
47if @debug2
48 a = true
49 a = actual.include?(exp) unless exp.nil?
50 p [actual, exp] unless a
51end
52 assert_true actual.include?(exp) unless exp.nil?
53 end
54=end
55 end
56 end
57end
58
59assert('mruby-bin-debugger(print) invalid arguments') do
60 # ruby source
61 src = "foo = 'foo'\n"
62
63 # test case
64 tc = []
65 tc << {:cmd=>"p", :exp=>"Parameter not specified."}
66
67 BinTest_MrubyBinDebugger.test(src, tc)
68end
69
70assert('mruby-bin-debugger(print) nomal') do
71 # ruby source
72 src = <<"SRC"
73foo = 'foo'
74bar = foo
75baz = bar
76SRC
77
78 # test case
79 tc = []
80 tc << {:cmd=>"s"}
81 tc << {:cmd=>"p (1+2)", :exp=>'$1 = 3'}
82 tc << {:cmd=>"p foo", :exp=>'$2 = "foo"'}
83 tc << {:cmd=>"p foo*=2", :exp=>'$3 = "foofoo"'}
84 tc << {:cmd=>"s"}
85 tc << {:cmd=>"p bar", :exp=>'$4 = "foofoo"'}
86
87 BinTest_MrubyBinDebugger.test(src, tc)
88end
89
90assert('mruby-bin-debugger(print) error') do
91 # ruby source
92 src = "foo = 'foo'\n"
93
94 # test case
95 tc = []
96 tc << {:cmd=>"p (1+2", :exp=>'$1 = line 1: syntax error'}
97 tc << {:cmd=>"p bar", :exp=>'$2 = undefined method'}
98
99 BinTest_MrubyBinDebugger.test(src, tc)
100end
101
102# Kernel#instance_eval(string) does't work multiple statements.
103=begin
104assert('mruby-bin-debugger(print) multiple statements') do
105 # ruby source
106 src = <<"SRC"
107x = 0
108y = 0
109z = 0
110SRC
111
112 # test case
113 tc = []
114 tc << {:cmd=>"s",}
115 tc << {:cmd=>"p x=1;x+=2", :exp=>"3"}
116 tc << {:cmd=>"s",}
117 tc << {:cmd=>"p x", :exp=>"3"}
118
119 BinTest_MrubyBinDebugger.test(src, tc)
120end
121=end
122
123assert('mruby-bin-debugger(print) scope:top') do
124 # ruby source (bp is break point)
125 src = "bp=nil\n"
126
127 # test case
128 tc = []
129 tc << {:cmd=>"p self", :exp=>'$1 = main'}
130
131 BinTest_MrubyBinDebugger.test(src, tc)
132end
133
134assert('mruby-bin-debugger(print) scope:class') do
135 # ruby source (bp is break point)
136 src = <<"SRC"
137class TestClassScope
138 bp = nil
139end
140SRC
141
142 # test case
143 tc = []
144 tc << {:cmd=>"s"}
145 tc << {:cmd=>"p self", :exp=>'$1 = TestClassScope'}
146
147 BinTest_MrubyBinDebugger.test(src, tc)
148end
149
150assert('mruby-bin-debugger(print) scope:module') do
151 # ruby source (bp is break point)
152 src = <<"SRC"
153class TestModuleScope
154 bp = nil
155end
156SRC
157
158 # test case
159 tc = []
160 tc << {:cmd=>"s"}
161 tc << {:cmd=>"p self", :exp=>'$1 = TestModuleScope'}
162
163 BinTest_MrubyBinDebugger.test(src, tc)
164end
165
166assert('mruby-bin-debugger(print) scope:instance method') do
167 # ruby source (bp is break point)
168 src = <<"SRC"
169class TestMethodScope
170 def m
171 bp = nil
172 end
173end
174TestMethodScope.new.m
175SRC
176
177 tc = []
178 tc << {:cmd=>"b 3"}
179 tc << {:cmd=>"r"}
180 tc << {:cmd=>"p self", :exp=>'$1 = #<TestMethodScope:'}
181
182 BinTest_MrubyBinDebugger.test(src, tc)
183end
184
185assert('mruby-bin-debugger(print) scope:class method') do
186 # ruby source (bp is break point)
187 src = <<"SRC"
188class TestClassMethodScope
189 def self.cm
190 bp = nil
191 end
192end
193TestClassMethodScope.cm
194SRC
195
196 tc = []
197 tc << {:cmd=>"b 3"}
198 tc << {:cmd=>"r"}
199 tc << {:cmd=>"p self", :exp=>'$1 = TestClassMethodScope'}
200
201 BinTest_MrubyBinDebugger.test(src, tc)
202end
203
204assert('mruby-bin-debugger(print) scope:block') do
205 # ruby source (bp is break point)
206 src = <<"SRC"
2071.times do
208 bp = nil
209end
210class TestBlockScope
211 1.times do
212 bp = nil
213 end
214 def m
215 1.times do
216 bp = nil
217 end
218 end
219end
220TestBlockScope.new.m
221SRC
222
223 tc = []
224 tc << {:cmd=>"b 2"}
225 tc << {:cmd=>"b 6"}
226 tc << {:cmd=>"b 10"}
227 tc << {:cmd=>"c"}
228 tc << {:cmd=>"p self", :exp=>'$1 = main'}
229 tc << {:cmd=>"c"}
230 tc << {:cmd=>"p self", :exp=>'$2 = TestBlockScope'}
231 tc << {:cmd=>"c"}
232 tc << {:cmd=>"p self", :exp=>'$3 = #<TestBlockScope:'}
233
234 BinTest_MrubyBinDebugger.test(src, tc)
235end
236
237assert('mruby-bin-debugger(print) same name:local variabe') do
238 # ruby source (bp is break point)
239 src = <<"SRC"
240lv = 'top'
241class TestLocalVariableName
242 lv = 'class'
243 def m
244 lv = 'instance method'
245 bp = nil
246 end
247 bp = nil
248end
249TestLocalVariableName.new.m
250bp = nil
251SRC
252
253 tc = []
254 tc << {:cmd=>"b 6"}
255 tc << {:cmd=>"b 8"}
256 tc << {:cmd=>"b 11"}
257 tc << {:cmd=>"r"}
258 tc << {:cmd=>"p lv", :exp=>'$1 = "class"'}
259 tc << {:cmd=>"c"}
260 tc << {:cmd=>"p lv", :exp=>'$2 = "instance method"'}
261 tc << {:cmd=>"c"}
262 tc << {:cmd=>"p lv", :exp=>'$3 = "top"'}
263
264 BinTest_MrubyBinDebugger.test(src, tc)
265end
266
267assert('mruby-bin-debugger(print) same name:instance variabe') do
268 # ruby source (bp is break point)
269 src = <<"SRC"
270@iv = 'top'
271class TestInstanceVariableName
272 def initialize(v)
273 @iv = v
274 end
275 def m
276 bp = nil
277 end
278end
279i1 = TestInstanceVariableName.new('instance1')
280i2 = TestInstanceVariableName.new('instance2')
281i1.m
282i2.m
283bp = nil
284SRC
285
286 tc = []
287 tc << {:cmd=>"b 7"}
288 tc << {:cmd=>"b 14"}
289 tc << {:cmd=>"r"}
290 tc << {:cmd=>"p @iv", :exp=>'$1 = "instance1"'}
291 tc << {:cmd=>"c"}
292 tc << {:cmd=>"p @iv", :exp=>'$2 = "instance2"'}
293 tc << {:cmd=>"c"}
294 tc << {:cmd=>"p @iv", :exp=>'$3 = "top"'}
295
296 BinTest_MrubyBinDebugger.test(src, tc)
297end
298
299# Kernel#instance_eval(string) does't work const.
300=begin
301assert('mruby-bin-debugger(print) same name:const') do
302 # ruby source (bp is break point)
303 src = <<"SRC"
304CONST='top'
305class TestConstNameSuperClass
306 CONST='super class'
307 def m
308 bp = nil
309 end
310end
311class TestConstNameSubClass < TestConstNameSuperClass
312 CONST='sub class'
313 def m
314 bp = nil
315 end
316end
317
318TestConstNameSuperClass.new.m()
319TestConstNameSubClass.new.m()
320bp = nil
321SRC
322
323 # todo: wait for 'break' to be implemented
324 tc = []
325 9.times { tc << {:cmd=>"s"} }
326 tc << {:cmd=>"p CONST", :exp=>"super class"}
327 3.times { tc << {:cmd=>"s"} }
328 tc << {:cmd=>"p CONST", :exp=>"sub class"}
329 1.times { tc << {:cmd=>"s"} }
330 tc << {:cmd=>"p CONST", :exp=>"top"}
331
332 BinTest_MrubyBinDebugger.test(src, tc)
333end
334=end
335
336assert('mruby-bin-debugger(print) Literal:Numeric') do
337 # ruby source
338 src = "foo = 'foo'\n"
339
340 # test case
341 tc = []
342 tc << {:cmd=>"p 100", :exp=>'$1 = 100'}
343 tc << {:cmd=>"p -0b100", :exp=>'$2 = -4'}
344 tc << {:cmd=>"p +0100", :exp=>'$3 = 64'}
345 tc << {:cmd=>"p 0x100", :exp=>'$4 = 256'}
346 tc << {:cmd=>"p 1_234", :exp=>'$5 = 1234'}
347 tc << {:cmd=>"p 0b1000_0000", :exp=>"$6 = #{0b1000_0000}"}
348 tc << {:cmd=>"p 0x1000_0000", :exp=>"$7 = #{0x1000_0000}"}
349
350 tc << {:cmd=>"p 3.14", :exp=>'$8 = 3.14'}
351 tc << {:cmd=>"p -12.3", :exp=>'$9 = -12.3'}
352 tc << {:cmd=>"p +12.000", :exp=>'$10 = 12'}
353 tc << {:cmd=>"p 1e4", :exp=>'$11 = 10000'}
354 tc << {:cmd=>"p -0.1e-2", :exp=>'$12 = -0.001'}
355
356 BinTest_MrubyBinDebugger.test(src, tc)
357end
358
359assert('mruby-bin-debugger(print) Literal:String') do
360 # ruby source
361 src = <<"SRC"
362foo = 'foo'
363bar = "bar"
364baz = "baz"
365SRC
366
367 # test case
368 tc = []
369 tc << {:cmd=>"s"}
370 tc << {:cmd=>"s"}
371
372 tc << {:cmd=>'p "str"', :exp=>'$1 = "str"'}
373 tc << {:cmd=>'p "s\tt\rr\n"', :exp=>'$2 = "s\\tt\\rr\\n"'}
374 tc << {:cmd=>'p "\C-a\C-z"', :exp=>'$3 = "\\x01\\x1a"'}
375 tc << {:cmd=>'p "#{foo+bar}"', :exp=>'$4 = "foobar"'}
376
377 tc << {:cmd=>'p \'str\'', :exp=>'$5 = "str"'}
378 tc << {:cmd=>'p \'s\\tt\\rr\\n\'', :exp=>'$6 = "s\\\\tt\\\\rr\\\\n"'}
379 tc << {:cmd=>'p \'\\C-a\\C-z\'', :exp=>'$7 = "\\\\C-a\\\\C-z"'}
380 tc << {:cmd=>'p \'#{foo+bar}\'', :exp=>'$8 = "\\#{foo+bar}"'}
381
382 tc << {:cmd=>'p %!str!', :exp=>'$9 = "str"'}
383 tc << {:cmd=>'p %!s\tt\rr\n!', :exp=>'$10 = "s\\tt\\rr\\n"'}
384 tc << {:cmd=>'p %!\C-a\C-z!', :exp=>'$11 = "\\x01\\x1a"'}
385 tc << {:cmd=>'p %!#{foo+bar}!', :exp=>'$12 = "foobar"'}
386
387 tc << {:cmd=>'p %Q!str!', :exp=>'$13 = "str"'}
388 tc << {:cmd=>'p %Q!s\tt\rr\n!', :exp=>'$14 = "s\\tt\\rr\\n"'}
389 tc << {:cmd=>'p %Q!\C-a\C-z!', :exp=>'$15 = "\\x01\\x1a"'}
390 tc << {:cmd=>'p %Q!#{foo+bar}!', :exp=>'$16 = "foobar"'}
391
392 tc << {:cmd=>'p %q!str!', :exp=>'$17 = "str"'}
393 tc << {:cmd=>'p %q!s\\tt\\rr\\n!', :exp=>'$18 = "s\\\\tt\\\\rr\\\\n"'}
394 tc << {:cmd=>'p %q!\\C-a\\C-z!', :exp=>'$19 = "\\\\C-a\\\\C-z"'}
395 tc << {:cmd=>'p %q!#{foo+bar}!', :exp=>'$20 = "\\#{foo+bar}"'}
396
397 BinTest_MrubyBinDebugger.test(src, tc)
398end
399
400assert('mruby-bin-debugger(print) Literal:Array') do
401 # ruby source
402 src = <<"SRC"
403foo = 'foo'
404bar = "bar"
405baz = "baz"
406SRC
407
408 # test case
409 tc = []
410 tc << {:cmd=>"s"}
411 tc << {:cmd=>"s"}
412
413 tc << {:cmd=>'p []', :exp=>'$1 = []'}
414 tc << {:cmd=>'p [ 5, 12, 8, 10, ]', :exp=>'$2 = [5, 12, 8, 10]'}
415 tc << {:cmd=>'p [1,2.5,"#{foo+bar}"]', :exp=>'$3 = [1, 2.5, "foobar"]'}
416 tc << {:cmd=>'p %w[3.14 A\ &\ B #{foo}]', :exp=>'$4 = ["3.14", "A & B", "\#{foo}"]'}
417 tc << {:cmd=>'p %W[3.14 A\ &\ B #{foo}]', :exp=>'$5 = ["3.14", "A & B", "foo"]'}
418
419 BinTest_MrubyBinDebugger.test(src, tc)
420end
421
422assert('mruby-bin-debugger(print) Literal:Hash') do
423 # ruby source
424 src = <<"SRC"
425foo = 'foo'
426bar = "bar"
427baz = "baz"
428SRC
429
430 # test case
431 tc = []
432 tc << {:cmd=>"s"}
433 tc << {:cmd=>"s"}
434
435 tc << {:cmd=>'p {}', :exp=>'$1 = {}'}
436 tc << {:cmd=>'p {"one"=>1,"two"=>2}', :exp=>'$2 = {"one"=>1, "two"=>2}'}
437 tc << {:cmd=>'p {:eins=>"1", :zwei=>"2", }', :exp=>'$3 = {:eins=>"1", :zwei=>"2"}'}
438 tc << {:cmd=>'p {uno:"one", dos: 2}', :exp=>'$4 = {:uno=>"one", :dos=>2}'}
439 tc << {:cmd=>'p {"one"=>1, :zwei=>2, tres:3}', :exp=>'$5 = {"one"=>1, :zwei=>2, :tres=>3}'}
440 tc << {:cmd=>'p {:foo=>"#{foo}",:bar=>"#{bar}"}', :exp=>'$6 = {:foo=>"foo", :bar=>"bar"}'}
441
442 BinTest_MrubyBinDebugger.test(src, tc)
443end
444
445assert('mruby-bin-debugger(print) Literal:Range') do
446 # ruby source
447 src = "foo = 'foo'\n"
448
449 # test case
450 tc = []
451 tc << {:cmd=>'p 1..10', :exp=>'$1 = 1..10'}
452 tc << {:cmd=>'p 1...10', :exp=>'$2 = 1...10'}
453 tc << {:cmd=>'p 100..10', :exp=>'$3 = 100..10'}
454 tc << {:cmd=>'p 1 ... 10', :exp=>'$4 = 1...10'}
455
456 tc << {:cmd=>'p "1" .. "9"', :exp=>'$5 = "1".."9"'}
457 tc << {:cmd=>'p "A" ... "Z"', :exp=>'$6 = "A"..."Z"'}
458
459 BinTest_MrubyBinDebugger.test(src, tc)
460end
461
462assert('mruby-bin-debugger(print) Literal:Symbol') do
463 # ruby source
464 src = <<"SRC"
465foo = 'foo'
466bar = "bar"
467baz = "baz"
468SRC
469
470 # test case
471 tc = []
472 tc << {:cmd=>"s"}
473 tc << {:cmd=>"s"}
474
475 tc << {:cmd=>'p :sym', :exp=>'$1 = :sym'}
476 tc << {:cmd=>'p :"sd"', :exp=>'$2 = :sd'}
477 tc << {:cmd=>"p :'ss'", :exp=>'$3 = :ss'}
478 tc << {:cmd=>'p :"123"', :exp=>'$4 = :"123"'}
479 tc << {:cmd=>'p :"#{foo} baz"', :exp=>'$5 = :"foo baz"'}
480 tc << {:cmd=>'p %s!symsym!', :exp=>'$6 = :symsym'}
481
482 BinTest_MrubyBinDebugger.test(src, tc)
483end
484
485assert('mruby-bin-debugger(print) Unary operation') do
486 # ruby source
487 src = "foo = 'foo'\n"
488
489 # test case
490 tc = []
491 tc << {:cmd=>'p +10', :exp=>'$1 = 10'}
492 tc << {:cmd=>'p -100', :exp=>'$2 = -100'}
493 tc << {:cmd=>'p !true', :exp=>'$3 = false'}
494 tc << {:cmd=>'p !false', :exp=>'$4 = true'}
495 tc << {:cmd=>'p !nil', :exp=>'$5 = true'}
496 tc << {:cmd=>'p !1', :exp=>'$6 = false'}
497
498 BinTest_MrubyBinDebugger.test(src, tc)
499end
500
501assert('mruby-bin-debugger(print) Binary operation') do
502 # ruby source
503 src = <<"SRC"
504CONST = 100
505a,b,c = 1, 5, 8
506foo,bar,baz = 'foo','bar','baz'
507ary = []
508SRC
509
510 # test case
511 tc = []
512 tc << {:cmd=>'s'}
513 tc << {:cmd=>'s'}
514 tc << {:cmd=>'s'}
515
516 tc << {:cmd=>'p a+1', :exp=>'$1 = 2'}
517 tc << {:cmd=>'p 2-b', :exp=>'$2 = -3'}
518 tc << {:cmd=>'p c * 3', :exp=>'$3 = 24'}
519 tc << {:cmd=>'p a/b', :exp=>'$4 = 0.2'}
520 tc << {:cmd=>'p c%b', :exp=>'$5 = 3'}
521 tc << {:cmd=>'p 2**10', :exp=>'$6 = 1024'}
522 tc << {:cmd=>'p ~3', :exp=>'$7 = -4'}
523
524 tc << {:cmd=>'p 1<<2', :exp=>'$8 = 4'}
525 tc << {:cmd=>'p 64>>5', :exp=>'$9 = 2'}
526
527 tc << {:cmd=>'p a|c', :exp=>'$10 = 9'}
528 tc << {:cmd=>'p a&b', :exp=>'$11 = 1'}
529 tc << {:cmd=>'p a^b', :exp=>'$12 = 4'}
530
531 tc << {:cmd=>'p a>b', :exp=>'$13 = false'}
532 tc << {:cmd=>'p a<b', :exp=>'$14 = true'}
533 tc << {:cmd=>'p b>=5', :exp=>'$15 = true'}
534 tc << {:cmd=>'p b<=5', :exp=>'$16 = true'}
535
536 tc << {:cmd=>'p "A"<=>"B"', :exp=>'$17 = -1'}
537 tc << {:cmd=>'p "A"=="B"', :exp=>'$18 = false'}
538 tc << {:cmd=>'p "A"==="B"', :exp=>'$19 = false'}
539 tc << {:cmd=>'p "A"!="B"', :exp=>'$20 = true'}
540
541 tc << {:cmd=>'p false || true', :exp=>'$21 = true'}
542 tc << {:cmd=>'p false && true', :exp=>'$22 = false'}
543
544 tc << {:cmd=>'p not nil', :exp=>'$23 = true'}
545 tc << {:cmd=>'p false or true', :exp=>'$24 = true'}
546 tc << {:cmd=>'p false and true', :exp=>'$25 = false'}
547
548 BinTest_MrubyBinDebugger.test(src, tc)
549end
550
551assert('mruby-bin-debugger(print) Ternary operation') do
552 # ruby source
553 src = <<"SRC"
554CONST = 100
555a,b,c = 1, 5, -10
556foo,bar,baz = 'foo','bar','baz'
557ary = []
558SRC
559
560 # test case
561 tc = []
562 tc << {:cmd=>'s'}
563 tc << {:cmd=>'s'}
564 tc << {:cmd=>'s'}
565
566 tc << {:cmd=>'p (a < b) ? a : b', :exp=>'$1 = 1'}
567 tc << {:cmd=>'p (a > b) ? a : b', :exp=>'$2 = 5'}
568 tc << {:cmd=>'p true ? "true" : "false"', :exp=>'$3 = "true"'}
569 tc << {:cmd=>'p false ? "true" : "false"', :exp=>'$4 = "false"'}
570 tc << {:cmd=>'p nil ? "true" : "false"', :exp=>'$5 = "false"'}
571
572 BinTest_MrubyBinDebugger.test(src, tc)
573end
574
575assert('mruby-bin-debugger(print) Substitution:simple') do
576 # ruby source
577 src = <<"SRC"
578CONST = 100
579a,b,c = 1, 5, -10
580foo,bar,baz = 'foo','bar','baz'
581ary = []
582SRC
583
584 # test case
585 tc = []
586 tc << {:cmd=>'s'}
587 tc << {:cmd=>'s'}
588 tc << {:cmd=>'s'}
589
590 tc << {:cmd=>'p a=2', :exp=>'$1 = 2'}
591 tc << {:cmd=>'p foo=[foo,bar,baz]', :exp=>'$2 = ["foo", "bar", "baz"]'}
592
593 tc << {:cmd=>'p undefined=-1', :exp=>'$3 = -1'}
594 tc << {:cmd=>'p "#{undefined}"', :exp=>'$4 = undefined method'}
595
596 BinTest_MrubyBinDebugger.test(src, tc)
597end
598
599assert('mruby-bin-debugger(print) Substitution:self') do
600 # ruby source
601 src = <<"SRC"
602CONST = 100
603a,b,c = 1, 5, -10
604foo,bar,baz = 'foo','bar','baz'
605ary = []
606SRC
607
608 # test case
609 tc = []
610 tc << {:cmd=>'s'}
611 tc << {:cmd=>'s'}
612 tc << {:cmd=>'s'}
613
614 tc << {:cmd=>'p a+=9', :exp=>'$1 = 10'}
615 tc << {:cmd=>'p b-=c', :exp=>'$2 = 15'}
616 tc << {:cmd=>'p bar*=2', :exp=>'$3 = "barbar"'}
617 tc << {:cmd=>'p a/=4', :exp=>'$4 = 2.5'}
618 tc << {:cmd=>'p c%=4', :exp=>'$5 = 2'}
619
620 tc << {:cmd=>'p b&=0b0101', :exp=>'$6 = 5'}
621 tc << {:cmd=>'p c|=0x10', :exp=>'$7 = 18'}
622
623 tc << {:cmd=>'p "#{a} #{b} #{c}"', :exp=>'$8 = "2.5 5 18"'}
624 tc << {:cmd=>'p "#{foo}#{bar}#{baz}"', :exp=>'$9 = "foobarbarbaz"'}
625
626 tc << {:cmd=>'p a,b,c=[10,20,30]',:exp=>'$10 = [10, 20, 30]'}
627 tc << {:cmd=>'p [a,b,c]', :exp=>'$11 = [10, 20, 30]'}
628 tc << {:cmd=>'p a,b=b,a', :exp=>'$12 = [20, 10]'}
629 tc << {:cmd=>'p [a,b]', :exp=>'$13 = [20, 10]'}
630
631 tc << {:cmd=>'p undefined=-1', :exp=>'$14 = -1'}
632 tc << {:cmd=>'p "#{undefined}"', :exp=>'$15 = undefined method'}
633
634 BinTest_MrubyBinDebugger.test(src, tc)
635end
636
637assert('mruby-bin-debugger(print) Substitution:multiple') do
638 # ruby source
639 src = <<"SRC"
640CONST = 100
641a,b,c = 1, 5, -10
642foo,bar,baz = 'foo','bar','baz'
643ary = []
644SRC
645
646 # test case
647 tc = []
648 tc << {:cmd=>'s'}
649 tc << {:cmd=>'s'}
650 tc << {:cmd=>'s'}
651
652 tc << {:cmd=>'p a,b=[10,20]', :exp=>'$1 = [10, 20]'}
653 tc << {:cmd=>'p [a,b,c]', :exp=>'$2 = [10, 20, -10]'}
654
655 tc << {:cmd=>'p foo,bar=["FOO","BAR","BAZ"]', :exp=>'$3 = ["FOO", "BAR", "BAZ"]'}
656 tc << {:cmd=>'p [foo,bar,baz]', :exp=>'$4 = ["FOO", "BAR", "baz"]'}
657
658 tc << {:cmd=>'p a,foo=foo,a', :exp=>'$5 = ["FOO", 10]'}
659 tc << {:cmd=>'p [a,foo]', :exp=>'$6 = ["FOO", 10]'}
660
661# tc << {:cmd=>'p a,*b=[123, 456, 789]'}
662# tc << {:cmd=>'p [a,b]', :exp=>'[123, [456, 789]]'}
663
664 BinTest_MrubyBinDebugger.test(src, tc)
665end
666
667assert('mruby-bin-debugger(print) Substitution:self') do
668 # ruby source
669 src = <<"SRC"
670CONST = 100
671a,b,c = 1, 5, -10
672foo,bar,baz = 'foo','bar','baz'
673ary = []
674SRC
675
676 # test case
677 tc = []
678 tc << {:cmd=>'s'}
679 tc << {:cmd=>'s'}
680 tc << {:cmd=>'s'}
681
682 tc << {:cmd=>'p a+=9', :exp=>'$1 = 10'}
683 tc << {:cmd=>'p b-=c', :exp=>'$2 = 15'}
684 tc << {:cmd=>'p bar*=2', :exp=>'$3 = "barbar"'}
685 tc << {:cmd=>'p a/=4', :exp=>'$4 = 2.5'}
686 tc << {:cmd=>'p c%=4', :exp=>'$5 = 2'}
687
688 tc << {:cmd=>'p b&=0b0101', :exp=>'$6 = 5'}
689 tc << {:cmd=>'p c|=0x10', :exp=>'$7 = 18'}
690
691 tc << {:cmd=>'p "#{a} #{b} #{c}"', :exp=>'$8 = "2.5 5 18"'}
692 tc << {:cmd=>'p "#{foo}#{bar}#{baz}"', :exp=>'$9 = "foobarbarbaz"'}
693
694 tc << {:cmd=>'p a,b,c=[10,20,30]',:exp=>'$10 = [10, 20, 30]'}
695 tc << {:cmd=>'p [a,b,c]', :exp=>'$11 = [10, 20, 30]'}
696 tc << {:cmd=>'p a,b=b,a', :exp=>'$12 = [20, 10]'}
697 tc << {:cmd=>'p [a,b]', :exp=>'$13 = [20, 10]'}
698
699 tc << {:cmd=>'p undefined=-1', :exp=>'$14 = -1'}
700 tc << {:cmd=>'p "#{undefined}"', :exp=>'$15 = undefined method'}
701
702 BinTest_MrubyBinDebugger.test(src, tc)
703end
Note: See TracBrowser for help on using the repository browser.