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

# This file is part of the GDB testsuite.  It tests Python-based
# pretty-printing for MI.

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

gdb_exit
if [mi_gdb_start] {
    continue
}

standard_testfile py-prettyprint.c
set pyfile py-prettyprint.py
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DMI}] != "" } {
    untested "failed to compile"
    return -1
}

mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}

if {[lsearch -exact [mi_get_features] python] < 0} {
    unsupported "python support is disabled"
    return -1
}

mi_runto_main

set remote_python_file [gdb_remote_download host ${srcdir}/${subdir}/${pyfile}]

set cmd "source ${remote_python_file}"
set re [string_list_to_regexp & {"} $cmd \\ n {"} \r\n ^ done]
mi_gdb_test $cmd $re "load python file"

mi_continue_to_line [gdb_get_line_number {MI breakpoint here} ${srcfile}] \
  "step to breakpoint"

with_test_prefix "varobj container" {
    mi_create_floating_varobj container c \
	"create container varobj, no pretty-printing"

    mi_list_varobj_children container {
	{ container.name name 1 string }
	{ container.len len 0 int }
	{ container.elements elements 1 "int ." }
    } "examine container children=0, no pretty-printing"

    mi_delete_varobj container "delete varobj"
}

with_test_prefix "varobj nscont" {
    mi_create_floating_varobj nscont nstype \
	"create nscont varobj, no pretty-printing"

    mi_list_varobj_children nscont {
	{ nscont.len len 0 int }
	{ nscont.elements elements 1 "int ." }
    } "examine nscont children=0, no pretty-printing"

    mi_delete_varobj nscont "delete varobj"
}

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

mi_create_varobj_checked string string_1 \
    "struct string_repr" \
    "create string_1 varobj"

mi_create_varobj_checked lstring estring \
    "struct lazystring" \
    "create estring varobj"

mi_gdb_test "-data-evaluate-expression \"string_1 = string_2\"" ".*" \
    "assign string_1 from string_2"

mi_gdb_test "-var-update string" \
    "\\^done,changelist=\\\[{name=\"string\",in_scope=\"true\",type_changed=\"false\",dynamic=\"1\",has_more=\"0\"}\\\]" \
    "update string varobj after assignment"

with_test_prefix "varobj container" {
    # The "elements" field of "c" is still empty, so the attribute
    # "has_more" is expected to be zero.
    mi_create_dynamic_varobj container c 0 \
	"create container varobj"

    mi_list_varobj_children container {
    } "examine container children=0"

    mi_next "next over update 1"

    mi_varobj_update_dynamic container "varobj update 1" {
	type_changed false new_num_children 1 dynamic 1 has_more 0
    } {
    } {
	{ name {container.\[0\]} exp {\[0\]} numchild 0 type int }
    }

    mi_next "next over update 2"

    mi_varobj_update_dynamic container "varobj update 2" {
	type_changed false new_num_children 2 dynamic 1 has_more 0
    } {
    } {
	{ name {container.\[1\]} exp {\[1\]} numchild 0 type int }
    }

    mi_gdb_test "-var-set-visualizer container None" \
	"\\^done" \
	"clear visualizer"

    mi_gdb_test "-var-update container" \
	"\\^done,changelist=\\\[\\\]" \
	"varobj update after clearing"

    mi_gdb_test "-var-set-visualizer container gdb.default_visualizer" \
	"\\^done" \
	"choose default visualizer"

    mi_varobj_update_dynamic container "varobj update after choosing default" {
	type_changed false new_num_children 2 dynamic 1 has_more 0
    } {
    } {
	{ name {container.\[0\]} exp {\[0\]} numchild 0 type int }
	{ name {container.\[1\]} exp {\[1\]} numchild 0 type int }
    }

    mi_gdb_test "-var-set-visualizer container ContainerPrinter" \
	"\\^done" \
	"choose visualizer using expression"

    mi_varobj_update_dynamic container \
	"varobj update after choosing via expression" {
	    type_changed false new_num_children 2 dynamic 1 has_more 0
	} {
	} {
	    { name {container.\[0\]} exp {\[0\]} numchild 0 type int }
	    { name {container.\[1\]} exp {\[1\]} numchild 0 type int }
	}

    mi_list_varobj_children_range container 1 2 2 {
	{ {container.\[1\]} {\[1\]} 0 int }
    } "list varobj children after selecting child range"

    mi_list_varobj_children_range container -1 -1 2 {
	{ {container.\[0\]} {\[0\]} 0 int }
	{ {container.\[1\]} {\[1\]} 0 int }
    } "list varobj children after resetting child range"

    mi_next "next over update 3"

    mi_gdb_test "-var-set-update-range container 0 1" \
	"\\^done" \
	"set update range"

    # This should truncate the list.
    mi_list_varobj_children container {
	{ {container.\[0\]} {\[0\]} 0 int }
    } "list children after setting update range"

    # This should return just the items in [1,2).
    mi_list_varobj_children_range container 1 2 2 {
	{ {container.\[1\]} {\[1\]} 0 int }
    } "list selected children after setting range"

    # This should not be affected by the previous list-children request.
    mi_list_varobj_children container {
	{ {container.\[0\]} {\[0\]} 0 int }
    } "list children after listing selected range"

    mi_next "next over update 4"

    # This should only show the first child, because the update range has
    # been set.
    mi_varobj_update_dynamic container \
	"update after next with restricted range" {
	    type_changed false new_num_children 1 dynamic 1 has_more 1
	} {
	    { name {container.\[0\]} in_scope true type_changed false has_more 0 }
	} {
	}

    mi_gdb_test "-var-set-update-range container 3 4" \
	"\\^done" \
	"set update range with non-zero start"

    # Elements were updated but should not be reported.
    mi_varobj_update_dynamic container \
	"update varobj with change outside selected range" {
	    type_changed false new_num_children 3 dynamic 1 has_more 0
	} {
	} {
	}
}

