aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite
diff options
context:
space:
mode:
authorJan Vrany <jan.vrany@labware.com>2023-10-10 11:22:56 +0100
committerJan Vrany <jan.vrany@labware.com>2023-10-10 11:22:56 +0100
commit4825fd2d3552a047264a1f3d900ce30047a8c5f6 (patch)
tree0cdbeb05638b51fb0f27fef50ce81c7e3e366682 /gdb/testsuite
parent80a3485f81303639c7212a15cf9e453a830913f8 (diff)
downloadgdb-4825fd2d3552a047264a1f3d900ce30047a8c5f6.zip
gdb-4825fd2d3552a047264a1f3d900ce30047a8c5f6.tar.gz
gdb-4825fd2d3552a047264a1f3d900ce30047a8c5f6.tar.bz2
gdb/python: implement support for sending custom MI async notifications
This commit adds a new Python function, gdb.notify_mi, that can be used to emit custom async notification to MI channel. This can be used, among other things, to implement notifications about events MI does not support, such as remote connection closed or register change. Reviewed-By: Eli Zaretskii <eliz@gnu.org> Approved-By: Andrew Burgess <aburgess@redhat.com>
Diffstat (limited to 'gdb/testsuite')
-rw-r--r--gdb/testsuite/gdb.python/py-mi-notify.exp71
1 files changed, 71 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.python/py-mi-notify.exp b/gdb/testsuite/gdb.python/py-mi-notify.exp
new file mode 100644
index 0000000..8ba7703
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-mi-notify.exp
@@ -0,0 +1,71 @@
+# Copyright (C) 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/>.
+
+# 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"