# Copyright (C) 2010 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
}

# Ensure sys.path, et.al. are initialized properly.
gdb_check_python_config

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"
