# Copyright (C) 1999, 2001 Red Hat, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Please email any bugs, comments, and/or additions to this file to: # bug-gdb@prep.ai.mit.edu # This file was written by Martin Hunt (hunt@cygnus.com) # same as srcwin.test, except test debugging executables # when source files are missing. # Read in the standard defs file if {![gdbtk_read_defs]} { break } global objdir srcdir ##### ##### # # # SECTION 1: Mode Tests # # # ##### ##### # Load the test executable set program [file join $objdir list] if {[catch {gdbtk_test_file $program} t]} { # This isn't a test case, since if this fails, we're hosed. gdbtk_test_error "loading \"$program\": $t" } set srcwin [ManagedWin::open SrcWin] set stw [$srcwin test_get twin] set twin [$stw test_get twin] set statbar [$srcwin test_get _statbar] # get things started gdb_cmd "break main" gdbtk_test_run # Test: srcwin2-1.1 # Desc: Check for something in source window gdbtk_test srcwin2-1.1 "source window has contents" { set r 0 set file1(source) [$twin get 1.0 end] if {$file1(source) == ""} {set r -1} if {[$statbar.mode get] != "ASSEMBLY"} {set r -2} set r } {0} # Test: srcwin2-1.2 # Desc: source->assembly mode change gdbtk_test srcwin2-1.2 "source->assembly mode change" { $srcwin mode "" ASSEMBLY set twin [$stw test_get twin] set file1(assembly) [$twin get 1.0 end] # source == assembly because for there is no source string compare $file1(source) $file1(assembly) } {0} # Test: srcwin2-1.3 # Desc: assembly->mixed mode change gdbtk_test srcwin2-1.3 "assembly->mixed mode change" { set r 0 $srcwin mode "" MIXED set twin [$stw test_get twin] set file1(mixed) [$twin get 1.0 end] # mixed != assembly because the lines with source should # be noted, even if source in unavailable. This behaviour is # different for different debug formats, so we accept either. if {$file1(mixed) == ""} {set r -1} if {[$statbar.mode get] != "MIXED"} {set r -2} set r } {0} # Test: srcwin2-1.4 # Desc: mixed->src+asm mode change gdbtk_test srcwin2-1.4 "mixed->src+asm mode change" { set r 0 # mode change may fail if fallover to ASSEMBLY fails if {[catch {$srcwin mode "" SRC+ASM}]} { set r -5 } set twin [$stw test_get twin] if {[$twin get 1.0 end] != $file1(assembly)} {set r -1} if {[$statbar.mode get] != "ASSEMBLY"} {set r -2} set r } {0} # Test: srcwin2-1.5 # Desc: src+asm->source mode change gdbtk_test srcwin2-1.5 "src+asm->source mode change" { set r 0 $srcwin mode "" SOURCE set twin [$stw test_get twin] if {[$stw test_get bwin] != ""} {set r -2} if {[$twin get 1.0 end] != $file1(assembly)} {set r -1} if {[$statbar.mode get] != "ASSEMBLY"} {set r -3} set r } {0} # Test: srcwin2-1.6 # Desc: source->mixed mode change gdbtk_test srcwin2-1.6 "source->mixed mode change" { set r 0 $srcwin mode "" MIXED set twin [$stw test_get twin] if {[$twin get 1.0 end] != $file1(mixed)} {set r -1} if {[$statbar.mode get] != "MIXED"} {set r -2} set r } {0} # Test: srcwin2-1.7 # Desc: mixed->source mode change gdbtk_test srcwin2-1.7 "mixed->source mode change" { set r 0 $srcwin mode "" SOURCE set twin [$stw test_get twin] if {[$twin get 1.0 end] != $file1(source)} {set r -1} if {[$statbar.mode get] != "ASSEMBLY"} {set r -2} set r } {0} # Test: srcwin2-1.8 # Desc: source->src+asm mode change gdbtk_test srcwin2-1.8 "source->src+asm mode change" { set r 0 # mode change may fail if fallover to ASSEMBLY fails if {[catch {$srcwin mode "" SRC+ASM}]} { set r -5 } set twin [$stw test_get twin] set bwin [$stw test_get bwin] if {[$twin get 1.0 end] != $file1(assembly)} {set r -1} if {$bwin != ""} {set r -2} if {[$statbar.mode get] != "ASSEMBLY"} {set r -3} set r } {0} # Test: srcwin2-1.9 # Desc: src+asm->assembly mode change gdbtk_test srcwin2-1.9 "src+asm->assembly mode change" { set r 0 $srcwin mode "" ASSEMBLY set twin [$stw test_get twin] if {[$twin get 1.0 end] != $file1(assembly)} {set r -1} if {[$statbar.mode get] != "ASSEMBLY"} {set r -2} set r } {0} # Test: srcwin2-1.10 # Desc: assembly->src+asm mode change gdbtk_test srcwin2-1.10 "assembly->src+asm mode change" { set r 0 # mode change may fail if fallover to ASSEMBLY fails if {[catch {$srcwin mode "" SRC+ASM}]} { set r -5 } set twin [$stw test_get twin] set bwin [$stw test_get bwin] if {[$twin get 1.0 end] != $file1(assembly)} {set r -1} if {$bwin != ""} {set r -2} if {[$statbar.mode get] != "ASSEMBLY"} {set r -3} set r } {0} # Test: srcwin2-1.11 # Desc: src+asm->mixed mode change gdbtk_test srcwin2-1.11 "src+asm->mixed mode change" { set r 0 $srcwin mode "" MIXED set twin [$stw test_get twin] if {[$twin get 1.0 end] != $file1(mixed)} {set r -1} if {[$statbar.mode get] != "MIXED"} {set r -2} set r } {0} # Test: srcwin2-1.12 # Desc: mixed->assembly mode change gdbtk_test srcwin2-1.12 "mixed->assembly mode change" { set r 0 $srcwin mode "" ASSEMBLY set twin [$stw test_get twin] if {[$twin get 1.0 end] != $file1(assembly)} {set r -1} if {[$statbar.mode get] != "ASSEMBLY"} {set r -2} set r } {0} # Test: srcwin2-1.13 # Desc: assembly->source mode change gdbtk_test srcwin2-1.13 "assembly->source mode change" { set r 0 $srcwin mode "" SOURCE set twin [$stw test_get twin] if {[$twin get 1.0 end] != $file1(source)} {set r -1} if {[$statbar.mode get] != "ASSEMBLY"} {set r -2} set r } {0} ##### ##### # # # SECTION 2: Basic Operations # # # ##### ##### # Test: srcwin2-2.1 # Desc: check contents of filename combobox gdbtk_test srcwin2-2.1 "check contents of filename combobox" { set names [$statbar.name list get 0 end] set r 0 foreach f {list0.c list1.c} { if {[lsearch $names $f] != -1} { incr r } } set r } {2} # Test: srcwin2-2.2 # Desc: check contents of function combobox gdbtk_test srcwin2-2.2 "check contents of function combobox" { set names [$statbar.func list get 0 end] set r 0 foreach f {main foo unused} { if {[lsearch $names $f] != -1} { incr r } } set r } {3} # Test: srcwin2-2.3 # Desc: goto filename gdbtk_test srcwin2-2.3 "goto filename" { set func [$srcwin test_get _name 1] $func "" list1.c set twin [$stw test_get twin] set file2(source) [$twin get 1.0 end] expr {![string compare $file1(source) $file2(source)]} } {0} # Test: srcwin2-2.4 # Desc: check contents of function combobox gdbtk_test srcwin2-2.4 "check contents of function combobox" { set names [$statbar.func list get 0 end] set r 0 foreach f {bar long_line oof unused} { if {[lsearch $names $f] != -1} { incr r } } set r } {4} # Test: srcwin2-2.5 # Desc: function combobox entry field should be empty after switching to a new file gdbtk_test srcwin2-2.5 "function combobox entry field should be empty" { set names [$statbar.func get] string length $names } {0} # Test: srcwin2-2.6 # Desc: goto function gdbtk_test srcwin2-2.6 "goto function bar" { $srcwin goto_func "" bar set r 0 # now get a dump of all tags and check that only one line is # marked BROWSE_TAG and no lines are STACK_TAG or PC_TAG. # We know that list1.c should have BROWSE_TAG set at index 10.2 # for function "bar". If list1.c is changed or the layout of the source # window is changed, this must be updated. if {![catch {set z [$twin dump -tag 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "BROWSE_TAG"} { if {$i == "10.2"} { incr r } else { incr r 5 } } if {$v == "STACK_TAG"} { incr r 10} if {$v == "PC_TAG"} { incr r 100} } } } else { set r -1 } if {$r == 1} { # things are OK so far, so just verify the function name is displayed # in the combobox entry field. set names [$statbar.func get] if {[string compare $names "bar"]} {set r -2} } set r } {1} # Test: srcwin2-2.7 # Desc: goto function "oof". This tests that the correct line is highlighted # with BROWSE_TAG and no other lines are highlighted. It also checks that # the combobox has the correct function name in it. Finally, list1.c # has an extremely long line, line 32, that breaks some functions. We verify # that the GDBtk has the correct line number. gdbtk_test srcwin2-2.7 "goto function oof" { $srcwin goto_func "" oof set r 0 # now get a dump of all tags and check that only one line is # marked BROWSE_TAG and no lines are STACK_TAG or PC_TAG. # We know that list1.c should have BROWSE_TAG set at index 38.2 # for function "oof". If list1.c is changed or the layout of the source # window is changed, this must be updated. if {![catch {set z [$twin dump -tag 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "BROWSE_TAG"} { if {$i == "38.2"} { set line_number [$twin get "$i wordstart" "$i wordend"] if {$line_number == "38"} { incr r } else { incr r -100 } } else { incr r 5 } } if {$v == "STACK_TAG"} {incr r 10} if {$v == "PC_TAG"} {incr r 100} } } } else { set r -1 } if {$r == 1} { # things are OK so far, so just verify the function name is displayed # in the combobox entry field. set names [$statbar.func get] if {[string compare $names "oof"]} {set r -2} } set r } {1} # Test: srcwin2-2.8 # Desc: This test issues a next command while browsing list1.c. # It should display list0.c and highlight the correct line. gdbtk_test srcwin2-2.8 "step while browsing" { gdb_immediate "next" 1 set r 0 set name [$statbar.name get] set func [$statbar.func get] # check contents of name and function comboboxes if {$name != "list0.c"} {set r -1} if {$func != "main"} {set r -2} # check that correct file is displayed set twin [$stw test_get twin] set a [$twin get 1.0 end] if {[string compare $file1(source) $a]} {set r -3} # check for PC_TAG if {$r == 0} { if {![catch {set z [$twin dump -tag 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "PC_TAG"} { incr r } if {$v == "STACK_TAG"} {incr r 10} if {$v == "BROWSE_TAG"} {incr r 100} } } } else { set r -4 } } set r } {1} # Test: srcwin2-2.11 # Desc: This test issues a break and a continue gdbtk_test srcwin2-2.11 "set BP and continue" { gdb_immediate "break oof" 1 gdb_immediate "continue" 1 set r 0 set name [$statbar.name get] set func [$statbar.func get] # check contents of name and function comboboxes if {$name != "list1.c"} {set r -1} if {$func != "oof"} {set r -2} # check that the correct file is displayed # we must clear the breakpoint first so it doesn't mess up the # comparison... gdb_immediate "clear oof" 1 set twin [$stw test_get twin] set a [$twin get 1.0 end] if {[string compare $file2(source) $a]} {set r -3} # check for PC_TAG on correct line if {$r == 0} { if {![catch {set z [$twin dump -tag 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "PC_TAG"} { if {$i == "38.2"} { incr r } else { incr r 5 } } if {$v == "STACK_TAG"} {incr r 10} if {$v == "BROWSE_TAG"} {incr r 100} } } } else { set r -4 } } set r } {1} ##### ##### # # # SECTION 3: Stack Operations # # # ##### ##### # Test: srcwin2-3.1 # Desc: This tests "stack up" gdbtk_test srcwin2-3.1 "stack up (1)" { $srcwin stack up set r 0 set name [$statbar.name get] set func [$statbar.func get] # check contents of name and function comboboxes if {$name != "list1.c"} {set r -1} if {$func != "long_line"} {set r -2} # check that the correct file is displayed set twin [$stw test_get twin] set a [$twin get 1.0 end] if {[string compare $file2(source) $a]} {set r -3} # check for PC_TAG and STACK_TAG on correct lines if {$r == 0} { if {![catch {set z [$twin dump -tag 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "PC_TAG"} { if {$i == "38.2"} { incr r } else { incr r 5 } } if {$v == "STACK_TAG"} { if {$i == "26.2"} { incr r } else { incr r 10 } } if {$v == "BROWSE_TAG"} {incr r 100} } } } else { set r -4 } } set r } {2} # Test: srcwin2-3.2 # Desc: Another "stack up" test gdbtk_test srcwin2-3.2 "stack up (2)" { $srcwin stack up set r 0 set name [$statbar.name get] set func [$statbar.func get] # check contents of name and function comboboxes if {$name != "list1.c"} {set r -1} if {$func != "bar"} {set r -2} # check that the correct file is displayed set twin [$stw test_get twin] set a [$twin get 1.0 end] if {[string compare $file2(source) $a]} {set r -3} # check for PC_TAG and STACK_TAG on correct lines if {$r == 0} { if {![catch {set z [$twin dump -tag 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "PC_TAG"} { if {$i == "38.2"} { incr r } else { incr r 5 } } if {$v == "STACK_TAG"} { if {$i == "12.2"} { incr r } else { incr r 10 } } if {$v == "BROWSE_TAG"} {incr r 100} } } } else { set r -4 } } set r } {2} # Test: srcwin2-3.3 # Desc: Another "stack up" test gdbtk_test srcwin2-3.3 "stack up (3)" { $srcwin stack up set r 0 set name [$statbar.name get] set func [$statbar.func get] # check contents of name and function comboboxes if {$name != "list0.h"} {set r -1} if {$func != "foo"} {set r -2} # check that the correct file is displayed set twin [$stw test_get twin] set file3(source) [$twin get 1.0 end] if {![string compare $file2(source) $file3(source)]} {set r -3} # check for PC_TAG and STACK_TAG on correct lines if {$r == 0} { if {![catch {set z [$twin dump -tag 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "STACK_TAG"} { if {$i == "9.2"} { incr r } else { incr r 5 } } if {$v == "PC_TAG"} {incr r 10} if {$v == "BROWSE_TAG"} {incr r 100} } } } else { set r -4 } } set r } {1} # Test: srcwin2-3.4 # Desc: Another "stack up" test gdbtk_test srcwin2-3.4 "stack up (4)" { $srcwin stack up set r 0 set name [$statbar.name get] set func [$statbar.func get] # check contents of name and function comboboxes if {$name != "list0.c"} {set r -1} if {$func != "main"} {set r -2} # check that the correct file is displayed set twin [$stw test_get twin] set a [$twin get 1.0 end] if {[string compare $file1(source) $a]} {set r -3} # check for STACK_TAG if {$r == 0} { if {![catch {set z [$twin dump -tag 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "STACK_TAG"} { incr r } if {$v == "PC_TAG"} {incr r 10} if {$v == "BROWSE_TAG"} {incr r 100} } } } else { set r -4 } } set r } {1} # Disabled for now because there are different correct results. # Test should be rewritten to include those. # Test: srcwin2-3.5 # Desc: "stack up" when we are at the top #gdbtk_test srcwin2-3.5 "stack up when at the top" { # $srcwin stack up # set r 0 # set name [$statbar.name get] # set func [$statbar.func get] # check contents of name and function comboboxes # if {$name != "list0.c"} {set r -1} # if {$func != "main"} {set r -2} # check that the correct file is displayed # set twin [$stw test_get twin] # set a [$twin get 1.0 end] # if {[string compare $file1(source) $a]} {set r -3} # check for STACK_TAG # if {$r == 0} { # if {![catch {set z [$twin dump -tag 1.0 end]}]} { # foreach {k v i} $z { # if {$k == "tagon"} { # if {$v == "STACK_TAG"} { # incr r # } # if {$v == "PC_TAG"} {incr r 10} # if {$v == "BROWSE_TAG"} {incr r 100} # } # } # } else { # set r -4 # } # } # set r #} {1} # Test: srcwin2-3.6 # Desc: "stack down" test gdbtk_test srcwin2-3.6 "stack down" { $srcwin stack down set r 0 set name [$statbar.name get] set func [$statbar.func get] # check contents of name and function comboboxes if {$name != "list0.h"} {set r -1} if {$func != "foo"} {set r -2} # check that the correct file is displayed set twin [$stw test_get twin] set a [$twin get 1.0 end] if {![string compare $file2(source) $a]} {set r -3} # check for PC_TAG and STACK_TAG on correct lines if {$r == 0} { if {![catch {set z [$twin dump -tag 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "STACK_TAG"} { if {$i == "9.2"} { incr r } else { incr r 5 } } if {$v == "PC_TAG"} {incr r 10} if {$v == "BROWSE_TAG"} {incr r 100} } } } else { set r -4 } } set r } {1} # Test: srcwin2-3.7 # Desc: "stack bottom" test gdbtk_test srcwin2-3.7 "stack bottom" { $srcwin stack bottom set r 0 set name [$statbar.name get] set func [$statbar.func get] # check contents of name and function comboboxes if {$name != "list1.c"} {set r -1} if {$func != "oof"} {set r -2} # check that the correct file is displayed set twin [$stw test_get twin] set a [$twin get 1.0 end] if {[string compare $file2(source) $a]} {set r -3} # check for PC_TAG on correct line if {$r == 0} { if {![catch {set z [$twin dump -tag 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "PC_TAG"} { if {$i == "38.2"} { incr r } else { incr r 5 } } if {$v == "STACK_TAG"} {incr r 10} if {$v == "BROWSE_TAG"} {incr r 100} } } } else { set r -4 } } set r } {1} # Test: srcwin2-3.8 # Desc: "stack down" when at bottom gdbtk_test srcwin2-3.8 "stack down when at bottom" { $srcwin stack down set r 0 set name [$statbar.name get] set func [$statbar.func get] # check contents of name and function comboboxes if {$name != "list1.c"} {set r -1} if {$func != "oof"} {set r -2} # check that the correct file is displayed set twin [$stw test_get twin] set a [$twin get 1.0 end] if {[string compare $file2(source) $a]} {set r -3} # check for PC_TAG on correct line if {$r == 0} { if {![catch {set z [$twin dump -tag 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "PC_TAG"} { if {$i == "38.2"} { incr r } else { incr r 5 } } if {$v == "STACK_TAG"} {incr r 10} if {$v == "BROWSE_TAG"} {incr r 100} } } } else { set r -4 } } set r } {1} # 4.1 bp, multiple, balloon, etc # Test: srcwin2-4.1 # Desc: Set BP in another file. Tests bp and cache functions gdbtk_test srcwin2-4.1 "set BP in another file" { gdb_immediate "break foo" 1 $srcwin goto_func "" foo set r 0 set name [$statbar.name get] set func [$statbar.func get] # check contents of name and function comboboxes if {$name != "list0.h"} {set r -1} if {$func != "foo"} {set r -2} set twin [$stw test_get twin] # check for BROWSE_TAG and BP image on correct line if {$r == 0} { if {![catch {set z [$twin dump 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "BROWSE_TAG"} { if {$i == "9.2"} { incr r } else { incr r 5 } } if {$v == "STACK_TAG"} {incr r 10} if {$v == "PC_TAG"} {incr r 100} } elseif {$k == "image"} { if {$i == "9.0"} { incr r } else { set r -200 } } } } else { set r -4 } } if {$r == 2} { # clear BP and compare with previous contents. This should succeed, gdb_immediate "clear foo" 1 set a [$twin get 1.0 end] if {[string compare $file3(source) $a]} {set r -3} } set r } {2} # Test: srcwin2-4.2 # Desc: Test temporary BP gdbtk_test srcwin2-4.2 "temporary BP" { set r 0 if {[catch {gdb_immediate "tbreak foo" 1} msg]} { set r -500 } set name [$statbar.name get] set func [$statbar.func get] # check contents of name and function comboboxes if {$name != "list0.h"} {set r -1} if {$func != "foo"} {set r -2} set twin [$stw test_get twin] # check for BROWSE_TAG and BP image on correct line if {$r == 0} { if {![catch {set z [$twin dump 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "BROWSE_TAG"} { if {$i == "9.2"} { incr r } else { incr r 5 } } if {$v == "STACK_TAG"} {incr r 10} if {$v == "PC_TAG"} {incr r 100} } elseif {$k == "image"} { if {$i == "9.0"} { incr r } else { set r -200 } } } } else { set r -4 } } gdb_immediate "continue" 1 # now check for PC_TAG and no image if {$r == 2} { if {![catch {set z [$twin dump 1.0 end]}]} { foreach {k v i} $z { if {$k == "tagon"} { if {$v == "PC_TAG"} { if {$i == "9.2"} { incr r } else { incr r 5 } } if {$v == "STACK_TAG"} {incr r 10} if {$v == "BROWSE_TAG"} {incr r 100} } elseif {$k == "image"} { set r -200 } } } else { set r -4 } } set r } {3} gdbtk_test_done