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