blob: a5fb2c730948f5988bbb398d69d61ae19398de53 [file] [log] [blame]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for post_process_orderfile.py."""
from __future__ import division, print_function
import os
import shutil
import tempfile
import unittest
import post_process_orderfile
def _write_nm_file(name):
with open(name, 'w') as out:
out.write('000001 s NotAValidSymbol1\n')
out.write('000002 S NotAValidSymbol2\n')
out.write('000010 t FirstValidSymbol\n')
out.write('000012 t \n')
out.write('000020 T Builtins_SecondValidSymbol\n')
out.write('000030 T $SymbolToIgnore\n')
out.write('000036 T Builtins_LastValidSymbol\n')
def _write_orderfile(name):
with open(name, 'w') as out:
out.write('SymbolOrdered1\n')
out.write('SymbolOrdered2\n')
def _cleanup(files):
for f in files:
shutil.rmtree(f, ignore_errors=True)
class Tests(unittest.TestCase):
"""All of our tests for post_process_orderfile."""
# pylint: disable=protected-access
def test__parse_nm_output(self):
temp_dir = tempfile.mkdtemp()
self.addCleanup(_cleanup, [temp_dir])
chrome_nm_file = os.path.join(temp_dir, 'chrome_nm.txt')
_write_nm_file(chrome_nm_file)
with open(chrome_nm_file) as f:
results = list(post_process_orderfile._parse_nm_output(f))
self.assertEqual(len(results), 3)
self.assertIn('FirstValidSymbol', results)
self.assertIn('Builtins_SecondValidSymbol', results)
self.assertIn('Builtins_LastValidSymbol', results)
def test__remove_duplicates(self):
duplicates = ['marker1', 'marker2', 'marker3', 'marker2', 'marker1']
results = list(post_process_orderfile._remove_duplicates(duplicates))
self.assertEqual(results, ['marker1', 'marker2', 'marker3'])
def test_run(self):
temp_dir = tempfile.mkdtemp()
self.addCleanup(_cleanup, [temp_dir])
orderfile_input = os.path.join(temp_dir, 'orderfile.in.txt')
orderfile_output = os.path.join(temp_dir, 'orderfile.out.txt')
chrome_nm_file = os.path.join(temp_dir, 'chrome_nm.txt')
_write_nm_file(chrome_nm_file)
_write_orderfile(orderfile_input)
with open(orderfile_input) as in_stream, \
open(orderfile_output, 'w') as out_stream, \
open(chrome_nm_file) as chrome_nm_stream:
post_process_orderfile.run(in_stream, chrome_nm_stream, out_stream)
with open(orderfile_output) as check:
results = [x.strip() for x in check.readlines()]
self.assertEqual(
results,
[
# Start marker should be put first.
'chrome_begin_ordered_code',
# Symbols in orderfile come next.
'SymbolOrdered1',
'SymbolOrdered2',
# Builtin functions in chrome_nm come next, and sorted.
'Builtins_LastValidSymbol',
'Builtins_SecondValidSymbol',
# Last symbol should be end marker.
'chrome_end_ordered_code'
])
if __name__ == '__main__':
unittest.main()