# Copyright (C) 2012 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/>.

#
# added for testing the -data-write-memory-bytes MI command enhancements
#

load_lib mi-support.exp
set MIFLAGS "-i=mi"

gdb_exit
if [mi_gdb_start] {
    continue
}

standard_testfile "mi-read-memory"
 
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}.c" "${binfile}" executable {debug}] != "" } {
     untested mi-fill-memory.exp
     return -1
}

mi_run_to_main
mi_next_to "main" "" "mi-read-memory.c" "20" "next at main"

mi_gdb_test "1-data-write-memory-bytes"\
	"1\\\^error,msg=\"Usage: ADDR DATA \\\[COUNT\\\]\.\""\
	"no arguments"

mi_gdb_test "2-data-write-memory-bytes 8"\
	"2\\\^error,msg=\"Usage: ADDR DATA \\\[COUNT\\\]\.\""\
	"one argument missing"

mi_gdb_test "3-data-write-memory-bytes \$pc ab"\
	"3\\\^done" \
	"memory successfully written"

mi_gdb_test "4-data-write-memory-bytes \$pc ab 8"\
	"4\\\^done" \
	"memory successfully filled (8 bytes)"

mi_gdb_test "5-interpreter-exec console \"x \$pc\"" \
    ".*0xabababab.*" \
    "pattern correctly read from memory"

mi_gdb_exit
