# Copyright (C) 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 the CLI.

if $tracelevel then {
    strace $tracelevel
}

if [is_remote host] {
    untested "py-pp-maint.exp can only be run locally"
    return -1
}

load_lib gdb-python.exp

set testfile "py-pp-maint"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

# Start with a fresh gdb.
gdb_exit
gdb_start

# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "debug"] != "" } {
    untested "Couldn't compile ${srcfile}"
    return -1
}

gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

if ![runto_main ] then {
    fail "Can't run to main"
    return -1
}

gdb_test "b [gdb_get_line_number {break to inspect} ${testfile}.c ]" \
    ".*Breakpoint.*"
gdb_test "continue" ".*Breakpoint.*"

set python_file ${srcdir}/${subdir}/${testfile}.py

gdb_test_no_output "python execfile ('${python_file}')" ""

gdb_test "info pretty-printer" \
    {.*function_lookup_test.*pp-test.*struct ss.*}

gdb_test "info pretty-printer global .*function" \
    {.*function_lookup_test.*}

gdb_test "info pretty-printer .* pp-test" \
    {.*pp-test.*struct ss.*}

gdb_test "print flt" " = x=<42> y=<43>" \
    "print flt enabled #1"

gdb_test "print ss" " = a=<a=<1> b=<$hex>> b=<a=<2> b=<$hex>>" \
    "print ss enabled #1"

gdb_test "disable pretty-printer" \
    "5 printers disabled.*0 of 5 printers enabled"

gdb_test "enable pretty-printer" \
    "5 printers enabled.*5 of 5 printers enabled"

gdb_test "disable pretty-printer global" \
    "5 printers disabled.*0 of 5 printers enabled"

gdb_test "enable pretty-printer" \
    "5 printers enabled.*5 of 5 printers enabled"

gdb_test "disable pretty-printer global lookup_function_lookup_test" \
    "1 printer disabled.*4 of 5 printers enabled"

gdb_test "disable pretty-printer global pp-test;.*" \
    "4 printers disabled.*0 of 5 printers enabled"

gdb_test "info pretty-printer global .*function" \
    {.*function_lookup_test \[disabled\].*}

gdb_test "info pretty-printer .* pp-test" \
    {.*pp-test.*struct ss \[disabled\].*}

gdb_test "print flt" " = {x = 42, y = 43}" \
    "print flt disabled"

gdb_test "print ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \
    "print ss disabled"

gdb_test "enable pretty-printer global lookup_function_lookup_test" \
    "1 printer enabled.*1 of 5 printers enabled"

# This doesn't enable any printers because each subprinter in the collection
# is still individually disabled.  But this is still needed, to enable the
# collection itself.
gdb_test "enable pretty-printer global pp-test" \
    "0 printers enabled.*1 of 5 printers enabled"

gdb_test "enable pretty-printer global pp-test;.*ss.*" \
    "2 printers enabled.*3 of 5 printers enabled"

gdb_test "enable pretty-printer global pp-test;.*s.*" \
    "2 printers enabled.*5 of 5 printers enabled"

gdb_test "info pretty-printer" \
    {.*function_lookup_test.*pp-test.*struct ss.*}

gdb_test "print flt" " = x=<42> y=<43>" \
    "print flt re-enabled"

gdb_test "print ss" " = a=<a=<1> b=<$hex>> b=<a=<2> b=<$hex>>" \
    "print ss re-enabled"
