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

standard_testfile .c

if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
    return -1
}

set bp_location [gdb_get_line_number "START"]
if {![runto "wchar.c:$bp_location"]} {
  return -1
}

gdb_test "print narrow" "= 97 L'a'"

gdb_test "print single" "= 48879 L'\\\\xbeef'"

gdb_test "print simple" "= L\"facile\""

gdb_test "print difficile" "= L\"\\\\xdead\\\\xbeef\\\\xfeed\\\\xface\""

gdb_test "print simple\[2\]" "= 99 L'c'"

gdb_test "print difficile\[2\]" "= 65261 L'\\\\xfeed'"

set cent "\\\\242"

set test "show host-charset"
gdb_test_multiple $test $test {
   -re "CP1252\".*\r\n$gdb_prompt $" {
       # With Windows code page 1252 (Latin 1), the cent
       # is printable.
	set cent "\u00A2"
	pass $test
   }
   -re "$gdb_prompt $" {
	pass $test
   }
}

gdb_test "print repeat" "= L\"A\", '$cent' <repeats 21 times>, \"B.*"

global hex
gdb_test "print repeat_p" \
    "= $hex L\"A\", '$cent' <repeats 21 times>, \"B\""

gdb_test_no_output "set print null on"

gdb_test "print repeat" "= L\"A\", '$cent' <repeats 21 times>, \"B\"" \
    "print repeat (print null on)"

gdb_test_no_output "set print elements 3"

gdb_test "print repeat" "= L\"A$cent$cent\"\.\.\." \
    "print repeat (print elements 3)"

gdb_test "print repeat_p" "= $hex L\"A$cent$cent\"\.\.\." \
    "print repeat_p (print elements 3)"

# From PR cli/14977, but here because it requires wchar_t.
gdb_test "printf \"%ls\\n\", 0" "\\(null\\)"
