1# Copyright 1997, 1998, 1999, 2003, 2007, 2008, 2009, 2010, 2011 2# Free Software Foundation, Inc. 3 4# This program is free software; you can redistribute it and/or modify 5# it under the terms of the GNU General Public License as published by 6# the Free Software Foundation; either version 3 of the License, or 7# (at your option) any later version. 8# 9# This program is distributed in the hope that it will be useful, 10# but WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12# GNU General Public License for more details. 13# 14# You should have received a copy of the GNU General Public License 15# along with this program. If not, see <http://www.gnu.org/licenses/>. */ 16 17if $tracelevel then { 18 strace $tracelevel 19 } 20 21global usestubs 22 23# 24# test running programs 25# 26 27# This test exists solely to exercise the "environment" commands for 28# code-coverage on HP-UX. 29# 30if ![istarget "hppa*-*-hpux*"] then { 31 return 32} 33 34set testfile "break" 35set srcfile ${testfile}.c 36set srcfile1 ${testfile}1.c 37set binfile ${objdir}/${subdir}/${testfile} 38 39if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}0.o" object {debug nowarnings}] != "" } { 40 untested environ.exp 41 return -1 42} 43 44if { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}1.o" object {debug nowarnings}] != "" } { 45 untested environ.exp 46 return -1 47} 48 49if { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug nowarnings}] != "" } { 50 untested environ.exp 51 return -1 52} 53 54gdb_exit 55gdb_start 56gdb_reinitialize_dir $srcdir/$subdir 57gdb_load ${binfile} 58 59if ![runto_main] then { fail "environment command tests suppressed" } 60 61# (No, this is not really related to the environment commands. But it's 62# a convenient place to verify that this command works.) 63# 64send_gdb "info program\n" 65gdb_expect { 66 -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped at breakpoint 1..*$gdb_prompt $"\ 67 {pass "info program"} 68 -re "$gdb_prompt $"\ 69 {fail "info program"} 70 timeout {fail "(timeout) info program"} 71} 72 73# We don't really care where this step lands, so long as it gets 74# the inferior pushed off the breakpoint it's currently on... 75# 76send_gdb "next\n" 77gdb_expect { 78 -re ".*$gdb_prompt $"\ 79 {pass "step before info program"} 80 timeout {fail "(timeout) step before info program"} 81} 82send_gdb "info program\n" 83gdb_expect { 84 -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped after being stepped..*$gdb_prompt $"\ 85 {pass "info program after step"} 86 -re "$gdb_prompt $"\ 87 {fail "info program after step"} 88 timeout {fail "(timeout) info program after step"} 89} 90 91if ![runto_main] then { fail "environment command tests suppressed" } 92 93send_gdb "delete\n" 94gdb_expect { 95 -re ".*y or n. $"\ 96 {send_gdb "y\n" 97 gdb_expect { 98 -re ".*$gdb_prompt $"\ 99 {pass "delete breakpoint before info program"} 100 timeout {fail "(timeout) delete breakpoint before info program"} 101 } 102 } 103 -re "$gdb_prompt $"\ 104 {fail "delete breakpoint before info program"} 105 timeout {fail "(timeout) delete breakpoint before info program"} 106} 107send_gdb "info program\n" 108gdb_expect { 109 -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped at a breakpoint that has since been deleted..*$gdb_prompt $"\ 110 {pass "info program after deleted breakpoint"} 111 -re "$gdb_prompt $"\ 112 {fail "info program after deleted breakpoint"} 113 timeout {fail "(timeout) info program after deleted breakpoint"} 114} 115 116# Verify that we can show all currently-set environment variables. 117# (It's a bit hacky, but nonetheless probably safe to check for at 118# least the SHELL variable.) 119# 120# need to increase timeout because of very long output 121set oldtimeout $timeout 122set timeout [expr "$timeout + 300"] 123 124send_gdb "show environment\n" 125gdb_expect { 126 -re ".*SHELL=(\[a-zA-Z0-9\]*).*$gdb_prompt $"\ 127 {pass "show environment"} 128 -re "$gdb_prompt $"\ 129 {fail "show environment"} 130 timeout {fail "(timeout) show environment"} 131} 132set timeout $oldtimeout 133 134# Verify that we can unset a specific environment variable. 135# 136send_gdb "unset environment EDITOR\n" 137gdb_expect { 138 -re "$gdb_prompt $"\ 139 {pass "issue unset environment"} 140 timeout {fail "(timeout) issue unset environment"} 141} 142send_gdb "show environment EDITOR\n" 143gdb_expect { 144 -re "Environment variable \"EDITOR\" not defined.\r\n$gdb_prompt $"\ 145 {pass "unset environment"} 146 -re "$gdb_prompt $"\ 147 {fail "unset environment"} 148 timeout {fail "(timeout) unset environment"} 149} 150 151# Verify that we can unset all environment variables. 152# 153send_gdb "unset environment\n" 154gdb_expect { 155 -re "Delete all environment variables.*y or n. $"\ 156 {send_gdb "y\n" 157 gdb_expect { 158 -re "$gdb_prompt $"\ 159 {pass "unset entire environment"} 160 timeout {fail "(timeout) unset entire environment"} 161 } 162 } 163 -re "$gdb_prompt $"\ 164 {fail "unset entire environment"} 165 timeout {fail "(timeout) unset entire environment"} 166} 167 168# Verify that we can set a specific environment variable. 169# 170send_gdb "set environment EDITOR emacs\n" 171gdb_expect { 172 -re "$gdb_prompt $"\ 173 {pass "issue set environment"} 174 timeout {fail "(timeout) issue set environment"} 175} 176send_gdb "show environment EDITOR\n" 177gdb_expect { 178 -re "EDITOR = emacs\r\n$gdb_prompt $"\ 179 {pass "set environment"} 180 -re "$gdb_prompt $"\ 181 {fail "set environment"} 182 timeout {fail "(timeout) set environment"} 183} 184 185# Verify that GDB responds gracefully to a request to set environment, 186# with no variable name. 187# 188send_gdb "set environment\n" 189gdb_expect { 190 -re "Argument required .environment variable and value..*$gdb_prompt $"\ 191 {pass "set environment without variable disallowed"} 192 -re "$gdb_prompt $"\ 193 {fail "set environment without variable disallowed"} 194 timeout {fail "(timeout) set environment without variable disallowed"} 195} 196 197# I'm not sure just what GDB has in mind in explicitly checking 198# for this variant, but since GDB handles it, test it. 199# 200send_gdb "set environment =\n" 201gdb_expect { 202 -re "Argument required .environment variable to set..*$gdb_prompt $"\ 203 {pass "set environment equals without variable disallowed"} 204 -re "$gdb_prompt $"\ 205 {fail "set environment equals without variable disallowed"} 206 timeout {fail "(timeout) set environment equals without variable disallowed"} 207} 208 209# Setting an environment variable without a value sets it to a NULL 210# value. 211# 212send_gdb "set environment EDITOR\n" 213gdb_expect { 214 -re "Setting environment variable \"EDITOR\" to null value..*$gdb_prompt $"\ 215 {pass "issue set environment without variable value"} 216 -re "$gdb_prompt $"\ 217 {fail "issue set environment without variable value"} 218 timeout {fail "(timeout) issue set environment without variable value"} 219} 220send_gdb "show environment EDITOR\n" 221gdb_expect { 222 -re "EDITOR = \r\n$gdb_prompt $"\ 223 {pass "set environment without variable value"} 224 -re "$gdb_prompt $"\ 225 {fail "set environment without variable value"} 226 timeout {fail "(timeout) set environment without variable value"} 227} 228 229# Verify that GDB responds gracefully to an attempt to show a 230# non-existent environment variable. (We hope this variable is 231# undefined!) 232# 233send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" 234gdb_expect { 235 -re "Environment variable \"FOOBARBAZGRUNGESPAZBALL\" not defined..*$gdb_prompt $"\ 236 {pass "show non-existent environment variable disallowed"} 237 -re "$gdb_prompt $"\ 238 {fail "show non-existent environment variable disallowed"} 239 timeout {fail "(timeout) show non-existent environment variable disallowed"} 240} 241 242# Verify that GDB can set an environment variable hitherto undefined. 243# 244send_gdb "set environment FOOBARBAZGRUNGESPAZBALL t\n" 245gdb_expect { 246 -re "$gdb_prompt $"\ 247 {pass "issue set environment for previously undefined variable"} 248 timeout {fail "(timeout) issue set environment for previously undefined variable"} 249} 250send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" 251gdb_expect { 252 -re "FOOBARBAZGRUNGESPAZBALL = t\r\n$gdb_prompt $"\ 253 {pass "set environment for previously undefined variable"} 254 -re "$gdb_prompt $"\ 255 {fail "set environment for previously undefined variable"} 256 timeout {fail "(timeout) set environment for previously undefined variable"} 257} 258 259# Verify that GDB can also set an environment variable using the "=" 260# syntax. 261# 262send_gdb "set environment FOOBARBAZGRUNGESPAZBALL = t\n" 263gdb_expect { 264 -re "$gdb_prompt $"\ 265 {pass "issue set environment with equals"} 266 timeout {fail "(timeout) issue set environment with equals"} 267} 268send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" 269gdb_expect { 270 -re "FOOBARBAZGRUNGESPAZBALL = t\r\n$gdb_prompt $"\ 271 {pass "set environment with equals"} 272 -re "$gdb_prompt $"\ 273 {fail "set environment with equals"} 274 timeout {fail "(timeout) set environment with equals"} 275} 276 277# Verify that GDB can set an environment variable to a value that has 278# an embedded (trailing, in this case) equals. 279# 280send_gdb "set environment FOOBARBAZGRUNGESPAZBALL t=\n" 281gdb_expect { 282 -re "$gdb_prompt $"\ 283 {pass "issue set environment with trailing equals"} 284 timeout {fail "(timeout) issue set environment with trailing equals"} 285} 286send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" 287gdb_expect { 288 -re "FOOBARBAZGRUNGESPAZBALL = t=\r\n$gdb_prompt $"\ 289 {pass "set environment with trailing equals"} 290 -re "$gdb_prompt $"\ 291 {fail "set environment with trailing equals"} 292 timeout {fail "(timeout) set environment with trailing equals"} 293} 294 295# Verify that GDB can set an environment variable to a value preceded 296# by whitespace, and that such whitespace is ignored (not included 297# in the set value). 298# 299send_gdb "set environment FOOBARBAZGRUNGESPAZBALL = foo\n" 300gdb_expect { 301 -re "$gdb_prompt $"\ 302 {pass "issue set environment with preceding whitespace"} 303 timeout {fail "(timeout) issue set environment with preceding whitespace"} 304} 305send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" 306gdb_expect { 307 -re "FOOBARBAZGRUNGESPAZBALL = foo\r\n$gdb_prompt $"\ 308 {pass "set environment with preceding whitespace"} 309 -re "$gdb_prompt $"\ 310 {fail "set environment with preceding whitespace"} 311 timeout {fail "(timeout) set environment with preceding whitespace"} 312} 313 314# Verify that GDB can manipulate the distinguished PATH variable. 315# 316send_gdb "path /tmp/FOOBARBAZGRUNGESPAZBALL\n" 317gdb_expect { 318 -re ".*Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\ 319 {pass "issue path"} 320 -re "$gdb_prompt $"\ 321 {fail "issue path"} 322 timeout {fail "(timeout) issue path"} 323} 324send_gdb "show paths\n" 325gdb_expect { 326 -re "Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\ 327 {pass "show paths"} 328 -re "$gdb_prompt $"\ 329 {fail "show paths"} 330 timeout {fail "(timeout) show paths"} 331} 332 333gdb_exit 334return 0 335