tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

code_coverage_utils_test.py (3912B)


      1 # Copyright 2023 The Chromium Authors
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 """Unit tests for code_coverage_utils_test.py."""
      5 
      6 # pylint: disable=protected-access
      7 
      8 import os
      9 import tempfile
     10 import unittest
     11 
     12 from pylib.utils import code_coverage_utils
     13 from py_utils import tempfile_ext
     14 
     15 import mock  # pylint: disable=import-error
     16 
     17 
     18 class MockDevicePathExists:
     19  def __init__(self, value):
     20    self._path_exists = value
     21 
     22  def PathExists(self, directory, retries):  # pylint: disable=unused-argument
     23    return self._path_exists
     24 
     25 
     26 class CodeCoverageUtilsTest(unittest.TestCase):
     27  @mock.patch('subprocess.check_output')
     28  def testMergeCoverageFiles(self, mock_sub):
     29    with tempfile_ext.NamedTemporaryDirectory() as cov_tempd:
     30      pro_tempd = os.path.join(cov_tempd, 'profraw')
     31      os.mkdir(pro_tempd)
     32      profdata = tempfile.NamedTemporaryFile(
     33          dir=pro_tempd,
     34          delete=False,
     35          suffix=code_coverage_utils._PROFRAW_FILE_EXTENSION)
     36      code_coverage_utils.MergeClangCoverageFiles(cov_tempd, pro_tempd)
     37      # Merged file should be deleted.
     38      self.assertFalse(os.path.exists(profdata.name))
     39      self.assertTrue(mock_sub.called)
     40 
     41  @mock.patch('os.path.isfile', return_value=True)
     42  @mock.patch('shutil.rmtree')
     43  @mock.patch('pylib.utils.code_coverage_utils.PullClangCoverageFiles')
     44  @mock.patch('pylib.utils.code_coverage_utils.MergeClangCoverageFiles')
     45  def testPullAndMaybeMergeClangCoverageFiles(self, mock_merge_function,
     46                                              mock_pull_function, mock_rmtree,
     47                                              _):
     48    mock_device = MockDevicePathExists(True)
     49    code_coverage_utils.PullAndMaybeMergeClangCoverageFiles(
     50        mock_device, 'device_coverage_dir', 'output_dir',
     51        'output_subfolder_name')
     52    mock_pull_function.assert_called_with(mock_device, 'device_coverage_dir',
     53                                          'output_dir/output_subfolder_name')
     54    mock_merge_function.assert_called_with(
     55        'output_dir', 'output_dir/output_subfolder_name/device_coverage_dir')
     56    self.assertTrue(mock_rmtree.called)
     57 
     58  @mock.patch('os.path.isfile', return_value=True)
     59  @mock.patch('shutil.rmtree')
     60  @mock.patch('pylib.utils.code_coverage_utils.PullClangCoverageFiles')
     61  @mock.patch('pylib.utils.code_coverage_utils.MergeClangCoverageFiles')
     62  def testPullAndMaybeMergeClangCoverageFilesNoPull(self, mock_merge_function,
     63                                                    mock_pull_function,
     64                                                    mock_rmtree, _):
     65    mock_device = MockDevicePathExists(False)
     66    code_coverage_utils.PullAndMaybeMergeClangCoverageFiles(
     67        mock_device, 'device_coverage_dir', 'output_dir',
     68        'output_subfolder_name')
     69    self.assertFalse(mock_pull_function.called)
     70    self.assertFalse(mock_merge_function.called)
     71    self.assertFalse(mock_rmtree.called)
     72 
     73  @mock.patch('os.path.isfile', return_value=False)
     74  @mock.patch('shutil.rmtree')
     75  @mock.patch('pylib.utils.code_coverage_utils.PullClangCoverageFiles')
     76  @mock.patch('pylib.utils.code_coverage_utils.MergeClangCoverageFiles')
     77  def testPullAndMaybeMergeClangCoverageFilesNoMerge(self, mock_merge_function,
     78                                                     mock_pull_function,
     79                                                     mock_rmtree, _):
     80    mock_device = MockDevicePathExists(True)
     81    code_coverage_utils.PullAndMaybeMergeClangCoverageFiles(
     82        mock_device, 'device_coverage_dir', 'output_dir',
     83        'output_subfolder_name')
     84    mock_pull_function.assert_called_with(mock_device, 'device_coverage_dir',
     85                                          'output_dir/output_subfolder_name')
     86    self.assertFalse(mock_merge_function.called)
     87    self.assertFalse(mock_rmtree.called)
     88 
     89 
     90 if __name__ == '__main__':
     91  unittest.main(verbosity=2)