# Copyright (C) 2008-2017 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"

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"

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"

# 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 thread-id 1 }
}

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 thread-id 1 }
}

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 thread-id 1 }
    { name {container.\[1\]} exp {\[1\]} numchild 0 type int thread-id 1 }
}

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 thread-id 1 }
      { name {container.\[1\]} exp {\[1\]} numchild 0 type int thread-id 1 }
  }

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"

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"

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

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"
