# Copyright 2023-2025 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/>.

load_lib "pascal.exp"

standard_testfile .pas

if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } {
  return -1
}

clean_restart ${testfile}

if { ![runto_main] } {
    return
}

gdb_breakpoint ${srcfile}:[gdb_get_line_number "set breakpoint 1 here"]

gdb_continue_to_breakpoint "continue to breakpoint"

gdb_test "print message" " = 'abcdefghijklmnopqrstuvwxyz'" \
    "print message with the default settings"

gdb_test_no_output "set print elements 10"
gdb_test "print message" " = 'abcdefghij'\\.\\.\\." \
    "print message with 'print elements' set to 10"

gdb_test_no_output "set print characters 20"
gdb_test "print message" " = 'abcdefghijklmnopqrst'\\.\\.\\." \
    "print message with 'print characters' set to 20"

gdb_test_no_output "set print elements 15"
gdb_test "print message" " = 'abcdefghijklmnopqrst'\\.\\.\\." \
    "print message with 'print elements' set to 15"

gdb_test_no_output "set print characters unlimited"
gdb_test "print message" " = 'abcdefghijklmnopqrstuvwxyz'" \
    "print message with 'print characters' set to unlimited"

gdb_test_no_output "set print characters elements"
gdb_test "print message" " = 'abcdefghijklmno'\\.\\.\\." \
    "print message with 'print characters' set to elements"
