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

load_lib "ada.exp"

require allow_ada_tests

standard_ada_testfile foo_rb20_056

if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } {
  return -1
}

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

mi_clean_restart $binfile

if {[mi_runto_main] < 0} {
   return 0
}

# Continue until STOP_1, and create a varobj for variables "A" and "B".

set bp_location [gdb_get_line_number "STOP_1" ${testdir}/foo_rb20_056.adb]
mi_continue_to_line \
    "foo_rb20_056.adb:$bp_location" \
    "stop at STOP_1"

mi_gdb_test "-var-create a * a" \
    "\\^done,name=\"a\",numchild=\"19\",.*" \
    "create varobj for a"

mi_gdb_test "-var-create b * b" \
    "\\^done,name=\"b\",numchild=\"19\",.*" \
    "create varobj for b"

# Continue until STOP_2, and request an update of varobjs a and b.
# One should reported as changed (b), and the other should report
# no change.

set bp_location [gdb_get_line_number "STOP_2" ${testdir}/foo_rb20_056.adb]
mi_continue_to_line \
    "foo_rb20_056.adb:$bp_location" \
    "stop at STOP_2"

mi_gdb_test "-var-update a" \
    "\\^done,changelist=\\\[\\\]" \
    "-var-update a at STOP_2"

mi_gdb_test "-var-update b" \
    "\\^done,changelist=\\\[{name=\"b\".*}\\\]" \
    "-var-update b at STOP_2"
