# 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}]

mi_gdb_test "source ${remote_python_file}" "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" ""

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"
}

mi_gdb_test "python exception_flag = True" ""

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"
}
