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 | |
| 28 | _git_svn_id = ('svn://svn.chromium.org/chrome/trunk/src@290386' |
| 29 | ' 0039d316-1c4b-4281-b951-d872f2087c98') |
| 30 | |
| 31 | _git_svn_id_footer = 'git-svn-id: %s\n' % _git_svn_id |
| 32 | |
| 33 | _git_svn_id_branch = ( |
| 34 | 'svn://svn.chromium.org/chrome/branches/blabble/src@177288') |
| 35 | |
| 36 | _git_svn_id_footer_branch = 'git-svn-id: %s\n' % _git_svn_id_branch |
| 37 | |
luqui@chromium.org | 0b88762 | 2014-09-03 02:31:03 +0000 | [diff] [blame] | 38 | def testFootersBasic(self): |
| 39 | self.assertEqual( |
tandrii@chromium.org | f2aa52b | 2016-06-03 12:58:20 +0000 | [diff] [blame^] | 40 | git_footers.split_footers('Not-A: footer'), |
| 41 | (['Not-A: footer'], [], [])) |
| 42 | self.assertEqual( |
| 43 | git_footers.split_footers('Header\n\nActual: footer'), |
| 44 | (['Header', ''], ['Actual: footer'], [('Actual', 'footer')])) |
| 45 | self.assertEqual( |
| 46 | git_footers.split_footers('\nActual: footer'), |
| 47 | ([''], ['Actual: footer'], [('Actual', 'footer')])) |
| 48 | |
| 49 | self.assertEqual( |
luqui@chromium.org | 0b88762 | 2014-09-03 02:31:03 +0000 | [diff] [blame] | 50 | git_footers.parse_footers(self._message), {}) |
| 51 | self.assertEqual( |
| 52 | git_footers.parse_footers(self._message + self._position_footer), |
| 53 | { 'Cr-Commit-Position': [ self._position ] }) |
| 54 | self.assertEqual( |
| 55 | git_footers.parse_footers(self._message + self._git_svn_id_footer), |
| 56 | { 'Git-Svn-Id': [ self._git_svn_id ] }) |
| 57 | self.assertEqual( |
| 58 | git_footers.parse_footers(self._message + self._position_footer |
| 59 | + self._position_footer), |
| 60 | { 'Cr-Commit-Position': [ self._position, self._position ] }) |
| 61 | |
| 62 | def testTrunkHeuristic(self): |
| 63 | footers = git_footers.parse_footers(self._message + self._git_svn_id_footer) |
| 64 | self.assertEqual( |
| 65 | footers, |
| 66 | { 'Git-Svn-Id': [ self._git_svn_id ] }) |
| 67 | self.assertEqual( |
| 68 | git_footers.get_position(footers), |
| 69 | ('refs/heads/master', '290386')) |
| 70 | |
| 71 | def testBranchHeuristic(self): |
| 72 | footers = git_footers.parse_footers(self._message + |
| 73 | self._git_svn_id_footer_branch) |
| 74 | self.assertEqual( |
| 75 | footers, |
| 76 | { 'Git-Svn-Id': [ self._git_svn_id_branch ] }) |
| 77 | self.assertEqual( |
| 78 | git_footers.get_position(footers), |
| 79 | ('refs/branch-heads/blabble', None)) |
| 80 | |
tandrii@chromium.org | 3c3c034 | 2016-03-04 11:59:28 +0000 | [diff] [blame] | 81 | def testGetFooterChangeId(self): |
| 82 | msg = '\n'.join(['whatever', |
| 83 | '', |
| 84 | 'Change-Id: ignored', |
| 85 | '', # Above is ignored because of this empty line. |
| 86 | 'Change-Id: Ideadbeaf']) |
| 87 | self.assertEqual(['Ideadbeaf'], git_footers.get_footer_change_id(msg)) |
tandrii@chromium.org | 09d7a6a | 2016-03-04 15:44:48 +0000 | [diff] [blame] | 88 | self.assertEqual([], git_footers.get_footer_change_id( |
| 89 | 'desc\nBUG=not-a-valid-footer\nChange-Id: Ixxx')) |
| 90 | self.assertEqual(['Ixxx'], git_footers.get_footer_change_id( |
| 91 | 'desc\nBUG=not-a-valid-footer\n\nChange-Id: Ixxx')) |
tandrii@chromium.org | 3c3c034 | 2016-03-04 11:59:28 +0000 | [diff] [blame] | 92 | |
| 93 | def testAddFooterChangeId(self): |
tandrii@chromium.org | f2aa52b | 2016-06-03 12:58:20 +0000 | [diff] [blame^] | 94 | with self.assertRaises(AssertionError): |
| 95 | git_footers.add_footer_change_id('Already has\n\nChange-Id: Ixxx', 'Izzz') |
| 96 | |
tandrii@chromium.org | 3c3c034 | 2016-03-04 11:59:28 +0000 | [diff] [blame] | 97 | self.assertEqual( |
| 98 | git_footers.add_footer_change_id('header-only', 'Ixxx'), |
| 99 | 'header-only\n\nChange-Id: Ixxx') |
| 100 | |
| 101 | self.assertEqual( |
| 102 | git_footers.add_footer_change_id('header\n\nsome: footter', 'Ixxx'), |
| 103 | 'header\n\nChange-Id: Ixxx\nsome: footter') |
| 104 | |
| 105 | self.assertEqual( |
| 106 | git_footers.add_footer_change_id('header\n\nBUG: yy', 'Ixxx'), |
| 107 | 'header\n\nBUG: yy\nChange-Id: Ixxx') |
| 108 | |
| 109 | self.assertEqual( |
| 110 | git_footers.add_footer_change_id('header\n\nBUG: yy\nPos: 1', 'Ixxx'), |
| 111 | 'header\n\nBUG: yy\nChange-Id: Ixxx\nPos: 1') |
| 112 | |
| 113 | self.assertEqual( |
| 114 | git_footers.add_footer_change_id('header\n\nBUG: yy\n\nPos: 1', 'Ixxx'), |
| 115 | 'header\n\nBUG: yy\n\nChange-Id: Ixxx\nPos: 1') |
| 116 | |
tandrii@chromium.org | 9fc50db | 2016-03-17 12:38:55 +0000 | [diff] [blame] | 117 | # Special case: first line is never a footer, even if it looks line one. |
| 118 | self.assertEqual( |
| 119 | git_footers.add_footer_change_id('header: like footer', 'Ixxx'), |
| 120 | 'header: like footer\n\nChange-Id: Ixxx') |
| 121 | |
tandrii@chromium.org | f2aa52b | 2016-06-03 12:58:20 +0000 | [diff] [blame^] | 122 | def testAddFooter(self): |
| 123 | self.assertEqual( |
| 124 | git_footers.add_footer('', 'Key', 'Value'), |
| 125 | '\nKey: Value') |
| 126 | self.assertEqual( |
| 127 | git_footers.add_footer('Header with empty line.\n\n', 'Key', 'Value'), |
| 128 | 'Header with empty line.\n\nKey: Value') |
| 129 | |
| 130 | self.assertEqual( |
| 131 | git_footers.add_footer('Top\n\nSome: footer', 'Key', 'value'), |
| 132 | 'Top\n\nSome: footer\nKey: value') |
| 133 | |
| 134 | self.assertEqual( |
| 135 | git_footers.add_footer('Top\n\nSome: footer', 'Key', 'value', |
| 136 | after_keys=['Any']), |
| 137 | 'Top\n\nKey: value\nSome: footer') |
| 138 | |
| 139 | self.assertEqual( |
| 140 | git_footers.add_footer('Top\n\nSome: footer', 'Key', 'value', |
| 141 | after_keys=['Some']), |
| 142 | 'Top\n\nSome: footer\nKey: value') |
| 143 | |
| 144 | self.assertEqual( |
| 145 | git_footers.add_footer('Top\n\nSome: footer\nOther: footer', |
| 146 | 'Key', 'value', after_keys=['Some']), |
| 147 | 'Top\n\nSome: footer\nKey: value\nOther: footer') |
| 148 | |
martiniss@chromium.org | 456ca7f | 2016-05-23 21:33:28 +0000 | [diff] [blame] | 149 | def testReadStdin(self): |
| 150 | self.mock(git_footers.sys, 'stdin', StringIO.StringIO( |
| 151 | 'line\r\notherline\r\n\r\n\r\nFoo: baz')) |
| 152 | |
| 153 | stdout = StringIO.StringIO() |
| 154 | self.mock(git_footers.sys, 'stdout', stdout) |
| 155 | |
| 156 | self.assertEqual(git_footers.main([]), 0) |
| 157 | self.assertEqual(stdout.getvalue(), "Foo: baz\n") |
| 158 | |
| 159 | |
tandrii@chromium.org | 3c3c034 | 2016-03-04 11:59:28 +0000 | [diff] [blame] | 160 | |
luqui@chromium.org | 0b88762 | 2014-09-03 02:31:03 +0000 | [diff] [blame] | 161 | if __name__ == '__main__': |
| 162 | unittest.main() |