tor-browser

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

action_helpers_unittest.py (2657B)


      1 #!/usr/bin/env python3
      2 # Copyright 2023 The Chromium Authors
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 import os
      7 import pathlib
      8 import shutil
      9 import sys
     10 import tempfile
     11 import time
     12 import unittest
     13 
     14 import action_helpers
     15 
     16 
     17 class ActionHelpersTest(unittest.TestCase):
     18  def test_atomic_output(self):
     19    tmp_file = pathlib.Path(tempfile.mktemp())
     20    tmp_file.write_text('test')
     21    try:
     22      # Test that same contents does not change mtime.
     23      orig_mtime = os.path.getmtime(tmp_file)
     24      with action_helpers.atomic_output(str(tmp_file), 'wt') as af:
     25        time.sleep(.01)
     26        af.write('test')
     27 
     28      self.assertEqual(os.path.getmtime(tmp_file), orig_mtime)
     29 
     30      # Test that contents is written.
     31      with action_helpers.atomic_output(str(tmp_file), 'wt') as af:
     32        af.write('test2')
     33      self.assertEqual(tmp_file.read_text(), 'test2')
     34      self.assertNotEqual(os.path.getmtime(tmp_file), orig_mtime)
     35    finally:
     36      tmp_file.unlink()
     37 
     38  def test_parse_gn_list(self):
     39    def test(value, expected):
     40      self.assertEqual(action_helpers.parse_gn_list(value), expected)
     41 
     42    test(None, [])
     43    test('', [])
     44    test('asdf', ['asdf'])
     45    test('["one"]', ['one'])
     46    test(['["one"]', '["two"]'], ['one', 'two'])
     47    test(['["one", "two"]', '["three"]'], ['one', 'two', 'three'])
     48 
     49  def test_write_depfile(self):
     50    tmp_file = pathlib.Path(tempfile.mktemp())
     51    try:
     52 
     53      def capture_output(inputs):
     54        action_helpers.write_depfile(str(tmp_file), 'output', inputs)
     55        return tmp_file.read_text()
     56 
     57      self.assertEqual(capture_output(None), 'output: \n')
     58      self.assertEqual(capture_output([]), 'output: \n')
     59      self.assertEqual(capture_output(['a']), 'output: \\\n a\n')
     60      # Check sorted.
     61      self.assertEqual(capture_output(['b', 'a']), 'output: \\\n a \\\n b\n')
     62      # Check converts to forward slashes.
     63      self.assertEqual(capture_output(['a', os.path.join('b', 'c')]),
     64                       'output: \\\n a \\\n b/c\n')
     65 
     66      # Arg should be a list.
     67      with self.assertRaises(AssertionError):
     68        capture_output('a')
     69 
     70      # Do not use depfile itself as an output.
     71      with self.assertRaises(AssertionError):
     72        capture_output([str(tmp_file)])
     73 
     74      # Do not use absolute paths.
     75      with self.assertRaises(AssertionError):
     76        capture_output([os.path.sep + 'foo'])
     77 
     78      # Do not use absolute paths (output path).
     79      with self.assertRaises(AssertionError):
     80        action_helpers.write_depfile(str(tmp_file), '/output', [])
     81 
     82    finally:
     83      tmp_file.unlink()
     84 
     85 
     86 if __name__ == '__main__':
     87  unittest.main()