# Copyright (C) 2008-2013 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 ${testfile}.exp
    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 [remote_download host ${srcdir}/${subdir}/${pyfile}]

mi_gdb_test "python exec (open ('${remote_python_file}').read ())" ""

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

mi_create_dynamic_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_dynamic_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"

mi_create_dynamic_varobj container c \
  "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 \
  "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 \
  "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 \
  "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 \
  "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 \
    "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 \
  "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 "Couldn't compile ${srcfile} 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"

remote_file host delete ${remote_python_file}
