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

# Tests whether -var-info-path-expression fails as documented when
# invoked on a dynamic varobj.

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

gdb_exit
if {[mi_gdb_start]} {
    continue
}

#
# Start here
#
standard_testfile

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

mi_gdb_test "source ${srcdir}/${subdir}/${testfile}.py" \
  ".*\\^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_run_to_main


mi_continue_to_line [gdb_get_line_number "next line" ${srcfile}] \
  "step to breakpoint"

mi_gdb_test "-var-create c1 * &c1" \
   "\\^done.*" \
   "-var-create c1 * &c1"

mi_gdb_test "-var-info-path-expression c1" \
  "\\^done,path_expr=\"&c1\"" \
  "-var-info-path-expression c1"

mi_gdb_test "-var-list-children c1" \
  "\\^done,numchild=\"2\",children=.child=\{name=\"c1.car\".*child=\{name=\"c1.cdr\".*" \
  "-var-list-children c1"

mi_gdb_test "-var-info-path-expression c1.cdr" \
  "\\^error,msg=\".*\"" \
  "-var-info-path-expression c1.cdr"

mi_gdb_test "-var-list-children c1.cdr" \
  "\\^done,numchild=\"2\",children=.child=\{name=\"c1.cdr.car\".*child=\{name=\"c1.cdr.cdr\".*" \
  "-var-list-children c1.cdr"

mi_gdb_test "-var-info-path-expression c1.cdr.cdr" \
  "\\^error,msg=\".*\"" \
  "-var-info-path-expression c1.cdr.cdr"

mi_gdb_test "-var-list-children c1.car" \
  "\\^done,numchild=\"1\",children=.child=\{name=\"c1.car.atom\".*" \
  "-var-list-children c1.car"

mi_gdb_test "-var-list-children c1.car.atom" \
  "\\^done,numchild=\"1\",children=.child=\{name=\"c1.car.atom.ival\".*" \
  "-var-list-children c1.car.atom"

mi_gdb_test "-var-info-path-expression c1.car.atom.ival" \
  "\\^error,msg=\".*\"" \
  "-var-info-path-expression c1.car.atom.ival"
