# Copyright (C) 2023-2026 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/>.

# Test custom MI notifications implemented in Python.

load_lib gdb-python.exp
load_lib mi-support.exp
set MIFLAGS "-i=mi"

gdb_exit
if {[mi_gdb_start]} {
    return
}

if {[lsearch -exact [mi_get_features] python] < 0} {
    unsupported "python support is disabled"
    return -1
}

standard_testfile

mi_gdb_test "set python print-stack full" \
    ".*\\^done" \
    "set python print-stack full"

mi_gdb_test "python gdb.notify_mi('-test-notification')" \
    ".*=-test-notification\r\n\\^done" \
    "python notification, no additional data parameter"

mi_gdb_test "python gdb.notify_mi('-test-notification', None)" \
    ".*=-test-notification\r\n\\^done" \
    "python notification, no additional data"

set re_data1 {data1="1"}
set re_data2 {data2="2"}
set re_data1_data2 ($re_data1,$re_data2|$re_data2,$re_data1)
mi_gdb_test "python gdb.notify_mi('-test-notification', \{ 'data1' : 1 , 'data2' : 2 })" \
    ".*=-test-notification,$re_data1_data2\r\n\\^done" \
    "python notification, with additional data"

mi_gdb_test "python gdb.notify_mi('-test-notification', 1)" \
    ".*\\^error,msg=\".*\"" \
    "python notification, invalid additional data"

mi_gdb_test "python gdb.notify_mi('', None)" \
    ".*\\^error,msg=\".*\"" \
    "python notification, empty notification name"

mi_gdb_test "python gdb.notify_mi('**invalid**', None)" \
    ".*\\^error,msg=\".*\"" \
    "python notification, invalid notification name"

mi_gdb_test "python gdb.notify_mi(\[1,2,3\], None)" \
    ".*\\^error,msg=\".*\"" \
    "python notification, non-string notification name"

mi_gdb_test "python gdb.notify_mi()" \
    ".*\\^error,msg=\".*\"" \
    "python notification, no arguments passed"

mi_gdb_test "python gdb.notify_mi('thread-group-added', \{'id' : 'i2'\})" \
    ".*=thread-group-added,id=\"i2\"\r\n\\^done" \
    "python notification, using existing internal notification name"
