blob: 55440f3aabec70b5c72d30d6e5b5389707380065 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2023 The DevTools Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from io import StringIO
import contextlib
import logging
import sys
import unittest
update_goldens = __import__('update_goldens')
class UpdateGoldensTestCase(unittest.TestCase):
def __init__(self, methodName):
super().__init__(methodName=methodName)
self.log = logging.getLogger("TestLog")
def setUp(self):
self.orig_stdout = sys.stdout
self.orig_stderr = sys.stderr
self.stdout = StringIO()
self.stderr = StringIO()
sys.stdout = self.stdout
sys.stderr = self.stderr
return super().setUp()
def tearDown(self):
sys.stdout = self.orig_stdout
sys.stderr = self.orig_stderr
return super().tearDown()
@contextlib.contextmanager
def mocking(self, *args):
old_impls = {}
for mock_function in args:
function_name = mock_function.__name__[5:] # drop 'mock_' prefix
old_impls[function_name] = update_goldens.__dict__[function_name]
update_goldens.__dict__[function_name] = mock_function
yield
for name, function in old_impls.items():
update_goldens.__dict__[name] = function
def try_main(self, *args):
try:
update_goldens.main(update_goldens.ProjectConfig(), args)
except RuntimeError as e:
self.log.debug(e)
finally:
return (self.stdout.getvalue(), self.stderr.getvalue()) # pylint: disable=lost-exception
def test_no_args(self):
out, _ = self.try_main()
self.assertTrue(out.startswith('usage'))
def test_trigger_triggered(self):
# pylint: disable=unused-argument
def mock_screenshot_results(patchset=None):
return ["dummy result"]
with self.mocking(mock_screenshot_results):
out, _ = self.try_main('trigger')
self.assertEqual(out, update_goldens.WARNING_RESULTS_EXIST + '\n')
def test_trigger_triggered_ignore(self):
# pylint: disable=unused-argument
def mock_screenshot_results(patchset=None):
return ["dummy result"]
# pylint: disable=unused-argument
def mock_run_command(command, verbose, message=None):
# pylint: disable=attribute-defined-outside-init
self.captured_command = command
with self.mocking(mock_screenshot_results, mock_run_command):
out, _ = self.try_main('trigger', '--ignore-triggered')
self.assertIn(update_goldens.WARNING_RESULTS_EXIST, out)
self.assertIn("Ignoring", out)
self.assertIn(update_goldens.INFO_BUILDERS_TRIGGERED, out)
self.assertEqual(len(self.captured_command), 11)
self.assertEqual(self.captured_command[:3], ['git', 'cl', 'try'])
if __name__ == '__main__':
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
unittest.main()