tests/GDBDebuggerTestsR.st
changeset 106 12c96f17fc53
parent 104 4add55336dfe
child 108 f34505ec6a7f
--- a/tests/GDBDebuggerTestsR.st	Sun Feb 04 21:18:15 2018 +0000
+++ b/tests/GDBDebuggerTestsR.st	Sun Feb 04 23:37:35 2018 +0000
@@ -77,7 +77,7 @@
 !GDBDebuggerTestsR methodsFor:'tests - basic'!
 
 test_02
-    | inferior1 thread1 frame1 frame2 |
+    | inferior1 thread1 frame1 frame2  seqNo1 seqNo2 |
 
     debugger := GDBDebugger new.
     self assert: debugger isConnected.
@@ -115,15 +115,19 @@
     self assert: frame2 variables third name = 'i'.
     self assert: frame2 variables fourth name = 'f'.
 
+    seqNo1 := debugger currentInferiorStateSequnceNumber.
+
     debugger send: 'd'.
     debugger send: 'c' andWaitFor: GDBThreadGroupExitedEvent.
 
     self assert: thread1 isDead.
+    seqNo2 := debugger currentInferiorStateSequnceNumber.
+    self assert: seqNo1 ~~ seqNo2.
 
     debugger send: 'quit' andWait: false.
 
     "Created: / 28-02-2015 / 00:55:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 12-07-2017 / 13:55:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-02-2018 / 22:50:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 19-01-2018 / 09:23:24 / jv"
 !
 
@@ -374,6 +378,30 @@
     "Modified: / 01-02-2018 / 21:04:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+test_stack_02
+    | stack1 stack2 |
+
+    debugger := GDBDebugger new.
+    self assert: debugger isConnected.
+    debugger executable: GDBDebuggeesResource current binaryVariables.
+    debugger send: 'b set_data_i'.
+    debugger send: 'r' andWaitFor: GDBStoppedEvent.
+
+    stack1 := debugger selectedInferior threads first stack.
+    debugger send: 'c' andWaitFor: GDBStoppedEvent.
+    stack2 := debugger selectedInferior threads first stack.
+    self assert: stack1 size == 2.
+    self assert: stack2 size == 2.
+    self assert: stack1 first ~~ stack2 first.
+
+    debugger send: 'd'.
+    debugger send: 'c' andWaitFor: GDBThreadGroupExitedEvent.
+    debugger send: 'quit' andWait: false.
+
+    "Created: / 12-02-2018 / 21:46:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-02-2018 / 09:16:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 test_variables_01
     | variables d |
 
@@ -466,6 +494,7 @@
 
     debugger send: 'b set_data_i'.
     debugger send: 'r' andWaitFor: GDBStoppedEvent.
+    debugger send: 'del'.
 
     self assert: debugger selectedInferior threads first stack second func = 'main'.
     variables := debugger selectedInferior threads first stack second variables.
@@ -497,6 +526,92 @@
     debugger send: 'quit' andWait: false.
 
     "Created: / 01-02-2018 / 21:57:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-02-2018 / 22:36:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_variables_04
+    "
+    Tests that the variable object get's invalid after
+    inferior terminated.
+    " 
+    | variables d d_as_i_a events seqNo1 seqNo2 |
+
+    debugger := GDBDebugger new.
+    events := OrderedCollection new.
+    debugger announcer when: GDBEvent send: #add: to: events.
+
+    debugger executable: GDBDebuggeesResource current binaryVariables.
+
+
+    debugger send: 'b set_data_i'.
+    debugger send: 'r' andWaitFor: GDBStoppedEvent.
+    seqNo1 := debugger currentInferiorStateSequnceNumber.
+
+    self assert: debugger selectedInferior threads first stack second func = 'main'.
+    variables := debugger selectedInferior threads first stack second variables.
+    d := variables third varobj.
+    self assert: d expression = 'd'.
+    self assert: d isValid.
+    d_as_i_a := d children third children first children first.
+    self assert: d_as_i_a expression = 'a'.
+    self assert: d_as_i_a isValid.
+
+    debugger send: 'dis 1'. 
+    debugger send: 'c' andWaitFor: GDBThreadGroupExitedEvent.
+    seqNo2 := debugger currentInferiorStateSequnceNumber.
+
+    self assert: seqNo1 ~~ seqNo2.
+    self assert: d isValid not.
+    self assert: d value = '<invalid>'.
+    self assert: d children isEmpty.
+    self assert: d_as_i_a isValid not.    
+    self assert: d_as_i_a value = '<invalid>'.
+    self assert: debugger isConnected.
+
+    debugger send: 'quit' andWait: false.
+
+    "Created: / 04-02-2018 / 22:04:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 13-02-2018 / 10:15:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_variables_05
+    "
+    Tests that the variable object get's invalid after
+    frame returned
+    " 
+    | variables d |
+
+    debugger := GDBDebugger new.
+    debugger executable: GDBDebuggeesResource current binaryVariables.
+
+    debugger send: 'b set_data_i'.
+    debugger send: 'r' andWaitFor: GDBStoppedEvent.
+
+    self assert: debugger selectedInferior threads first stack first func = 'set_data_i'.
+    variables := debugger selectedInferior threads first stack first variables.
+    d := variables second varobj.
+    self assert: d expression = 'i'.
+    self assert: d isValid.
+    self assert: d inScope.
+
+    debugger send: 'finish' andWaitFor: GDBStoppedEvent.
+
+    self assert: d isValid.
+    self assert: d inScope not.
+    self assert: d hasChanged.
+    self assert: d value = '<out-of-scope>'.
+
+    debugger send: 'continue' andWaitFor: GDBStoppedEvent.  
+
+    self assert: d isValid.
+    self assert: d inScope.
+    self assert: d hasChanged.
+    self assert: d value = '24'.
+    self assert: debugger isConnected.
+
+    debugger send: 'quit' andWait: false.
+
+    "Created: / 12-02-2018 / 21:34:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GDBDebuggerTestsR class methodsFor:'documentation'!