# Varobj Tests (C++ language)
# Copyright (C) 1998, 2003 Red Hat, 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# Please email any bugs, comments, and/or additions to this file to:
# insight@sources.redhat.com

# This file was written by Keith Seitz (keiths@cygnus.com)

# Read in the standard defs file
if {![gdbtk_read_defs]} {
  break
}

global objdir test_ran

# Load in a file
set program [file join $objdir cpp_variable]
if {[catch {gdbtk_test_file $program} t]} {
  # This isn't a test case, since if this fails, we're hosed.
  gdbtk_test_error "loading \"$program\": $t"
}

# The variables that are created are stored in an array called "var".

# proc to tell us which of the variables are changed/out of scope
proc check_update {} {
  global var

  set out {}
  set changed {}
  foreach ind [array names var] {
    set ret [$var($ind) update]
    if {$ret == -1} {
	lappend out $ind
    } elseif {$ret != ""} {
        lappend changed $ret
    }
  }
  return [list $changed $out]
}


# proc to create a variable
proc create_variable {expr} {
  global var

  set err [catch {gdb_variable create "$expr" -expr $expr} v]
  if {!$err} {
    set var($expr) $v
  }

  return $err
}

# proc to get the children
# Children are stored in the global "var" as
# PARENT.child. So for struct _foo {int a; int b} bar;,
# the children returned are {a b} and var(bar.a) and var(bar.b)
# map the actual objects to their names.
proc get_children {parent} {
  global var

  set kiddies [$var($parent) children]
  set children {}
  foreach child $kiddies {
    set name [lindex [split $child .] end]
    lappend children $name
    set var($parent.$name) $child
  }

  return $children
}

proc delete_variable {varname} {
  global var

  if {[info exists var($varname)]} {
    # This has to be caught, since deleting a parent
    # will erase all children.
    $var($varname) delete
    set vars [array names var $varname*]
    foreach v $vars {
      if {[info exists var($v)]} {
	unset var($v)
      }
    }
  }
}

# Compare the values of variable V in format FMT with value of OBJ
# with gdb's value.
proc cppvalue {obj v fmt} {
  global var
  global _test

  puts $_test(logfile) "obj=$obj v=$v fmt=$fmt"
  puts $_test(logfile) "var(\$obj)=$var($obj)"

  set value [$var($obj) value]
  set gdb [gdb_cmd "output/$fmt $v"]
  puts $_test(logfile) "output/$fmt $v"
  if {$value == $gdb} {
    puts $_test(logfile) "gdbtk: $value == gdb: $gdb"
    set result ok
  } else {
    set result $v
    puts $_test(logfile) "gdbtk: $value <> gdb: $gdb"
  }

  return $result
}

proc delete_all_variables {} {
  global var

  foreach variable [array names var] {
    delete_variable $variable
  }
}

#####            #####
#                    #
# Simple Class Tests #
#                    #
#####            #####

# run to "do_simple_class_tests"
gdb_cmd "break do_simple_class_tests"
gdbtk_test_run

