# Copyright (C) 2010-2012 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 [is_remote host] {
    untested "py-pp-maint.exp can only be run locally"
    return -1
}

load_lib gdb-python.exp

standard_testfile

if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
    return -1
}

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

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"

set num_pp 6

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

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

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

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

gdb_test "disable pretty-printer global lookup_function_lookup_test" \
    "1 printer disabled.*[expr $num_pp - 1] of $num_pp printers enabled"

gdb_test "disable pretty-printer global pp-test;.*" \
    "[expr $num_pp - 1] printers disabled.*0 of $num_pp 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 $num_pp 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 $num_pp printers enabled"

gdb_test "enable pretty-printer global pp-test;.*ss.*" \
    "2 printers enabled.*[expr $num_pp - 3] of $num_pp printers enabled"

gdb_test "enable pretty-printer global pp-test;.*s.*" \
    "2 printers enabled.*[expr $num_pp - 1] of $num_pp printers enabled"

gdb_test "enable pretty-printer global pp-test;.*" \
    "1 printer enabled.*$num_pp of $num_pp 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"

gdb_test "print (enum flag_enum) (FLAG_1)" \
    " = 0x1 .FLAG_1." \
    "print FLAG_1"

gdb_test "print (enum flag_enum) (FLAG_1 | FLAG_3)" \
    " = 0x5 .FLAG_1 | FLAG_3." \
    "print FLAG_1 | FLAG_3"

gdb_test "print (enum flag_enum) (4 + 8)" \
    " = 0xc .FLAG_1 | <unknown: 0x8>." \
    "print FLAG_1 | 8"
