From ce1a16c6e3d3a50f11dffef57060bede68c7f2fb Mon Sep 17 00:00:00 2001 From: pompolic <pompolic@special-circumstanc.es> Date: Wed, 13 Jul 2022 22:04:06 +0200 Subject: [PATCH] Fix error when calling ASTManager.set_top_node(None,None) Add tests for .set_top_node(0, None), and .set_top_node(None, None) --- gdb-port/ast.py | 2 +- gdb-port/tests/unit/ast.py | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gdb-port/ast.py b/gdb-port/ast.py index cea0265..75a79ef 100644 --- a/gdb-port/ast.py +++ b/gdb-port/ast.py @@ -221,7 +221,7 @@ class ASTManager: def set_top_node(self, address, parser): # Address has to be an integer or gdb.Value or this will break - if address == 0: + if address is None or address == 0: self.top_node = None else: self.top_node = HParseResult(address) diff --git a/gdb-port/tests/unit/ast.py b/gdb-port/tests/unit/ast.py index d67d232..bd2c0d4 100644 --- a/gdb-port/tests/unit/ast.py +++ b/gdb-port/tests/unit/ast.py @@ -2,6 +2,7 @@ import unittest import unittest.mock # Potential improvement: split testcases with different fixtures needed into their own thing (make_HParsedToken, read_member, read_AST_not_null) +# TODO: reduce boilerplate using setUp(), tearDown() and decorators for testcases with multiple test functions class HParseResultTests(unittest.TestCase): #def test_valid_address(self): # raise ValueError @@ -137,10 +138,27 @@ class ASTManagerSetTopNode(unittest.TestCase): ast_manager = ASTManager() ast_manager.set_top_node(0xdeadbeef, p) - #self.assertEquals(ast_manager.top_node, hpr_mock_object) + # This assert is not too specific, but testing the calls to HParseResult() covers checking that HParseResult() is initialized with the right address + self.assertIsNotNone(ast_manager.top_node) self.assertEqual(ast_manager.parser, p) self.assertEqual(self.hpr_mock_object.mock_calls, [unittest.mock.call(0xdeadbeef)]) + def test_set_top_node_none(self): + ast_manager = ASTManager() + ast_manager.set_top_node(None, None) + + self.assertIsNone(ast_manager.parser) + self.assertIsNone(ast_manager.top_node) + self.assertEqual(self.hpr_mock_object.mock_calls, []) + + def test_set_top_node_zero_address(self): + ast_manager = ASTManager() + ast_manager.set_top_node(0, None) + + self.assertIsNone(ast_manager.parser) + self.assertIsNone(ast_manager.top_node) + self.assertEqual(self.hpr_mock_object.mock_calls, []) + class ASTManagerPrintAST(unittest.TestCase): def setUp(self): self.hpr_patcher = unittest.mock.patch('__main__.HParseResult', autospec=True) -- GitLab