[M120 Migration][VD] Fix url crash in RequestCertificateConfirm
[platform/framework/web/chromium-efl.git] / build / action_helpers_unittest.py
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()