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

# interp.exp   Test interpreter-exec command

standard_testfile

if { [prepare_for_testing "failed to prepare" ${testfile} $srcfile {debug}] } {
    return -1
}

# Do not use gdb_test for this test, since it has two prompts.
set cmd "interpreter-exec mi \"-var-update *\""
gdb_test_multiple $cmd $cmd {
    -re "\\^done,changelist=\\\[\\\]\r\n$gdb_prompt " {
	pass "$cmd"
	gdb_expect 1 {
	    -re "\r\n$gdb_prompt $" { }
	}
    }
}
gdb_test "interpreter-exec console \"show version\"" "GNU gdb .*"

# Regression test for crash when an exception occurs in mi_parse.
gdb_test_multiple "interpreter-exec mi \"-break-insert --thread a\"" \
    "regression test for mi_parse crash" {
	-re ".error,msg=.Invalid value for the '--thread' option.\r\n$gdb_prompt " {
	    pass "$cmd"
	    gdb_expect 1 {
		-re "\r\n$gdb_prompt $" { }
	    }
	}
    }

set cmd "interpreter-exec mi \"-stack-info-frame\""
gdb_test_multiple $cmd $cmd {
    -re ".error,msg=.No registers\..\r\n$gdb_prompt " {
	pass "$cmd"
	gdb_expect 1 {
	    -re "\r\n$gdb_prompt $" { }
	}
    }
}

set cmd "interpreter-exec mi1 \"-break-insert main\""
gdb_test_multiple $cmd $cmd {
    -re ".done.bkpt=.number=.\[0-9\]\[^\n\]+\r\n$gdb_prompt " {
	pass "$cmd"
	gdb_expect 1 {
	    -re "\r\n$gdb_prompt $" { }
	}
    }
}

set cmd "interpreter-exec mi2 \"-break-insert main\""
gdb_test_multiple $cmd $cmd {
    -re ".done.bkpt=.number=.\[0-9\]\[^\n\]+\r\n$gdb_prompt " {
	pass "$cmd"
	gdb_expect 1 {
	    -re "\r\n$gdb_prompt $" { }
	}
    }
}

set cmd "interpreter-exec mi3 \"-break-insert main\""
gdb_test_multiple $cmd $cmd {
    -re ".done.bkpt=.number=.\[0-9\]\[^\n\]+\r\n$gdb_prompt " {
	pass "$cmd"
	gdb_expect 1 {
	    -re "\r\n$gdb_prompt $" { }
	}
    }
}

if ![runto_main] then {
  return -1
}

gdb_test "list" ".*\[0-9\].*main \\(int argc.*" "can list sources"
gdb_exit
