blob: 5d6c1d28c2af2cb9e4e266b0756e69f3513de911 [file] [log] [blame]
#!/usr/bin/python
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import unittest
import patch_orderfile
import symbol_extractor
class TestPatchOrderFile(unittest.TestCase):
def testRemoveClone(self):
no_clone = "this.does.not.contain.clone"
self.assertEquals(no_clone, patch_orderfile._RemoveClone(no_clone))
with_clone = "this.does.contain.clone."
self.assertEquals(
"this.does.contain", patch_orderfile._RemoveClone(with_clone))
def testAliasClonedSymbols(self):
symbol_infos = [
symbol_extractor.SymbolInfo(name='aSymbol', offset=0x42, size=0x12,
section='.text'),
symbol_extractor.SymbolInfo(name='aSymbol.clone.', offset=8, size=1,
section='.text')]
(offset_to_symbol_infos, name_to_symbol_infos) = \
patch_orderfile._GroupSymbolInfos(symbol_infos)
self.assertEquals(len(offset_to_symbol_infos), 2)
for i in range(2):
s = symbol_infos[i]
matching = offset_to_symbol_infos[s.offset][0]
self.assertEquals(matching.offset, s.offset)
self.assertEquals(matching.size, s.size)
self.assertEquals(len(name_to_symbol_infos), 1)
self.assertEquals(len(name_to_symbol_infos['aSymbol']), 2)
def testGroupSymbolsByOffset(self):
symbol_infos = (
symbol_extractor.SymbolInfo(name='aSymbol', offset=0x42, size=0x12,
section='.text'),
symbol_extractor.SymbolInfo(name='anotherSymbol', offset=0x42, size=1,
section='.text'))
(offset_to_symbol_infos, _) = \
patch_orderfile._GroupSymbolInfos(symbol_infos)
self.assertEquals(len(offset_to_symbol_infos), 1)
self.assertEquals(tuple(offset_to_symbol_infos[0x42]), symbol_infos)
def testExpandSymbols(self):
symbol_name = "dummySymbol"
symbol_name2 = "other"
profiled_symbol_names = [symbol_name, "symbolThatShouldntMatch"]
name_to_symbol_infos = {symbol_name: [
symbol_extractor.SymbolInfo(symbol_name, 0x42, 0x12,
section='.text')]}
offset_to_symbol_infos = {
0x42: [symbol_extractor.SymbolInfo(symbol_name, 0x42, 0x12,
section='.text'),
symbol_extractor.SymbolInfo(symbol_name2, 0x42, 0x12,
section='.text')]}
symbol_names = patch_orderfile._ExpandSymbols(
profiled_symbol_names, name_to_symbol_infos, offset_to_symbol_infos)
self.assertEquals(len(symbol_names), 3)
self.assertEquals(symbol_names[0], symbol_name)
self.assertEquals(symbol_names[1], symbol_name2)
self.assertEquals(symbol_names[2], "symbolThatShouldntMatch")
def testPrintSymbolWithPrefixes(self):
class FakeOutputFile(object):
def __init__(self):
self.output = ''
def write(self, s):
self.output = self.output + s
test_symbol = "dummySymbol"
symbol_names = [test_symbol]
fake_output = FakeOutputFile()
patch_orderfile._PrintSymbolsWithPrefixes(symbol_names, fake_output)
expected_output = """.text.startup.dummySymbol
.text.hot.dummySymbol
.text.unlikely.dummySymbol
.text.dummySymbol
"""
self.assertEquals(fake_output.output, expected_output)
if __name__ == "__main__":
unittest.main()