| #!/usr/bin/env python3 |
| # |
| # Copyright 2022 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 |
| from unittest import mock |
| |
| import generate_skylab_deps |
| |
| TAST_CONTROL = ''' |
| # Ignore comments |
| tast_disabled_tests_from_chrome_all = [ |
| "example.all.test1", |
| ] |
| tast_disabled_tests_from_chrome_m100 = [ |
| "example.m100.test1", |
| ] |
| tast_disabled_tests_from_lacros_all = [] |
| ''' |
| |
| TAST_EXPR = '"group:mainline" && "dep:chrome" && !informational' |
| |
| REQUIRED_ARGS = ['script', 'generate-filter', '--output', 'output.filter'] |
| |
| |
| class GenerateSkylabDepsTest(unittest.TestCase): |
| |
| def testTastExpr(self): |
| file_mock = mock.mock_open(read_data=TAST_CONTROL) |
| args = REQUIRED_ARGS + ['--tast-expr', TAST_EXPR] |
| |
| with mock.patch('sys.argv', args),\ |
| mock.patch('builtins.open', file_mock),\ |
| mock.patch('os.chmod'),\ |
| mock.patch("json.dump", mock.MagicMock()) as dump: |
| generate_skylab_deps.main() |
| filter_dict = dump.call_args[0][0] |
| self.assertEqual(filter_dict['default'], '(%s)' % TAST_EXPR) |
| |
| def testTastExprAndDisableTests(self): |
| file_mock = mock.mock_open(read_data=TAST_CONTROL) |
| args = REQUIRED_ARGS + [ |
| '--tast-expr', TAST_EXPR, '--disabled-tests', 'disabled.test1', |
| '--disabled-tests', 'disabled.test2' |
| ] |
| |
| with mock.patch('sys.argv', args),\ |
| mock.patch('builtins.open', file_mock),\ |
| mock.patch('os.chmod'),\ |
| mock.patch("json.dump", mock.MagicMock()) as dump: |
| generate_skylab_deps.main() |
| filter_dict = dump.call_args[0][0] |
| self.assertEqual( |
| filter_dict['default'], |
| '(%s && !"name:disabled.test1" && !"name:disabled.test2")' % |
| TAST_EXPR) |
| |
| def testEnableTests(self): |
| file_mock = mock.mock_open(read_data=TAST_CONTROL) |
| args = REQUIRED_ARGS + [ |
| '--enabled-tests', 'enabled.test1', '--enabled-tests', 'enabled.test2' |
| ] |
| |
| with mock.patch('sys.argv', args),\ |
| mock.patch('builtins.open', file_mock),\ |
| mock.patch('os.chmod'),\ |
| mock.patch("json.dump", mock.MagicMock()) as dump: |
| generate_skylab_deps.main() |
| filter_dict = dump.call_args[0][0] |
| self.assertEqual(filter_dict['default'], |
| '("name:enabled.test1" || "name:enabled.test2")') |
| |
| def testTastControlWithTastExpr(self): |
| file_mock = mock.mock_open(read_data=TAST_CONTROL) |
| args = REQUIRED_ARGS + [ |
| '--tast-expr', |
| TAST_EXPR, |
| '--tast-control', |
| 'mocked_input', |
| ] |
| |
| with mock.patch('sys.argv', args),\ |
| mock.patch('builtins.open', file_mock),\ |
| mock.patch('os.chmod'),\ |
| mock.patch("json.dump", mock.MagicMock()) as dump: |
| generate_skylab_deps.main() |
| filter_dict = dump.call_args[0][0] |
| self.assertEqual(filter_dict['default'], '(%s)' % TAST_EXPR) |
| self.assertEqual(filter_dict['tast_disabled_tests_from_chrome_m100'], |
| '(%s && !"name:example.m100.test1")' % TAST_EXPR) |
| |
| def testTastControlWithTastExprAndDisabledTests(self): |
| file_mock = mock.mock_open(read_data=TAST_CONTROL) |
| args = REQUIRED_ARGS + [ |
| '--tast-expr', TAST_EXPR, '--tast-control', 'mocked_input', |
| '--disabled-tests', 'disabled.test1', '--disabled-tests', |
| 'disabled.test2' |
| ] |
| |
| with mock.patch('sys.argv', args),\ |
| mock.patch('builtins.open', file_mock),\ |
| mock.patch('os.chmod'),\ |
| mock.patch("json.dump", mock.MagicMock()) as dump: |
| generate_skylab_deps.main() |
| filter_dict = dump.call_args[0][0] |
| self.assertEqual( |
| filter_dict['default'], |
| '("group:mainline" && "dep:chrome" && !informational && !'\ |
| '"name:disabled.test1" && !"name:disabled.test2")' |
| ) |
| |
| # The list from a set is indeterminent |
| self.assertIn('"group:mainline" && "dep:chrome" && !informational', |
| filter_dict['tast_disabled_tests_from_chrome_m100']) |
| self.assertIn('&& !"name:disabled.test1"', |
| filter_dict['tast_disabled_tests_from_chrome_m100']) |
| self.assertIn('&& !"name:disabled.test2"', |
| filter_dict['tast_disabled_tests_from_chrome_m100']) |
| self.assertIn('&& !"name:example.m100.test1"', |
| filter_dict['tast_disabled_tests_from_chrome_m100']) |
| |
| def testTastControlWithTastExprAndEnabledTests(self): |
| file_mock = mock.mock_open(read_data=TAST_CONTROL) |
| args = REQUIRED_ARGS + [ |
| '--tast-expr', TAST_EXPR, '--tast-control', 'mocked_input', |
| '--enabled-tests', 'enabled.test1', '--enabled-tests', 'enabled.test2' |
| ] |
| |
| with mock.patch('sys.argv', args),\ |
| mock.patch('builtins.open', file_mock),\ |
| mock.patch('os.chmod'),\ |
| mock.patch("json.dump", mock.MagicMock()) as dump: |
| generate_skylab_deps.main() |
| filter_dict = dump.call_args[0][0] |
| self.assertEqual( |
| filter_dict['default'], |
| '("group:mainline" && "dep:chrome" && !informational && '\ |
| '("name:enabled.test1" || "name:enabled.test2"))' |
| ) |
| self.assertEqual( |
| filter_dict['tast_disabled_tests_from_chrome_m100'], |
| '("group:mainline" && "dep:chrome" && !informational && '\ |
| '!"name:example.m100.test1" && ("name:enabled.test1" '\ |
| '|| "name:enabled.test2"))' |
| ) |
| |
| def testTastControlWithEnabledTests(self): |
| file_mock = mock.mock_open(read_data=TAST_CONTROL) |
| args = REQUIRED_ARGS + [ |
| '--tast-control', |
| 'mocked_input', |
| '--enabled-tests', |
| 'enabled.test1', |
| '--enabled-tests', |
| 'enabled.test2', |
| ] |
| |
| with mock.patch('sys.argv', args),\ |
| mock.patch('builtins.open', file_mock),\ |
| mock.patch('os.chmod'),\ |
| mock.patch("json.dump", mock.MagicMock()) as dump: |
| generate_skylab_deps.main() |
| filter_dict = dump.call_args[0][0] |
| # Should not include 'all' collection from TAST_CONTROL since that would |
| # need to be passed in the --disabled-tests to be included |
| self.assertEqual(filter_dict['default'], |
| '("name:enabled.test1" || "name:enabled.test2")') |
| self.assertEqual( |
| filter_dict['tast_disabled_tests_from_chrome_m100'], |
| '(!"name:example.m100.test1" && '\ |
| '("name:enabled.test1" || "name:enabled.test2"))' |
| ) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |