diff options
author | Simon Glass | 2020-10-29 21:46:27 -0600 |
---|---|---|
committer | Simon Glass | 2020-11-05 09:11:31 -0700 |
commit | 7457051e41be1058494bcb96f8ebd05176a3e6cc (patch) | |
tree | 77d5ce508a7beff151678c5222088f9f94165b21 /tools/patman | |
parent | 47f62952cce810c6e02eb216ec32ce69713534a7 (diff) |
patman: Add a test for PatchStream tags
The current functional tests run most of patman. Add a smaller test that
just checks tag handling with the PatchStream class.
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'tools/patman')
-rw-r--r-- | tools/patman/func_test.py | 26 | ||||
-rw-r--r-- | tools/patman/patchstream.py | 23 |
2 files changed, 44 insertions, 5 deletions
diff --git a/tools/patman/func_test.py b/tools/patman/func_test.py index 2290ba95e9d..2a0da8b3ccf 100644 --- a/tools/patman/func_test.py +++ b/tools/patman/func_test.py @@ -31,6 +31,9 @@ except ModuleNotFoundError: class TestFunctional(unittest.TestCase): """Functional tests for checking that patman behaves correctly""" + leb = (b'Lord Edmund Blackadd\xc3\xabr <weasel@blackadder.org>'. + decode('utf-8')) + def setUp(self): self.tmpdir = tempfile.mkdtemp(prefix='patman.') self.gitdir = os.path.join(self.tmpdir, 'git') @@ -177,8 +180,6 @@ class TestFunctional(unittest.TestCase): stefan = b'Stefan Br\xc3\xbcns <stefan.bruens@rwth-aachen.de>'.decode('utf-8') rick = 'Richard III <richard@palace.gov>' mel = b'Lord M\xc3\xablchett <clergy@palace.gov>'.decode('utf-8') - leb = (b'Lond Edmund Blackadd\xc3\xabr <weasel@blackadder.org'. - decode('utf-8')) fred = 'Fred Bloggs <f.bloggs@napier.net>' add_maintainers = [stefan, rick] dry_run = True @@ -187,7 +188,7 @@ class TestFunctional(unittest.TestCase): settings.alias = { 'fdt': ['simon'], 'u-boot': ['u-boot@lists.denx.de'], - 'simon': [leb], + 'simon': [self.leb], 'fred': [fred], } @@ -231,7 +232,7 @@ class TestFunctional(unittest.TestCase): self.assertEqual('Cover: 4 lines', lines[line + 4]) line += 5 self.assertEqual(' Cc: %s' % fred, lines[line + 0]) - self.assertEqual(' Cc: %s' % tools.FromUnicode(leb), + self.assertEqual(' Cc: %s' % tools.FromUnicode(self.leb), lines[line + 1]) self.assertEqual(' Cc: %s' % tools.FromUnicode(mel), lines[line + 2]) @@ -247,7 +248,7 @@ class TestFunctional(unittest.TestCase): self.assertEqual(('%s %s\0%s' % (args[0], rick, stefan)), tools.ToUnicode(cc_lines[0])) self.assertEqual( - '%s %s\0%s\0%s\0%s' % (args[1], fred, leb, rick, stefan), + '%s %s\0%s\0%s\0%s' % (args[1], fred, self.leb, rick, stefan), tools.ToUnicode(cc_lines[1])) expected = ''' @@ -480,3 +481,18 @@ complicated as possible''') self.assertEqual(2, len(patch_files)) finally: os.chdir(orig_dir) + + def testTags(self): + """Test collection of tags in a patchstream""" + text = '''This is a patch + +Signed-off-by: Terminator +Reviewed-by: Joe Bloggs <joe@napierwallies.co.nz> +Reviewed-by: Mary Bloggs <mary@napierwallies.co.nz> +Tested-by: %s +''' % self.leb + pstrm = PatchStream.process_text(text) + self.assertEqual(pstrm.commit.rtags, { + 'Reviewed-by': {'Mary Bloggs <mary@napierwallies.co.nz>', + 'Joe Bloggs <joe@napierwallies.co.nz>'}, + 'Tested-by': {self.leb}}) diff --git a/tools/patman/patchstream.py b/tools/patman/patchstream.py index cf591b27573..d6f6ae92513 100644 --- a/tools/patman/patchstream.py +++ b/tools/patman/patchstream.py @@ -5,6 +5,7 @@ """Handles parsing a stream of commits/emails from 'git log' or other source""" import datetime +import io import math import os import re @@ -81,6 +82,28 @@ class PatchStream: self.state = STATE_MSG_HEADER # What state are we in? self.commit = None # Current commit + @staticmethod + def process_text(text, is_comment=False): + """Process some text through this class using a default Commit/Series + + Args: + text (str): Text to parse + is_comment (bool): True if this is a comment rather than a patch. + If True, PatchStream doesn't expect a patch subject at the + start, but jumps straight into the body + + Returns: + PatchStream: object with results + """ + pstrm = PatchStream(Series()) + pstrm.commit = commit.Commit(None) + infd = io.StringIO(text) + outfd = io.StringIO() + if is_comment: + pstrm.state = STATE_PATCH_HEADER + pstrm.process_stream(infd, outfd) + return pstrm + def _add_warn(self, warn): """Add a new warning to report to the user about the current commit |