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