# Copyright (C) 2008, 2009, 2010, 2011 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
}

set testfile "py-mi"
set srcfile py-prettyprint.c
set binfile ${objdir}/${subdir}/${testfile}
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 execfile ('${remote_python_file}')" ""

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 dynamic 1 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\",dynamic=\"1\",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"

# C++ MI tests
gdb_exit
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
	   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}

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}