# Test:  cpp_variable-1.1
# Desc:  stopped in do_simple_class_tests
gdbtk_test cpp_variable-1.1 {stopped in do_simple_class_tests} {
  # G++ can output "do_simple_class_tests(void)". Strip the "(void)" part.
  set loc [lindex [gdb_loc] 1]
  set index [string first \( $loc]
  if {$index > 0} {
    set loc [string range $loc 0 [expr {$index-1}]]
  }
  set loc
} {do_simple_class_tests}

# Test: cpp_variable-1.2
# Desc: create variable v
gdbtk_test cpp_variable-1.2 {create variable v} {
  create_variable v
} {0}

# Test: cpp_variable-1.3
# Desc: number of children of v
gdbtk_test cpp_variable-1.3 {number of children of v} {
  $var(v) numChildren
} {5}

# Test: cpp_variable-1.4a
# Desc: children of v
gdbtk_test cpp_variable-1.4a {children of v} {
  get_children v
} {VA VB VC public private}

# Test: cpp_variable-1.4b
# Desc: public children of v
gdbtk_test cpp_variable-1.4b {public children of v} {
  get_children v.public
} {v_pub_int v_pub_charp}

# Test: cpp_variable-1.4c
# Desc: private children of v
gdbtk_test cpp_variable-1.4c {private children of v} {
  get_children v.private
} {v_priv_int v_priv_charp}

# Test: cpp_variable-1.5
# Desc: type of v
gdbtk_test cpp_variable-1.5 {type of v} {
  $var(v) type
} {V *}

# Test: cpp_variable-1.6
# Desc: format of v
gdbtk_test cpp_variable-1.6 {format of v} {
  $var(v) format
} {natural}

set value {}
catch {$var(v) value} value

# Test: cpp_variable-1.6a
# Desc: Step over "V *v = new V;"
gdbtk_test cpp_variable-1.6a {step over "V *v = new V;"} {
  catch {gdb_cmd "next"}
} {0}

# Test: cpp_variable-1.7
# Desc: check value of v changed
gdbtk_test cpp_variable-1.7 {check value of v changed} {
  set changes [check_update]
  # It is undefined whether the children will change values
  # or not, so ignore them.
  expr {[lsearch [lindex [lindex $changes 0] 0] v] != -1}
} {1}

# Test: cpp_variable-1.8
# Desc: check values of v
gdbtk_test cpp_variable-1.8 {check values of v} {
  set new [$var(v) value]
  expr {$new != $value}
} {1}

# Test: cpp_variable-1.9
# Desc: v editable
gdbtk_test cpp_variable-1.9 {v editable} {
  $var(v) editable
} {1}

#####             #####
#                     #
# Children of v tests #
#                     #
#####             #####

# Test: cpp_variable-2.1
# Desc: type of v.v_pub_int
gdbtk_test cpp_variable-2.1 {type of v.v_pub_int} {
  $var(v.public.v_pub_int) type
} {int}

# Test: cpp_variable-2.2
# Desc: format of v.v_pub_int
gdbtk_test cpp_variable-2.2 {format of v.v_pub_int} {
  $var(v.public.v_pub_int) format
} {natural}

# Test: cpp_variable-2.2a
# Desc: set variable v->v_pub_int=2112 
gdbtk_test cpp_variable-2.2a {set variable v.v_pub_int=2112} {
  set err [catch {gdb_cmd "set variable v.v_pub_int=2112"} txt]
  if {$err} {
    set txt
  } else {
    set err
  }
} {0}

# Test: cpp_variable-2.3
# Desc: value of v.v_pub_int changed
gdbtk_test cpp_variable-2.3 {value of v.v_pub_int changed} {
  check_update
} {v.public.v_pub_int {v.private.v_priv_charp v.VB v.private.v_priv_int v.VC v.public.v_pub_charp v.public.v_pub_int v.private v.public v.VA}}

# Test: cpp_variable-2.4
# Desc: value of v.v_pub_int
gdbtk_test cpp_variable-2.4 {value of v.v_pub_int} {
  $var(v.public.v_pub_int) value
} {2112}

# Test: cpp_variable-2.5
# Desc: changed format of v.v_pub_int
gdbtk_test cpp_variable-2.5 {changed format of v.v_pub_int} {
  $var(v.public.v_pub_int) format octal
  $var(v.public.v_pub_int) format
} {octal}

# Test: cpp_variable-2.6
# Desc: value of v.v_pub_int with new format
gdbtk_test cpp_variable-2.6 {value of v.v_pub_int with new format} {
  $var(v.public.v_pub_int) value
} {04100}

# Test: cpp_variable-2.7
# Desc: change value of v.v_pub_int (decimal)
gdbtk_test cpp_variable-2.7 {change value of v.v_pub_int (decimal)} {
  $var(v.public.v_pub_int) value 3
  cppvalue v.public.v_pub_int v.v_pub_int o
} {ok}

# Test: cpp_variable-2.8
# Desc: change value of v.v_pub_int (hexadecimal)
gdbtk_test cpp_variable-2.8 {change value of v.v_pub_int (hexadecimal)} {
  $var(v.public.v_pub_int) value 0x21
  cppvalue v.public.v_pub_int v.v_pub_int o
} {ok}

# Test: cpp_variable-2.9
# Desc: number of children of v_pub_int
gdbtk_test cpp_variable-2.9 {number of children of v_pub_int} {
  $var(v.public.v_pub_int) numChildren
} {0}

# Test: cpp_variable-2.10
# Desc: children of v.v_pub_int
gdbtk_test cpp_variable-2.10 {children of v.v_pub_int} {
  get_children v.public.v_pub_int
} {}

# Test: cpp_variable-2.11
# Desc: v.v_pub_int editable
gdbtk_test cpp_variable-2.11 {v.v_pub_int editable} {
  $var(v.public.v_pub_int) editable
} {1}

# Test: cpp_variable-2.21
# Desc: type of v.v_priv_charp
gdbtk_test cpp_variable-2.21 {type of v.v_priv_charp} {
  $var(v.private.v_priv_charp) type
} {char *}

# Test: cpp_variable-2.22
# Desc: format of v.v_priv_charp
gdbtk_test cpp_variable-2.22 {format of v.v_priv_charp} {
  $var(v.private.v_priv_charp) format
} {natural}

# Test: cpp_variable-2.22a
# Desc: set variable v->v_priv_charp=2112
gdbtk_test cpp_variable-2.22a {set variable v->v_priv_charp=2112} {
  set err [catch {gdb_cmd "set variable v->v_priv_charp=2112"} txt]
  if {$err} {
    set txt
  } else {
    set err
  }
} {0}

# Test: cpp_variable-2.23
# Desc: value of v.v_priv_charp changed
gdbtk_test cpp_variable-2.23 {value of v.v_priv_charp changed} {
  check_update
} {{{v.public.v_pub_int v.private.v_priv_charp}} {v.private.v_priv_charp v.VB v.private.v_priv_int v.VC v.public.v_pub_charp v.public.v_pub_int v.private v.public v.VA}}

# Test: cpp_variable-2.24
# Desc: value of v.v_priv_charp
gdbtk_test cpp_variable-2.24 {value of v.v_priv_charp} {
  $var(v.private.v_priv_charp) format hexadecimal
  $var(v.private.v_priv_charp) value
} {0x840}

# Test: cpp_variable-2.25
# Desc: changed format of v.v_priv_charp
gdbtk_test cpp_variable-2.25 {changed format of v.v_priv_charp} {
  $var(v.private.v_priv_charp) format octal
  $var(v.private.v_priv_charp) format
} {octal}

# Test: cpp_variable-2.26
# Desc: value of v.v_priv_charp with new format
gdbtk_test cpp_variable-2.26 {value of v.v_priv_charp with new format} {
  $var(v.private.v_priv_charp) value
} {04100}

# Test: cpp_variable-2.27
# Desc: change value of v.v_priv_charp (decimal)
gdbtk_test cpp_variable-2.27 {change value of v.v_priv_charp (decimal)} {
  $var(v.private.v_priv_charp) value 3
  cppvalue v.private.v_priv_charp v.v_priv_charp o
} {ok}

# Test: cpp_variable-2.28
# Desc: change value of v.v_priv_charp (hexadecimal)
gdbtk_test cpp_variable-2.28 {change value of v.v_priv_charp (hexadecimal)} {
  $var(v.private.v_priv_charp) value 0x21
  cppvalue v.private.v_priv_charp v.v_priv_charp o
} {ok}

# Test: cpp_variable-2.29
# Desc: number of children of v_priv_charp
gdbtk_test cpp_variable-2.29 {number of children of v_priv_charp} {
  $var(v.private.v_priv_charp) numChildren
} {1}

# Test: cpp_variable-2.30
# Desc: children of v.v_priv_charp
gdbtk_test cpp_variable-2.30 {children of v.v_priv_charp} {
  get_children v.private.v_priv_charp
} {*v_priv_charp}

# Test: cpp_variable-2.31
# Desc: v.v_priv_int editable
gdbtk_test cpp_variable-2.31 {v.v_priv_int editable} {
  $var(v.private.v_priv_int) editable
} {1}

# Test: cpp_variable-2.41
# Desc: type of v.VA
gdbtk_test cpp_variable-2.41 {type of v.VA} {
  $var(v.VA) type
} {VA}

# Test: cpp_variable-2.42
# Desc: format of v.VA
gdbtk_test cpp_variable-2.42 {format of v.VA} {
  $var(v.VA) format
} {natural}

# Test: cpp_variable-2.43
# Desc: value of v.VA changed
gdbtk_test cpp_variable-2.43 {value of v.VA changed} {
  check_update
} {v.private.v_priv_charp {v.private.v_priv_charp v.VB v.private.v_priv_int v.VC v.public.v_pub_charp v.private.v_priv_charp.*v_priv_charp v.public.v_pub_int v.private v.public v.VA}}

# Test: cpp_variable-2.44
# Desc: value of v.VA
gdbtk_test cpp_variable-2.44 {value of v.VA} {
  $var(v.VA) value
} {{...}}

# Test: cpp_variable-2.45
# Desc: changed format of v.VA
gdbtk_test cpp_variable-2.45 {changed format of v.VA} {
  $var(v.VA) format octal
  $var(v.VA) format
} {octal}

# Test: cpp_variable-2.46
# Desc: value of v.VA with new format
gdbtk_test cpp_variable-2.46 {value of v.VA with new format} {
  $var(v.VA) value
} {{...}}

# Test: cpp_variable-2.47
# Desc: number of children of VA
gdbtk_test cpp_variable-2.47 {number of children of VA} {
  $var(v.VA) numChildren
} {3}

# Test: cpp_variable-2.48a
# Desc: children of v.VA
gdbtk_test cpp_variable-2.48a {children of v.VA} {
  get_children v.VA
} {public private protected}

# Test: cpp_variable-2.48b
# Desc: public children of v.VA
gdbtk_test cpp_variable-2.48b {children of v.VA} {
  get_children v.VA.public
} {va_pub_int va_pub_charp}

# Test: cpp_variable-2.48c
# Desc: private children of v.VA
gdbtk_test cpp_variable-2.48c {children of v.VA} {
  get_children v.VA.private
} {va_priv_int va_priv_charp}

# Test: cpp_variable-2.48d
# Desc: protected children of v.VA
gdbtk_test cpp_variable-2.48d {children of v.VA} {
  get_children v.VA.protected
} {bar}

# Test: cpp_variable-2.49
# Desc: v.VA editable
gdbtk_test cpp_variable-2.49 {v.VA editable} {
  $var(v.VA) editable
} {0}

# Test: cpp_variable-2.61
# Desc: type of v.VB
gdbtk_test cpp_variable-2.61 {type of v.VB} {
  $var(v.VB) type
} {VB}

# Test: cpp_variable-2.62
# Desc: format of v.VB
gdbtk_test cpp_variable-2.62 {format of v.VB} {
  $var(v.VB) format
} {natural}

# Test: cpp_variable-2.63
# Desc: value of v.VB changed
gdbtk_test cpp_variable-2.63 {value of v.VB changed} {
  check_update
} {{} {v.VA.protected v.private.v_priv_charp.*v_priv_charp v.VA.private v.VA.public.va_pub_int v.private.v_priv_int v.public.v_pub_int v.VA.public.va_pub_charp v.private.v_priv_charp v.VA.public v.public.v_pub_charp v.VA.private.va_priv_int v.VA v.public v.VB v.VC v.VA.protected.bar v.VA.private.va_priv_charp v.private}}

# Test: cpp_variable-2.64
 # Desc: value of v.VB
gdbtk_test cpp_variable-2.64 {value of v.VB} {
  $var(v.VB) value
} {{...}}

# Test: cpp_variable-2.65
# Desc: changed format of v.VB
gdbtk_test cpp_variable-2.65 {changed format of v.VB} {
  $var(v.VB) format octal
  $var(v.VB) format
} {octal}

# Test: cpp_variable-2.66
# Desc: value of v.VB with new format
gdbtk_test cpp_variable-2.66 {value of v.VB with new format} {
  $var(v.VB) value
} {{...}}

# Note: The next two tests show whether or not the logic
# concerning vptr tables is working.
# Test: cpp_variable-2.67
# Desc: number of children of VB
gdbtk_test cpp_variable-2.67 {number of children of VB} {
  $var(v.VB) numChildren
} {2}

# Test: cpp_variable-2.68a
# Desc: children of v.VB
gdbtk_test cpp_variable-2.68a {children of v.VB} {
  get_children v.VB
} {public private}

# Test: cpp_variable-2.68b
# Desc: public children of v.VB
gdbtk_test cpp_variable-2.68b {children of v.VB} {
  get_children v.VB.public
} {vb_pub_int}

# Test: cpp_variable-2.68c
# Desc: private children of v.VB
gdbtk_test cpp_variable-2.68c {children of v.VB} {
  get_children v.VB.private
} {vb_priv_int vb_priv_charp}

# Test: cpp_variable-2.69
# Desc: v.VB editable
gdbtk_test cpp_variable-2.69 {v.VB editable} {
  $var(v.VB) editable
} {0}

# Test: cpp_variable-2.70
# Desc: v.VB.public editable
gdbtk_test cpp_variable-2.70 {v.VB.public editable} {
  $var(v.VB.public) editable
} {0}

# Test: cpp_variable-2.71
# Desc: v.VB.vb_pub_int editable
gdbtk_test cpp_variable-2.71 {v.VB.vb_pub_int editable} {
  $var(v.VB.public.vb_pub_int) editable
} {1}

# Test: cpp_variable-2.71a
# Desc: set variable v->vb_pub_int=2112
gdbtk_test cpp_variable-2.71a {set variable v->v_pub_int=2112} {
  set err [catch {gdb_cmd "set variable v->vb_pub_int=2112"} txt]
  if {$err} {
    set txt
  } else {
    set err
  }
} {0}

# Test: cpp_variable-2.72
# Desc: value of v.vb_pub_int changed
gdbtk_test cpp_variable-2.72 {value of v.vb_pub_int changed} {
  check_update
} {v.VB.public.vb_pub_int {v.VB.public v.VA.protected v.private.v_priv_charp.*v_priv_charp v.VA.private v.VB.private.vb_priv_int v.VB.private v.VA.public.va_pub_int v.private.v_priv_int v.VB.public.vb_pub_int v.public.v_pub_int v.VB.private.vb_priv_charp v.VA.public.va_pub_charp v.private.v_priv_charp v.VA.public v.public.v_pub_charp v.VA.private.va_priv_int v.VA v.public v.VB v.VC v.VA.protected.bar v.VA.private.va_priv_charp v.private}}

# Test: cpp_variable-2.73
# Desc: value of v.VB.vb_pub_int
gdbtk_test cpp_variable-2.73 {changed value of v.vb_pub_int} {
  $var(v.VB.public.vb_pub_int) value
} {2112}

# Test: cpp_variable-2.74
# Desc: change value of v.VB.vb_pub_int
gdbtk_test cpp_variable-2.74 {change value of v.VB.public.vb_pub_int} {
  $var(v.VB.public.vb_pub_int) value 3
  cppvalue v.VB.public.vb_pub_int v.vb_pub_int d
} {ok}

# Test: cpp_variable-2.75
# Desc: value of v.VB.vb_pub_int
gdbtk_test cpp_variable-2.75 {changed value of v.VB.public.vb_pub_int} {
  $var(v.VB.public.vb_pub_int) value
} {3}


#  Exit
#
gdbtk_test_done

#Local Variables:
#mode: tcl