mi_next "next over update 5"

# Regression test: examine an object that has no children, then update
# it to ensure that we don't print the children.
mi_create_dynamic_varobj container2 c2 0 \
  "create second container varobj"

mi_gdb_test "-var-update container2" \
  "\\^done,changelist=.." \
  "update varobj, no children requested"

mi_next "next over update 6"

# Now container2 has an element -- and an update should mention that
# it has_more.  But, because we did not request children, we still
# should not actually see them.
mi_varobj_update_dynamic container2 \
    "update varobj 2, no children requested" {
	type_changed false dynamic 1 has_more 1
    } {} {}

mi_continue_to_line \
    [gdb_get_line_number {MI outer breakpoint here} ${srcfile}] \
    "step to outer breakpoint"

mi_create_dynamic_varobj outer outer 1 \
  "create outer varobj"

mi_list_varobj_children outer {
  { outer.s s 2 "struct substruct" }
  { outer.x x 0 "int" }
} "list children of outer"

mi_list_varobj_children outer.s {
  { outer.s.a a 0 int }
  { outer.s.b b 0 int }
} "list children of outer.s"

mi_next "next over outer update"

mi_gdb_test "-var-update outer" \
  ".done,changelist=.{name=\"outer.s.a\",in_scope=\"true\",type_changed=\"false\",has_more=\"0\"}." \
  "update after updating element of outer"

mi_continue_to_line \
    [gdb_get_line_number {Another MI breakpoint} ${srcfile}] \
    "step to second breakpoint"

mi_varobj_update_with_type_change container int 0 "update after type change"


mi_continue_to_line \
    [gdb_get_line_number {break to inspect struct and union} ${srcfile}] \
    "step to outer breakpoint"

with_test_prefix "varobj nscont" {
    mi_create_dynamic_varobj nscont nstype 1 \
	"create nstype varobj"

    mi_list_varobj_children nscont {
	{ {nscont.\[0\]} {\[0\]} 0 int }
	{ {nscont.\[1\]} {\[1\]} 0 int }
    } "list children after setting update range"

    mi_gdb_test "-var-set-visualizer nscont None" \
	"\\^done" \
	"clear visualizer"

    mi_gdb_test "-var-update nscont" \
	"\\^done,changelist=\\\[\\\]" \
	"varobj update after clearing"

    mi_gdb_test "-var-set-visualizer nscont gdb.default_visualizer" \
	"\\^done" \
	"choose default visualizer"
}

set cmd "python exception_flag = True"
set re [string_list_to_regexp & {"} $cmd \\ n {"} \r\n ^ done]
mi_gdb_test $cmd $re

mi_create_dynamic_varobj nstype2 nstype2 1 \
  "create nstype2 varobj"

mi_list_varobj_children nstype2 {
    { {nstype2.<error at 0>} {<error at 0>} 6 {char \[6\]} }
} "list children after setting exception flag"

mi_create_varobj me me \
  "create me varobj"

mi_gdb_test "-var-evaluate-expression me" \
	"\\^done,value=\"<error reading variable: Cannot access memory.>.*\"" \
	"evaluate me varobj"

# Regression test for python/14836.
mi_create_dynamic_varobj children_as_list children_as_list 1 \
    "printer whose children are returned as a list"

# Test that when a pretty-printer returns a gdb.Value in its to_string, we call
# the pretty-printer of that value too.
mi_create_varobj_checked tsrvw tsrvw  \
    "struct to_string_returns_value_wrapper" \
    "create tsrvw varobj"
mi_check_varobj_value tsrvw "Inner to_string 1989" "check tsrvw varobj value"
mi_gdb_test "-data-evaluate-expression tsrvw" \
    "\\^done,value=\"Inner to_string 1989\"" \
    "check tsrvw expression value"

# Regression test for bug 14741.
mi_continue_to_line \
    [gdb_get_line_number {breakpoint bug 14741} ${srcfile}] \
    "step to breakpoint for bug 14741"

mi_create_dynamic_varobj c c 1 \
  "create varobj for c"

mi_gdb_test "-var-set-visualizer c ArrayPrinter" \
  "\\^done" \
  "choose array visualizer for c"

mi_list_varobj_children c {
    { {c.\[0\]} {\[0\]} 0 int }
} "list children of c"

mi_next "next over change of array element"

mi_gdb_test "-var-update c" \
    "\\^done,changelist=\\\[{name=\"c.\\\[0\\\]\",in_scope=\"true\",type_changed=\"false\",has_more=\"0\"}\\\]" \
    "update varobj after element change"

# C++ MI tests
gdb_exit
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}-cxx" \
	   executable {debug c++ additional_flags=-DMI}] != "" } {
    untested "failed to compile in C++ mode"
    return -1
}

if [mi_gdb_start] {
    continue
}
mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}-cxx

if {[lsearch -exact [mi_get_features] python] < 0} {
    unsupported "python support is disabled"
    return -1
}

with_test_prefix "varobj fake" {
    mi_runto_main
    mi_continue_to_line \
	[gdb_get_line_number {break to inspect struct and union} ${srcfile}] \
	"step to breakpoint"

    # Test python/12531.  Install visualizer on a cplus_fake_child.
    mi_create_varobj fake fake \
	"create fake varobj"

    mi_list_varobj_children fake {
	{ fake.private private 1 }
    } "list children of fake"

    mi_list_varobj_children fake.private {
	{ fake.private.sname sname 0 int }
    } "list children fake.private"

    mi_gdb_test "-var-set-visualizer fake.private gdb.default_visualizer" \
	"\\^done" "Install visualizer on a cplus_fake_child"
}
