blob: cbc9658110f70967e2cbe20e0acb112e4fb54c3f [file] [log] [blame] [edit]
#!/usr/bin/env python3
# Copyright 2023 Google Inc.
# 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 PRESUBMIT
from PRESUBMIT_test_mocks import MockFile, MockAffectedFile
from PRESUBMIT_test_mocks import MockInputApi, MockOutputApi
class ReleaseNotesTest(unittest.TestCase):
def testNoEditTopReleaseNotesNoWarning(self):
mock_input_api = MockInputApi()
mock_input_api.files = [
MockFile('README.chromium', ''),
]
mock_output_api = MockOutputApi()
results = PRESUBMIT._CheckTopReleaseNotesChanged(
mock_input_api, mock_output_api)
self.assertEqual(0, len(results))
def testUpdateTopReleaseNotesIssuesWarning(self):
mock_input_api = MockInputApi()
mock_input_api.files = [
MockFile('RELEASE_NOTES.md', ''),
]
mock_output_api = MockOutputApi()
results = PRESUBMIT._CheckTopReleaseNotesChanged(
mock_input_api, mock_output_api)
self.assertEqual(1, len(results))
self.assertIsInstance(
results[0], mock_output_api.PresubmitPromptWarning, 'Not a warning')
self.assertTrue(results[0].message.startswith(
'Do not edit RELEASE_NOTES.md'))
def testUpdateTopReleaseNotesNoWarning(self):
mock_input_api = MockInputApi()
mock_input_api.files = [
MockFile('RELEASE_NOTES.md', ''),
MockFile('relnotes/deleted_note.md', ''),
]
mock_output_api = MockOutputApi()
results = PRESUBMIT._CheckTopReleaseNotesChanged(
mock_input_api, mock_output_api)
self.assertEqual(0, len(results))
def testUpdatePublicHeaderAndNoReleaseNoteGeneratesWarning(self):
mock_input_api = MockInputApi()
mock_input_api.files = [
MockFile('include/core/SkDrawable.h', ''),
]
mock_output_api = MockOutputApi()
results = PRESUBMIT._CheckReleaseNotesForPublicAPI(
mock_input_api, mock_output_api)
self.assertEqual(1, len(results))
self.assertIsInstance(
results[0], mock_output_api.PresubmitPromptWarning, 'Not a warning')
def testUpdatePublicHeaderAndReleaseNoteGeneratesNoWarning(self):
mock_input_api = MockInputApi()
mock_input_api.files = [
MockFile('include/core/SkDrawable.h', ''),
MockFile('relnotes/new_note.md', ''),
]
mock_output_api = MockOutputApi()
results = PRESUBMIT._CheckReleaseNotesForPublicAPI(
mock_input_api, mock_output_api)
self.assertEqual(0, len(results))
class RunCommandAndCheckDiffTest(unittest.TestCase):
def setUp(self):
self.foo_file = MockAffectedFile('foo.txt', new_contents=['foo'])
self.bar_file = MockAffectedFile('bar.txt', new_contents=['bar'])
self.mock_input_api = MockInputApi()
self.mock_input_api.files = [self.foo_file, self.bar_file]
self.mock_output_api = MockOutputApi()
def setContents(self, file, contents):
file._new_contents = contents
@mock.patch('subprocess.check_output')
def testNoChangesReturnsNoResults(self, mock_subprocess):
results = PRESUBMIT._RunCommandAndCheckDiff(self.mock_output_api, [], [])
self.assertEqual(results, [])
@mock.patch('subprocess.check_output')
def testChangingIrrelevantFilesReturnsNoResults(self, mock_subprocess):
mock_subprocess.side_effect = lambda *args, **kwargs: self.setContents(self.bar_file, ['foo'])
results = PRESUBMIT._RunCommandAndCheckDiff(
self.mock_output_api, ['cmd'], [self.foo_file],
)
self.assertEqual(results, [])
@mock.patch('subprocess.check_output')
def testChangingRelevantFilesReturnsDiff(self, mock_subprocess):
mock_subprocess.side_effect = lambda *args, **kwargs: self.setContents(self.foo_file, ['bar'])
results = PRESUBMIT._RunCommandAndCheckDiff(
self.mock_output_api, ['cmd'], [self.foo_file],
)
self.assertEqual(len(results), 1)
self.assertEqual(results[0].message,
"""Diffs found after running "cmd":
--- foo.txt
+++ foo.txt
@@ -1 +1 @@
-foo
+bar
Please commit or discard the above changes.""")
if __name__ == '__main__':
unittest.main()