# Copyright (C) 2010-2013 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 exec (open ('${python_file}').read ())" ""

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"
