# Copyright 2006-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 source command's verbose mode works, the 'set trace-commands'
# command works, and that the nest depth is correct in various circumstances.

gdb_exit
gdb_start

# Create a file to source
set tracecommandsscript [standard_output_file tracecommandsscript]
set fd [open "$tracecommandsscript" w]
puts $fd "\
echo in tracecommandsscript\\n
define func
 echo in func \$arg0\\n
end
if 1
 if 2
  if 3
   if 4
    echo deep\\n
    func 999
   end
  end
 end
end
"
close $fd

# Make sure that the show trace-commands exists and the default is 'off'.
gdb_test "show trace-commands" "State of GDB CLI command tracing is off\\." \
	 "show trace-commands says off"

# Source the script with verbose mode.
gdb_test_sequence "source -v $tracecommandsscript" "source -v" {
  {[\r\n]\+echo in tracecommandsscript\\n}
  {[\r\n]\+define func}
  {[\r\n]\+if 1}
  {[\r\n]\+\+if 2}
  {[\r\n]\+\+\+if 3}
  {[\r\n]\+\+\+\+if 4}
  {[\r\n]\+\+\+\+\+echo deep\\n}
  {[\r\n]\+\+\+\+\+func 999}
  {[\r\n]\+\+\+\+\+\+echo in func 999\\n}
}

# Turn on command tracing.
gdb_test_no_output "set trace-commands" "set trace-commands"

# Make sure show trace-commands now gives 'on'.
gdb_test "show trace-commands" \
    {\+show trace-commands[\r\n]+State of GDB CLI command tracing is on\.} \
	 "show trace-commands says on"

# Simple test
gdb_test "echo hi\\n" {\+echo hi\\n[\r\n]+hi} "simple trace-commands test"

# Nested test
gdb_test_sequence "if 1\nset \$i = 0\nwhile \$i < 5\nfunc \$i\nset \$i += 1\nend\nend" \
    "nested trace-commands test" {
  {[\r\n]\+if 1}
  {[\r\n]\+\+set \$i = 0}
  {[\r\n]\+\+while \$i < 5}
  {[\r\n]\+\+\+func \$i}
  {[\r\n]\+\+\+\+echo in func \$i\\n}
  {[\r\n]\+\+\+set \$i \+= 1}
  {[\r\n]\+\+\+func \$i}
  {[\r\n]\+\+\+\+echo in func \$i\\n}
  {[\r\n]\+\+\+set \$i \+= 1}
  {[\r\n]\+\+\+func \$i}
  {[\r\n]\+\+\+\+echo in func \$i\\n}
  {[\r\n]\+\+\+set \$i \+= 1}
  {[\r\n]\+\+\+func \$i}
  {[\r\n]\+\+\+\+echo in func \$i\\n}
  {[\r\n]\+\+\+set \$i \+= 1}
  {[\r\n]\+\+\+func \$i}
  {[\r\n]\+\+\+\+echo in func \$i\\n}
  {[\r\n]\+\+\+set \$i \+= 1}
}

# Function with source works
gdb_test_sequence "define topfunc\nsource $tracecommandsscript\nend" \
    "define user command" {
  {[\r\n]\+define topfunc}
}
gdb_test_sequence "topfunc" "nested trace-commands test with source" {
  {[\r\n]\+topfunc}
  {[\r\n]\+\+source .*/tracecommandsscript}
  {[\r\n]\+\+echo in tracecommandsscript\\n}
  {[\r\n]\+\+define func}
  {[\r\n]\+\+if 1}
  {[\r\n]\+\+\+if 2}
  {[\r\n]\+\+\+\+if 3}
  {[\r\n]\+\+\+\+\+if 4}
  {[\r\n]\+\+\+\+\+\+echo deep\\n}
  {[\r\n]\+\+\+\+\+\+func 999}
  {[\r\n]\+\+\+\+\+\+\+echo in func 999\\n}
}

# Test nest depth resets properly on error
gdb_test_sequence "if 1\nif 2\nload\necho should not get here\\n\nend\nend" \
    "depth resets on error part 1" {
  {[\r\n]\+if 1}
  {[\r\n]\+\+if 2}
  {[\r\n]\+\+\+load}
  {[\r\n]No executable file specified\.}
  {[\r\n]Use the "file" or "exec-file" command\.}
}
gdb_test "echo hi\\n" {[\r\n]\+echo hi\\n[\r\n]+hi} \
	 "depth resets on error part 2"
