# Copyright 2011-2013 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# This file was written by Pierre Muller <muller@ics.u-strasbg.fr>
#
# Check if environment variables are correctly passed to inferiors
#

# There's no support for passing environment variables in the remote protocol.
if { [is_remote target] } {
    return 0
}

standard_testfile .c

# Compile binary
# and start with a fresh gdb

if { [prepare_for_testing ${testfile}.exp ${binfile} ${srcfile}] } {
     return -1
}

# make sure $pc is sane, in case we're talking to a board.
if { ![runto_main] } {
    gdb_suppress_tests
}

set bp_line [gdb_get_line_number "set breakpoint here"]
gdb_breakpoint  $bp_line

#
# Test gdb set/unset environment commands.
# Executable lists and counts all environment variables
# starting with TEST_GDB.


# First test with no TEST_GDB_VAR
gdb_test "continue" \
  ".*Program found 0 variables starting with TEST_GDB.*" \
  "Test no TEST_GDB var"

gdb_test_no_output "set env TEST_GDB_VAR1 test1" \
  "Set TEST_GDB_VAR1"

runto_main
gdb_breakpoint  $bp_line

# Second test with one TEST_GDB_VAR
gdb_test "continue" \
  ".*Program found 1 variables starting with TEST_GDB.*" \
  "Test with one TEST_GDB var"

gdb_test_no_output "set env TEST_GDB_VAR2 test2" \
  "Set TEST_GDB_VAR2"

runto_main
gdb_breakpoint  $bp_line

# Third test with two TEST_GDB_VAR
gdb_test "continue"  \
  ".*Program found 2 variables starting with TEST_GDB.*" \
  "Test with two TEST_GDB var"

gdb_test_no_output "unset env TEST_GDB_VAR1" \
  "Unset TEST_GDB_VAR1"

runto_main
gdb_breakpoint  $bp_line

# Fourth test with one TEST_GDB_VAR left, after one was removed
# with unset command.
gdb_test "continue"  \
  ".*Program found 1 variables starting with TEST_GDB.*" \
  "Test with one TEST_GDB var, after unset"

gdb_exit

set env(TEST_GDB_GLOBAL) "Global environment value"

clean_restart $binfile

# make sure $pc is sane, in case we're talking to a board.
if { ![runto_main] } {
    gdb_suppress_tests
}

set bp_line [gdb_get_line_number "set breakpoint here"]
gdb_breakpoint  $bp_line

gdb_test "show env" ".*TEST_GDB_GLOBAL=.*" "Test passing TEST_GDB_GLOBAL to GDB"
# First test with only inherited TEST_GDB_GLOBAL
gdb_test "continue" \
  ".*TEST_GDB_GLOBAL=Global environment value.*Program found 1 variables starting with TEST_GDB.*" \
  "Test with TEST_GDB_GLOBAL"

gdb_test_no_output "unset env TEST_GDB_GLOBAL" \
  "Unset TEST_GDB_GLOBAL"

runto_main
gdb_breakpoint  $bp_line

# Second test with one TEST_GDB_VAR
gdb_test "continue" \
  ".*Program found 0 variables starting with TEST_GDB.*" \
  "Test with TEST_GDB_GLOBAL unset"

gdb_exit

# Clear environment in case we're doing multiple runs
unset env(TEST_GDB_GLOBAL)

