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

# Some varobj tests involving pretty-printers

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

require allow_python_tests

standard_testfile

if {[gdb_compile "$srcdir/$subdir/$srcfile" $binfile executable {debug}] != ""} {
    return -1
}

mi_clean_restart $::testfile

set pyfile [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py]
mi_gdb_test "source ${pyfile}" \
  ".*\\^done" \
  "load python file"

mi_gdb_test "-enable-pretty-printing" \
  "\\^done" \
  "-enable-pretty-printing"

mi_gdb_test "set python print-stack full" \
  ".*\\^done" \
  "set python print-stack full"

mi_runto_main

mi_gdb_test "-var-create tval * tval" \
   "\\^done.*"

mi_gdb_test "-var-list-children --all-values tval" \
    ".*value=.*flicker.*"

mi_gdb_test "-var-create test_ptr * test_ptr" \
   "\\^done.*"

mi_gdb_test "-var-evaluate-expression test_ptr" \
   "\\^done,value=\"map\""
mi_gdb_test "-var-set-visualizer test_ptr None" \
    "\\^done.*"
# mi_gdb_test "-var-update test_ptr" ".*"
mi_gdb_test "-var-evaluate-expression test_ptr" \
   "\\^done,value=\"$hex.*\"" \
    "evaluate without visualizer"
