luqui@chromium.org | 0b88762 | 2014-09-03 02:31:03 +0000 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | |
| 3 | """Tests for git_footers.""" |
| 4 | |
| 5 | import os |
martiniss@chromium.org | 456ca7f | 2016-05-23 21:33:28 +0000 | [diff] [blame] | 6 | import StringIO |
luqui@chromium.org | 0b88762 | 2014-09-03 02:31:03 +0000 | [diff] [blame] | 7 | import sys |
| 8 | import unittest |
| 9 | |
| 10 | sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
| 11 | |
martiniss@chromium.org | 456ca7f | 2016-05-23 21:33:28 +0000 | [diff] [blame] | 12 | from testing_support.auto_stub import TestCase |
| 13 | |
luqui@chromium.org | 0b88762 | 2014-09-03 02:31:03 +0000 | [diff] [blame] | 14 | import git_footers |
| 15 | |
martiniss@chromium.org | 456ca7f | 2016-05-23 21:33:28 +0000 | [diff] [blame] | 16 | class GitFootersTest(TestCase): |
luqui@chromium.org | 0b88762 | 2014-09-03 02:31:03 +0000 | [diff] [blame] | 17 | _message = """ |
| 18 | This is my commit message. There are many like it, but this one is mine. |
| 19 | |
| 20 | My commit message is my best friend. It is my life. I must master it. |
| 21 | |
| 22 | """ |
| 23 | |
| 24 | _position = 'refs/heads/master@{#292272}' |
| 25 | |
| 26 | _position_footer = 'Cr-Commit-Position: %s\n' % _position |
| 27 | |
luqui@chromium.org | 0b88762 | 2014-09-03 02:31:03 +0000 | [diff] [blame] | 28 | def testFootersBasic(self): |
| 29 | self.assertEqual( |
tandrii@chromium.org | f2aa52b | 2016-06-03 12:58:20 +0000 | [diff] [blame] | 30 | git_footers.split_footers('Not-A: footer'), |
| 31 | (['Not-A: footer'], [], [])) |
| 32 | self.assertEqual( |
| 33 | git_footers.split_footers('Header\n\nActual: footer'), |
| 34 | (['Header', ''], ['Actual: footer'], [('Actual', 'footer')])) |
| 35 | self.assertEqual( |
| 36 | git_footers.split_footers('\nActual: footer'), |
| 37 | ([''], ['Actual: footer'], [('Actual', 'footer')])) |
Andrii Shyshkalov | 80cae42 | 2017-04-27 01:01:42 +0200 | [diff] [blame^] | 38 | self.assertEqual( |
| 39 | git_footers.split_footers('H\n\nBug:\nAlso: footer'), |
| 40 | (['H', ''], ['Bug:', 'Also: footer'], |
| 41 | [('Bug', ''), ('Also', 'footer')])) |
| 42 | self.assertEqual( |
| 43 | git_footers.split_footers('H\n\nBug: '), |
| 44 | (['H', ''], ['Bug: '], [('Bug', '')])) |
tandrii@chromium.org | f2aa52b | 2016-06-03 12:58:20 +0000 | [diff] [blame] | 45 | |
| 46 | self.assertEqual( |
luqui@chromium.org | 0b88762 | 2014-09-03 02:31:03 +0000 | [diff] [blame] | 47 | git_footers.parse_footers(self._message), {}) |
| 48 | self.assertEqual( |
| 49 | git_footers.parse_footers(self._message + self._position_footer), |
| 50 | { 'Cr-Commit-Position': [ self._position ] }) |
| 51 | self.assertEqual( |
luqui@chromium.org | 0b88762 | 2014-09-03 02:31:03 +0000 | [diff] [blame] | 52 | git_footers.parse_footers(self._message + self._position_footer |
| 53 | + self._position_footer), |
| 54 | { 'Cr-Commit-Position': [ self._position, self._position ] }) |
Andrii Shyshkalov | 80cae42 | 2017-04-27 01:01:42 +0200 | [diff] [blame^] | 55 | self.assertEqual( |
| 56 | git_footers.parse_footers(self._message + |
| 57 | 'Bug:\n' + |
| 58 | self._position_footer), |
| 59 | { 'Bug': [''], |
| 60 | 'Cr-Commit-Position': [ self._position ] }) |
| 61 | |
luqui@chromium.org | 0b88762 | 2014-09-03 02:31:03 +0000 | [diff] [blame] | 62 | |
tandrii@chromium.org | 3c3c034 | 2016-03-04 11:59:28 +0000 | [diff] [blame] | 63 | def testGetFooterChangeId(self): |
| 64 | msg = '\n'.join(['whatever', |
| 65 | '', |
| 66 | 'Change-Id: ignored', |
| 67 | '', # Above is ignored because of this empty line. |
| 68 | 'Change-Id: Ideadbeaf']) |
| 69 | self.assertEqual(['Ideadbeaf'], git_footers.get_footer_change_id(msg)) |
tandrii@chromium.org | 09d7a6a | 2016-03-04 15:44:48 +0000 | [diff] [blame] | 70 | self.assertEqual([], git_footers.get_footer_change_id( |
| 71 | 'desc\nBUG=not-a-valid-footer\nChange-Id: Ixxx')) |
| 72 | self.assertEqual(['Ixxx'], git_footers.get_footer_change_id( |
| 73 | 'desc\nBUG=not-a-valid-footer\n\nChange-Id: Ixxx')) |
tandrii@chromium.org | 3c3c034 | 2016-03-04 11:59:28 +0000 | [diff] [blame] | 74 | |
| 75 | def testAddFooterChangeId(self): |
tandrii@chromium.org | f2aa52b | 2016-06-03 12:58:20 +0000 | [diff] [blame] | 76 | with self.assertRaises(AssertionError): |
| 77 | git_footers.add_footer_change_id('Already has\n\nChange-Id: Ixxx', 'Izzz') |
| 78 | |
tandrii@chromium.org | 3c3c034 | 2016-03-04 11:59:28 +0000 | [diff] [blame] | 79 | self.assertEqual( |
| 80 | git_footers.add_footer_change_id('header-only', 'Ixxx'), |
| 81 | 'header-only\n\nChange-Id: Ixxx') |
| 82 | |
| 83 | self.assertEqual( |
| 84 | git_footers.add_footer_change_id('header\n\nsome: footter', 'Ixxx'), |
| 85 | 'header\n\nChange-Id: Ixxx\nsome: footter') |
| 86 | |
| 87 | self.assertEqual( |
| 88 | git_footers.add_footer_change_id('header\n\nBUG: yy', 'Ixxx'), |
| 89 | 'header\n\nBUG: yy\nChange-Id: Ixxx') |
| 90 | |
| 91 | self.assertEqual( |
| 92 | git_footers.add_footer_change_id('header\n\nBUG: yy\nPos: 1', 'Ixxx'), |
| 93 | 'header\n\nBUG: yy\nChange-Id: Ixxx\nPos: 1') |
| 94 | |
| 95 | self.assertEqual( |
| 96 | git_footers.add_footer_change_id('header\n\nBUG: yy\n\nPos: 1', 'Ixxx'), |
| 97 | 'header\n\nBUG: yy\n\nChange-Id: Ixxx\nPos: 1') |
| 98 | |
tandrii@chromium.org | 9fc50db | 2016-03-17 12:38:55 +0000 | [diff] [blame] | 99 | # Special case: first line is never a footer, even if it looks line one. |
| 100 | self.assertEqual( |
| 101 | git_footers.add_footer_change_id('header: like footer', 'Ixxx'), |
| 102 | 'header: like footer\n\nChange-Id: Ixxx') |
| 103 | |
tandrii@chromium.org | f2aa52b | 2016-06-03 12:58:20 +0000 | [diff] [blame] | 104 | def testAddFooter(self): |
| 105 | self.assertEqual( |
| 106 | git_footers.add_footer('', 'Key', 'Value'), |
| 107 | '\nKey: Value') |
| 108 | self.assertEqual( |
| 109 | git_footers.add_footer('Header with empty line.\n\n', 'Key', 'Value'), |
| 110 | 'Header with empty line.\n\nKey: Value') |
| 111 | |
| 112 | self.assertEqual( |
| 113 | git_footers.add_footer('Top\n\nSome: footer', 'Key', 'value'), |
| 114 | 'Top\n\nSome: footer\nKey: value') |
| 115 | |
| 116 | self.assertEqual( |
| 117 | git_footers.add_footer('Top\n\nSome: footer', 'Key', 'value', |
| 118 | after_keys=['Any']), |
| 119 | 'Top\n\nKey: value\nSome: footer') |
| 120 | |
| 121 | self.assertEqual( |
| 122 | git_footers.add_footer('Top\n\nSome: footer', 'Key', 'value', |
| 123 | after_keys=['Some']), |
| 124 | 'Top\n\nSome: footer\nKey: value') |
| 125 | |
| 126 | self.assertEqual( |
| 127 | git_footers.add_footer('Top\n\nSome: footer\nOther: footer', |
| 128 | 'Key', 'value', after_keys=['Some']), |
| 129 | 'Top\n\nSome: footer\nKey: value\nOther: footer') |
| 130 | |
martiniss@chromium.org | 456ca7f | 2016-05-23 21:33:28 +0000 | [diff] [blame] | 131 | def testReadStdin(self): |
| 132 | self.mock(git_footers.sys, 'stdin', StringIO.StringIO( |
| 133 | 'line\r\notherline\r\n\r\n\r\nFoo: baz')) |
| 134 | |
| 135 | stdout = StringIO.StringIO() |
| 136 | self.mock(git_footers.sys, 'stdout', stdout) |
| 137 | |
| 138 | self.assertEqual(git_footers.main([]), 0) |
| 139 | self.assertEqual(stdout.getvalue(), "Foo: baz\n") |
| 140 | |
| 141 | |
tandrii@chromium.org | 3c3c034 | 2016-03-04 11:59:28 +0000 | [diff] [blame] | 142 | |
luqui@chromium.org | 0b88762 | 2014-09-03 02:31:03 +0000 | [diff] [blame] | 143 | if __name__ == '__main__': |
| 144 | unittest.main() |