Fix crash when exiting TUI with gdb -tui
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.tui / tui-layout-asm.exp
CommitLineData
b2efe70c
AB
1# Copyright 2020 Free Software Foundation, Inc.
2
3# This program is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; either version 3 of the License, or
6# (at your option) any later version.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11# GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License
14# along with this program. If not, see <http://www.gnu.org/licenses/>.
15
16# Ensure that 'layout asm' before starting the inferior puts us in the
17# asm layout and displays the disassembly for main.
18
8c74a764 19tuiterm_env
b2efe70c
AB
20
21standard_testfile tui-layout.c
22
23if {[build_executable "failed to prepare" ${testfile} ${srcfile}] == -1} {
24 return -1
25}
26
27Term::clean_restart 24 80 $testfile
28if {![Term::prepare_for_tui]} {
29 unsupported "TUI not supported"
30}
31
32# This puts us into TUI mode, and should display the ASM window.
301b21e0 33Term::command_no_prompt_prefix "layout asm"
b2efe70c 34Term::check_box_contents "check asm box contents" 0 0 80 15 "<main>"
733d0a67
AB
35
36# Scroll the ASM window down using the down arrow key. In an ideal
37# world we'd like to use PageDown here, but currently our terminal
38# library doesn't support such advanced things.
39set testname "scroll to end of assembler"
40set down_count 0
41while (1) {
42 # Grab the second line, this is about to become the first line.
43 set line [Term::get_line 2]
44
45 # Except, if the second line is blank then we are at the end of
46 # the available asm output. Pressing down again _shouldn't_
47 # change the output, however, if GDB is working, and we press down
48 # then the screen won't change, so the call to Term::wait_for
49 # below will just timeout. So for now we avoid testing the edge
50 # case.
51 if {[regexp -- "^\\| +\\|$" $line]} {
52 # Second line is blank, we're at the end of the assembler.
53 pass $testname
54 break
55 }
56
57 # Send the down key to GDB.
58 send_gdb "\033\[B"
59 incr down_count
60 if {[Term::wait_for [string_to_regexp $line]] \
61 && [Term::get_line 1] == $line} {
62 # We scrolled successfully.
63 } else {
64 fail "$testname (scroll failed)"
65 Term::dump_screen
66 break
67 }
68
69 if { $down_count > 250 } {
70 # Maybe we should accept this as a pass in case a target
71 # really does have loads of assembler to scroll through.
72 fail "$testname (too much assembler)"
73 Term::dump_screen
74 break
75 }
76}
This page took 0.093003 seconds and 4 git commands to generate.