`GDBProcess` refatored to have console interpreter on STDIN/STDOUT
...and spawn an extra MI2 interpreter on extra-allocated PTY. This way
we'll get command completion, command editing and so on for free.
For details, see Pedro Alves's explanation:
https://sourceware.org/ml/gdb/2017-01/msg00039.html
"{ Package: 'jv:libgdbs/tests' }"
"{ NameSpace: Smalltalk }"
GDBDebuggerTestCase subclass:#GDBDebuggerTestsR
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
category:'GDB-Core-Tests'
!
!GDBDebuggerTestsR class methodsFor:'documentation'!
documentation
"
Tests for GDBDebugger (using real test programs)
[author:]
Jan Vrany <jan.vrany@fit.cvut.cz>
[instance variables:]
[class variables:]
[see also:]
"
! !
!GDBDebuggerTestsR class methodsFor:'accessing'!
resources
^ Array with: GDBDebuggeesResource
"Created: / 28-02-2015 / 00:45:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!GDBDebuggerTestsR methodsFor:'tests - basic'!
test_02
| inferior1 thread1 frame1 frame2 |
debugger := GDBDebugger new.
self assert: debugger isConnected.
debugger executable: GDBDebuggeesResource current binaryFactorial.
debugger send: 'b factorial'.
debugger send: 'r' andWaitFor: GDBStoppedEvent.
self assert: debugger inferiors size == 1.
inferior1 := debugger inferiors anElement.
self assert: inferior1 threads size == 1.
thread1 := inferior1 threads anElement.
self assert: thread1 stack size == 2.
frame1 := thread1 stack first.
frame2 := thread1 stack second.
self assert: frame1 variables size == 1.
self assert: frame1 variables first name = 'i'.
self assert: frame1 variables first value = '5'.
self assert: frame2 variables size == 4.
self assert: frame2 variables first name = 'argc'.
self assert: frame2 variables second name = 'argv'.
self assert: frame2 variables third name = 'i'.
self assert: frame2 variables fourth name = 'f'.
debugger send: 'd'.
debugger send: 'c' andWaitFor: GDBThreadGroupExitedEvent.
self assert: thread1 isDead.
debugger send: 'quit' andWait: false.
"Created: / 28-02-2015 / 00:55:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 01-06-2017 / 21:44:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
test_03
| inferior1 thread1 |
debugger := GDBDebugger new.
self assert: debugger isConnected.
debugger executable: GDBDebuggeesResource current binaryPressAnyKey.
debugger send: (GDBMI_exec_run new).
self assert: debugger inferiors size == 1.
inferior1 := debugger inferiors anElement.
self assert: inferior1 threads size == 1.
thread1 := inferior1 threads anElement.
self assert: thread1 isRunning.
debugger send: (GDBMI_exec_interrupt new arguments: #('--all')) andWaitFor: GDBStoppedEvent.
self assert: thread1 isRunning not.
debugger inferiorStdin nextPutLine:'X'.
debugger send: 'c' andWaitFor: GDBThreadGroupExitedEvent.
debugger send: 'quit' andWait: false
"Created: / 08-03-2015 / 07:42:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 01-06-2017 / 22:30:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
test_basic_01
| timeouted |
debugger := GDBDebugger new.
self assert: debugger isConnected.
timeouted := ([
debugger send: (GDBMI_gdb_exit new).
[ debugger isConnected ] whileTrue:[
Delay waitForMilliseconds: 200.
].
1.
] valueWithTimeout: 3 seconds) isNil.
self assert: timeouted not.
self assert: debugger isConnected not.
"Created: / 24-06-2014 / 09:06:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 31-05-2017 / 22:42:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!GDBDebuggerTestsR class methodsFor:'documentation'!
version_HG
^ '$Changeset: <not expanded> $'
! !