chromium/tools/cygprofile/check_orderfile_unittest.py

#!/usr/bin/env vpython3
# Copyright 2015 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import unittest

import check_orderfile
import symbol_extractor


class TestCheckOrderFile(unittest.TestCase):
  _SYMBOL_INFOS = [
      symbol_extractor.SymbolInfo('first', 0x1, 0, ''),
      symbol_extractor.SymbolInfo('second', 0x2, 0, ''),
      symbol_extractor.SymbolInfo('secondSameOffsetA', 0x2, 0, ''),
      symbol_extractor.SymbolInfo('secondSameOffsetB', 0x2, 0, ''),
      symbol_extractor.SymbolInfo('notProfiled', 0x4, 0, ''),
      symbol_extractor.SymbolInfo('third', 0x3, 0, ''),
      symbol_extractor.SymbolInfo('foo.llvm.123', 0x5, 0, ''),
      symbol_extractor.SymbolInfo('atTwoAddresses', 0x6, 0, ''),
      symbol_extractor.SymbolInfo('between', 0x6, 0, ''),
      symbol_extractor.SymbolInfo('atTwoAddresses', 0x8, 0, ''),
  ]

  def testVerifySymbolOrder(self):
    self.assertTrue(
        check_orderfile._VerifySymbolOrder(
            ['nonexistent', 'first', 'eighth', 'third'], self._SYMBOL_INFOS, 0))
    self.assertFalse(
        check_orderfile._VerifySymbolOrder(
            ['second', 'first', 'eighth', 'third'], self._SYMBOL_INFOS, 0))
    self.assertTrue(
        check_orderfile._VerifySymbolOrder(
            ['second', 'first', 'eighth', 'third'], self._SYMBOL_INFOS, 1))
    self.assertFalse(
        check_orderfile._VerifySymbolOrder(
            ['foo.llvm.123', 'first', 'eighth', 'third'], self._SYMBOL_INFOS,
            0))
    self.assertTrue(
        check_orderfile._VerifySymbolOrder(
            ['first', 'eighth', 'third', 'foo.llvm.123'], self._SYMBOL_INFOS,
            0))

  def testVerifySameOffset(self):
    self.assertTrue(
        check_orderfile._VerifySymbolOrder(
            ['first', 'second', 'third', 'secondSameOffsetA'],
            self._SYMBOL_INFOS, 0))
    self.assertTrue(
        check_orderfile._VerifySymbolOrder([
            'first', 'second', 'third', 'secondSameOffsetA', 'foo.llvm.123',
            'secondSameOffsetB'
        ], self._SYMBOL_INFOS, 0))
    self.assertTrue(
        check_orderfile._VerifySymbolOrder(
            ['first', 'secondSameOffsetB', 'third', 'second'],
            self._SYMBOL_INFOS, 0))
    self.assertFalse(
        check_orderfile._VerifySymbolOrder(
            ['first', 'third', 'second', 'secondSameOffsetA'],
            self._SYMBOL_INFOS, 0))

  def testSymbolAtMultipleAddressesIsIgnored(self):
    self.assertTrue(
        check_orderfile._VerifySymbolOrder(['between', 'atTwoAddresses'],
                                           self._SYMBOL_INFOS, 0))
    self.assertTrue(
        check_orderfile._VerifySymbolOrder(['atTwoAddresses', 'between'],
                                           self._SYMBOL_INFOS, 0))

if __name__ == '__main__':
  unittest.main()