# Copyright 2011-2021 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/>.

# Test that the "shell", "!", "|" and "pipe" commands work.

load_lib completion-support.exp

gdb_exit
gdb_start

gdb_test "shell echo foo" "foo"

gdb_test "! echo foo" "foo"
gdb_test "!echo foo" "foo"

# Convenience variables with shell command.
gdb_test_no_output "! exit 0"
gdb_test "p \$_shell_exitcode" " = 0" "shell success exitcode"
gdb_test "p \$_shell_exitsignal" " = void" "shell success exitsignal"

gdb_test_no_output "! exit 1"
gdb_test "p \$_shell_exitcode" " = 1" "shell fail exitcode"
gdb_test "p \$_shell_exitsignal" " = void" "shell fail exitsignal"

# This test will not work when the shell is CMD.EXE.
if { ! [ishost *-*-mingw*] } {
    gdb_test_no_output "! kill -2 $$"
    gdb_test "p \$_shell_exitcode" " = void" "shell interrupt exitcode"
    gdb_test "p \$_shell_exitsignal" " = 2" "shell interrupt exitsignal"
}

# Define the user command "foo", used to test "pipe" command.
gdb_test_multiple "define foo" "define foo" {
    -re "End with"  {
	pass "define foo"
    }
}
gdb_test \
    [multi_line_input \
	 { echo coucou\n }\
	 { echo truc\n }\
	 { echo machin\n }\
	 { if $argc > 0 }\
	 { echo $arg0\n}\
	 {end}\
	 {end}] \
    "" \
    "enter commands"


gdb_test "pipe foo | wc -l" "3" "simple pipe"
gdb_test "pipe foo brol| wc -l" "4" "simple pipe with arg"
gdb_test "pipe foo truc2 | grep truc | wc -l" "2" "double pipe"

gdb_test "| foo truc2 | grep truc | wc -l" "2" "double pipe, pipe char"
gdb_test "|foo|grep truc|wc -l" "1" "no space around pipe char"

gdb_test "echo coucou\\n" "coucou" "echo coucou"
gdb_test "||wc -l" "1" "repeat previous command"

gdb_test "| -d ! echo this contains a | character\\n ! sed -e \"s/|/PIPE/\"" \
    "this contains a PIPE character" "alternate 1char delim"

gdb_test "|-d ! echo this contains a | character\\n!sed -e \"s/|/PIPE/\"" \
    "this contains a PIPE character" "alternate 1char delim, no space"

gdb_test "| -d !!! echo this contains a | character\\n !!! sed -e \"s/|/PIPE/\"" \
    "this contains a PIPE character" "alternate 3char delim"

gdb_test "|-d !!! echo this contains a | character\\n!!!sed -e \"s/|/PIPE/\"" \
    "this contains a PIPE character" "alternate 3char delim, no space"

# Convenience variables with pipe command.
gdb_test "|p 123| exit 0" ""
gdb_test "p \$_shell_exitcode" " = 0" "pipe success exitcode"
gdb_test "p \$_shell_exitsignal" " = void" "pipe success exitsignal"

gdb_test "|p 123| exit 1" ""
gdb_test "p \$_shell_exitcode" " = 1" "pipe fail exitcode"
gdb_test "p \$_shell_exitsignal" " = void" "pipe fail exitsignal"

# This test will not work when the shell is CMD.EXE.
if { ! [ishost *-*-mingw*] } {
    gdb_test "|p 123| kill -2 $$" ""
    gdb_test "p \$_shell_exitcode" " = void" "pipe interrupt exitcode"
    gdb_test "p \$_shell_exitsignal" " = 2" "pipe interrupt exitsignal"
}

# Error handling verifications.
gdb_test "|" "Missing COMMAND" "all missing"
gdb_test "|-d" "-d requires an argument" "-d value missing"
gdb_test "|-d    " "-d requires an argument" "-d spaces value missing"
gdb_test "| echo coucou" \
    "Missing delimiter before SHELL_COMMAND" \
    "| delimiter missing"
gdb_test "|-d DELIM echo coucou" \
    "Missing delimiter before SHELL_COMMAND" \
    "DELIM delimiter missing"
gdb_test "|echo coucou|" \
    "Missing SHELL_COMMAND" \
    "SHELL_COMMAND missing"
gdb_test "|-d ! echo coucou !" \
    "Missing SHELL_COMMAND" \
    "SHELL_COMMAND missing with delimiter"
gdb_test "|-d! echo coucou ! wc" \
    "Missing delimiter before SHELL_COMMAND" \
    "delimiter missing due to missing space"

# Completion tests.

test_gdb_complete_unique \
    "pipe" \
    "pipe"

# Note that unlike "pipe", "|" doesn't require a space.  This checks
# that completion behaves that way too.
foreach cmd {"pipe " "| " "|"} {
    test_gdb_completion_offers_commands "$cmd"

    # There's only one option.
    test_gdb_complete_unique \
	"${cmd}-" \
	"${cmd}-d"

    # Cannot complete "-d"'s argument.
    test_gdb_complete_none "${cmd}-d "
    test_gdb_complete_none "${cmd}-d main"

    # Check completing a GDB command, with and without -d.
    test_gdb_complete_unique \
	"${cmd}maint set test-se" \
	"${cmd}maint set test-settings"
    test_gdb_complete_unique \
	"${cmd}-d XXX maint set test-se" \
	"${cmd}-d XXX maint set test-settings"

    # Check that GDB doesn't try to complete the shell command.
    test_gdb_complete_none \
	"${cmd}print 1 | "

    # Same, while making sure that the completer understands "-d".
    test_gdb_complete_unique \
	"${cmd}-d XXX maint set" \
	"${cmd}-d XXX maint set"
    test_gdb_complete_none \
	"${cmd}-d set maint set"
    test_gdb_complete_none \
	"${cmd}-d set maint set "
}
