xref: /aosp_15_r20/external/pigweed/pw_symbolizer/py/symbolizer_test.py (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2021 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Worker"""Tests for pw_symbolizer's python tooling."""
15*61c4878aSAndroid Build Coastguard Worker
16*61c4878aSAndroid Build Coastguard Workerimport unittest
17*61c4878aSAndroid Build Coastguard Workerimport pw_symbolizer
18*61c4878aSAndroid Build Coastguard Worker
19*61c4878aSAndroid Build Coastguard Worker
20*61c4878aSAndroid Build Coastguard Workerclass TestSymbolFormatting(unittest.TestCase):
21*61c4878aSAndroid Build Coastguard Worker    """Tests Symbol objects to validate formatted output."""
22*61c4878aSAndroid Build Coastguard Worker
23*61c4878aSAndroid Build Coastguard Worker    def test_blank_symbol(self):
24*61c4878aSAndroid Build Coastguard Worker        sym = pw_symbolizer.Symbol(address=0x00000000, name='', file='', line=0)
25*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('??:?', sym.file_and_line())
26*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('0x00000000 (??:?)', str(sym))
27*61c4878aSAndroid Build Coastguard Worker
28*61c4878aSAndroid Build Coastguard Worker    def test_default_symbol(self):
29*61c4878aSAndroid Build Coastguard Worker        sym = pw_symbolizer.Symbol(address=0x0000A400)
30*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('??:?', sym.file_and_line())
31*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('0x0000A400 (??:?)', str(sym))
32*61c4878aSAndroid Build Coastguard Worker
33*61c4878aSAndroid Build Coastguard Worker    def test_to_str(self):
34*61c4878aSAndroid Build Coastguard Worker        sym = pw_symbolizer.Symbol(
35*61c4878aSAndroid Build Coastguard Worker            address=0x12345678,
36*61c4878aSAndroid Build Coastguard Worker            name='idle_thread_context',
37*61c4878aSAndroid Build Coastguard Worker            file='device/system/threads.cc',
38*61c4878aSAndroid Build Coastguard Worker            line=59,
39*61c4878aSAndroid Build Coastguard Worker        )
40*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('device/system/threads.cc:59', sym.file_and_line())
41*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(
42*61c4878aSAndroid Build Coastguard Worker            'idle_thread_context (device/system/threads.cc:59)', str(sym)
43*61c4878aSAndroid Build Coastguard Worker        )
44*61c4878aSAndroid Build Coastguard Worker
45*61c4878aSAndroid Build Coastguard Worker    def test_truncated_filename(self):
46*61c4878aSAndroid Build Coastguard Worker        sym = pw_symbolizer.Symbol(
47*61c4878aSAndroid Build Coastguard Worker            address=0x12345678,
48*61c4878aSAndroid Build Coastguard Worker            name='idle_thread_context',
49*61c4878aSAndroid Build Coastguard Worker            file='device/system/threads.cc',
50*61c4878aSAndroid Build Coastguard Worker            line=59,
51*61c4878aSAndroid Build Coastguard Worker        )
52*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(
53*61c4878aSAndroid Build Coastguard Worker            'idle_thread_context ([...]stem/threads.cc:59)',
54*61c4878aSAndroid Build Coastguard Worker            sym.to_string(max_filename_len=15),
55*61c4878aSAndroid Build Coastguard Worker        )
56*61c4878aSAndroid Build Coastguard Worker
57*61c4878aSAndroid Build Coastguard Worker
58*61c4878aSAndroid Build Coastguard Workerclass TestFakeSymbolizer(unittest.TestCase):
59*61c4878aSAndroid Build Coastguard Worker    """Tests the FakeSymbolizer class."""
60*61c4878aSAndroid Build Coastguard Worker
61*61c4878aSAndroid Build Coastguard Worker    def test_empty_db(self):
62*61c4878aSAndroid Build Coastguard Worker        symbolizer = pw_symbolizer.FakeSymbolizer()
63*61c4878aSAndroid Build Coastguard Worker        symbol = symbolizer.symbolize(0x404)
64*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(symbol.address, 0x404)
65*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(symbol.name, '')
66*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(symbol.file, '')
67*61c4878aSAndroid Build Coastguard Worker
68*61c4878aSAndroid Build Coastguard Worker    def test_db_with_entries(self):
69*61c4878aSAndroid Build Coastguard Worker        known_symbols = (
70*61c4878aSAndroid Build Coastguard Worker            pw_symbolizer.Symbol(
71*61c4878aSAndroid Build Coastguard Worker                0x404, 'do_a_flip(int n)', 'source/tricks.cc', 1403
72*61c4878aSAndroid Build Coastguard Worker            ),
73*61c4878aSAndroid Build Coastguard Worker            pw_symbolizer.Symbol(
74*61c4878aSAndroid Build Coastguard Worker                0xFFFFFFFF,
75*61c4878aSAndroid Build Coastguard Worker                'a_variable_here_would_be_funny',
76*61c4878aSAndroid Build Coastguard Worker                'source/globals.cc',
77*61c4878aSAndroid Build Coastguard Worker                21,
78*61c4878aSAndroid Build Coastguard Worker            ),
79*61c4878aSAndroid Build Coastguard Worker        )
80*61c4878aSAndroid Build Coastguard Worker        symbolizer = pw_symbolizer.FakeSymbolizer(known_symbols)
81*61c4878aSAndroid Build Coastguard Worker
82*61c4878aSAndroid Build Coastguard Worker        symbol = symbolizer.symbolize(0x404)
83*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(symbol.address, 0x404)
84*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(symbol.name, 'do_a_flip(int n)')
85*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(symbol.file, 'source/tricks.cc')
86*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(symbol.line, 1403)
87*61c4878aSAndroid Build Coastguard Worker
88*61c4878aSAndroid Build Coastguard Worker        symbol = symbolizer.symbolize(0xFFFFFFFF)
89*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(symbol.address, 0xFFFFFFFF)
90*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(symbol.name, 'a_variable_here_would_be_funny')
91*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(symbol.file, 'source/globals.cc')
92*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(symbol.line, 21)
93*61c4878aSAndroid Build Coastguard Worker
94*61c4878aSAndroid Build Coastguard Worker
95*61c4878aSAndroid Build Coastguard Workerif __name__ == '__main__':
96*61c4878aSAndroid Build Coastguard Worker    unittest.main()
97