From bfe6fc640ab1bd1a09643ec6bc0ad996b4f3e463 Mon Sep 17 00:00:00 2001
From: pompolic <pompolic@special-circumstanc.es>
Date: Mon, 11 Jul 2022 22:55:49 +0200
Subject: [PATCH] Test for calling read_member() with nonexistent member name

---
 gdb-port/tests/unit/ast.py | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/gdb-port/tests/unit/ast.py b/gdb-port/tests/unit/ast.py
index 7fe8bf4..55e29bd 100644
--- a/gdb-port/tests/unit/ast.py
+++ b/gdb-port/tests/unit/ast.py
@@ -99,4 +99,24 @@ class HParseResultCreation(unittest.TestCase):
 
 	# TODO: should read_member employ a whitelist for member_name, or should this trigger an exeption?
 	def test_read_member_invalid_param(self):
-		raise Exception("Not implemented")
+		hpr_pointer_type_patcher = unittest.mock.patch.object(HParseResult, 'HParseResult_t_p', spec=gdb.Type)
+		gdbv_patcher = unittest.mock.patch('gdb.Value', autospec=True)
+		gdb_lookup_type_patcher = unittest.mock.patch.object(gdb, 'lookup_type')
+		init_patcher = unittest.mock.patch.object(HParseResult, '__init__', return_value=None)
+
+		hpr_pointer_type_patcher.start()
+		gdbv_mock_object = gdbv_patcher.start()
+		gdb_lookup_type_mock_object = gdb_lookup_type_patcher.start()
+		init_patcher.start()
+
+		with self.assertRaises(gdb.error):
+			result = HParseResult(0xdeadbeef)
+			result.address = 0xdeadbeef
+			member = result.read_member('invalid_member_value')
+
+		#TODO: ensure these run even if the test fails
+		init_patcher.stop()
+		gdb_lookup_type_patcher.stop()
+		gdbv_patcher.stop()
+		hpr_pointer_type_patcher.stop()
+
-- 
GitLab