# Copyright (C) 2023-2024 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"

mi_gdb_test "python gdb.notify_mi('-test-notification', \{ 'data1' : 1 , 'data2' : 2 })" \
    ".*=-test-notification,data1=\"1\",data2=\"2\"\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"
