xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/testsuite/gdb.tui/tui-layout-asm.exp (revision 901e7e84758515fbf39dfc064cb0b45ab146d8b0)
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
19tuiterm_env
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    return
31}
32
33# This puts us into TUI mode, and should display the ASM window.
34Term::command_no_prompt_prefix "layout asm"
35Term::check_box_contents "check asm box contents" 0 0 80 15 "<main>"
36
37# Scroll the ASM window down using the down arrow key.  In an ideal
38# world we'd like to use PageDown here, but currently our terminal
39# library doesn't support such advanced things.
40set testname "scroll to end of assembler"
41set down_count 0
42while (1) {
43    # Grab the second line, this is about to become the first line.
44    set line [Term::get_line 2]
45
46    # Except, if the second line is blank then we are at the end of
47    # the available asm output.  Pressing down again _shouldn't_
48    # change the output, however, if GDB is working, and we press down
49    # then the screen won't change, so the call to Term::wait_for
50    # below will just timeout.  So for now we avoid testing the edge
51    # case.
52    if {[regexp -- "^\\| +\\|$" $line]} {
53	# Second line is blank, we're at the end of the assembler.
54	pass $testname
55	break
56    }
57
58    # Send the down key to GDB.
59    send_gdb "\033\[B"
60    incr down_count
61    if {[Term::wait_for [string_to_regexp $line]] \
62	    && [Term::get_line 1] == $line} {
63	# We scrolled successfully.
64    } else {
65	fail "$testname (scroll failed)"
66	Term::dump_screen
67	break
68    }
69
70    if { $down_count > 250 } {
71	# Maybe we should accept this as a pass in case a target
72	# really does have loads of assembler to scroll through.
73	fail "$testname (too much assembler)"
74	Term::dump_screen
75	break
76    }
77}
78