1 # Copyright 2016 Free Software Foundation, Inc.
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.
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.
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/>.
18 set compile_options "debug"
19 if {[build_executable $testfile.exp $testfile ${srcfile} ${compile_options}] == -1} {
20 untested "failed to compile"
24 # Ensure no output has been sent. Use MESSAGE as test message.
26 proc ensure_no_output {message} {
29 # Run a command and use an anchor to make sure no output appears
30 # before the command's expected output.
31 gdb_test "print 999" "^print 999\r\n\\\$$decimal = 999" $message
34 # Run a few execution-related commands on CON1, and ensure the proper
35 # output, or none, if appropriate, is sent to CON2. CON1_NAME and
36 # CON2_NAME are the names of the consoles.
38 proc do_execution_tests {con1 con1_name con2 con2_name} {
42 set bp_lineno [gdb_get_line_number "set break $con1_name here"]
45 gdb_test "next" "global = 1;"
48 ensure_no_output "next causes no spurious output on other console"
52 gdb_test "break $srcfile:$bp_lineno" \
53 "Breakpoint $decimal .*$srcfile, line $bp_lineno\\." \
57 ensure_no_output "break causes no spurious output on other console"
61 gdb_test "continue" "set break $con1_name here .*" "continue to breakpoint"
65 set test "breakpoint hit reported on other console"
66 gdb_test_multiple "" $test {
67 -re "Breakpoint $decimal, .* set break $con1_name here " {
77 global srcfile testfile
80 global gdb_main_spawn_id extra_spawn_id
82 clean_restart $testfile
85 untested "could not run to main"
90 "usage: new-ui <interpreter> <tty>" \
91 "new-ui without arguments"
93 set test "new-ui does not repeat"
95 gdb_test_multiple "" $test {
96 -re "^\r\n$gdb_prompt $" {
101 # Save the main UI's spawn ID.
102 set gdb_main_spawn_id $gdb_spawn_id
104 # Create the new PTY for the secondary console UI.
106 set extra_spawn_id $spawn_id
107 set extra_tty_name $spawn_out(slave,name)
108 gdb_test_multiple "new-ui console $extra_tty_name" "new-ui" {
109 -re "New UI allocated\r\n$gdb_prompt $" {
113 with_spawn_id $extra_spawn_id {
114 set test "initial prompt on extra console"
115 gdb_test_multiple "" $test {
116 -re "$gdb_prompt $" {
122 # Ensure non-execution commands in one console don't cause output
123 # in the other consoles.
124 with_spawn_id $gdb_main_spawn_id {
125 gdb_test "print 1" "^print 1\r\n\\\$1 = 1" "print on main console"
127 with_spawn_id $extra_spawn_id {
128 gdb_test "print 2" "^print 2\r\n\\\$2 = 2" "print on extra console"
131 # Run a few execution tests with the main console as the driver
133 with_test_prefix "main console" {
135 $gdb_main_spawn_id "main console" \
136 $extra_spawn_id "extra console"
138 # Same, but with the extra console as driver.
139 with_test_prefix "extra console" {
141 $extra_spawn_id "extra console" \
142 $gdb_main_spawn_id "main console"
146 # Test missing / invalid arguments.
148 proc do_test_invalid_args {} {
151 clean_restart $testfile
154 set extra_tty_name $spawn_out(slave,name)
156 # Test bad terminal path.
157 gdb_test "new-ui console /non/existent/path" \
158 "opening terminal failed: No such file or directory\." \
159 "new-ui with bad terminal path"
161 # Test bad interpreter name.
162 gdb_test "new-ui bloop $extra_tty_name" \
163 "Interpreter `bloop' unrecognized" \
164 "new-ui with bad interpreter name"
166 # Test that we can continue working normally.
168 fail "could not run to main"
172 with_test_prefix "do_test" do_test
173 with_test_prefix "do_test_invalid_args" do_test_invalid_args