source: EcnlProtoTool/trunk/mruby-1.3.0/mrbgems/mruby-bin-debugger/bintest/print.rb@ 331

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

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

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