19ce333ca9eb1908ea1e01cf377d2cf4d11e14b3
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.tui / tui-layout-asm.exp
1 # Copyright 2020-2021 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
19 tuiterm_env
20
21 standard_testfile tui-layout.c
22
23 if {[build_executable "failed to prepare" ${testfile} ${srcfile}] == -1} {
24 return -1
25 }
26
27 Term::clean_restart 24 80 $testfile
28 if {![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.
34 Term::command_no_prompt_prefix "layout asm"
35 Term::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.
40 set testname "scroll to end of assembler"
41 set down_count 0
42 while (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 set re_line [string_to_regexp $line]
62 # Ignore whitespace mismatches.
63 regsub -all {\s+} $re_line {\s+} re_line
64 if {[Term::wait_for $re_line] \
65 && [regexp $re_line [Term::get_line 1]]} {
66 # We scrolled successfully.
67 } else {
68 fail "$testname (scroll failed)"
69 Term::dump_screen
70 break
71 }
72
73 if { $down_count > 250 } {
74 # Maybe we should accept this as a pass in case a target
75 # really does have loads of assembler to scroll through.
76 fail "$testname (too much assembler)"
77 Term::dump_screen
78 break
79 }
80 }
This page took 0.030674 seconds and 3 git commands to generate.