blob: ee693e269cbe357e167d23faddb3d00e7d7c3e4d [file] [log] [blame]
# 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