blob: 28f9916548d12101d74214b9ddd22fcf1636087e [file] [log] [blame]
luqui@chromium.org0b887622014-09-03 02:31:03 +00001#!/usr/bin/env python
2
3"""Tests for git_footers."""
4
5import os
martiniss@chromium.org456ca7f2016-05-23 21:33:28 +00006import StringIO
luqui@chromium.org0b887622014-09-03 02:31:03 +00007import sys
8import unittest
9
10sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
11
martiniss@chromium.org456ca7f2016-05-23 21:33:28 +000012from testing_support.auto_stub import TestCase
13
luqui@chromium.org0b887622014-09-03 02:31:03 +000014import git_footers
15
martiniss@chromium.org456ca7f2016-05-23 21:33:28 +000016class GitFootersTest(TestCase):
luqui@chromium.org0b887622014-09-03 02:31:03 +000017 _message = """
18This is my commit message. There are many like it, but this one is mine.
19
20My 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.org0b887622014-09-03 02:31:03 +000038 def testFootersBasic(self):
39 self.assertEqual(
tandrii@chromium.orgf2aa52b2016-06-03 12:58:20 +000040 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.org0b887622014-09-03 02:31:03 +000050 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.org3c3c0342016-03-04 11:59:28 +000081 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.org09d7a6a2016-03-04 15:44:48 +000088 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.org3c3c0342016-03-04 11:59:28 +000092
93 def testAddFooterChangeId(self):
tandrii@chromium.orgf2aa52b2016-06-03 12:58:20 +000094 with self.assertRaises(AssertionError):
95 git_footers.add_footer_change_id('Already has\n\nChange-Id: Ixxx', 'Izzz')
96
tandrii@chromium.org3c3c0342016-03-04 11:59:28 +000097 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.org9fc50db2016-03-17 12:38:55 +0000117 # 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.orgf2aa52b2016-06-03 12:58:20 +0000122 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.org456ca7f2016-05-23 21:33:28 +0000149 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.org3c3c0342016-03-04 11:59:28 +0000160
luqui@chromium.org0b887622014-09-03 02:31:03 +0000161if __name__ == '__main__':
162 unittest.main()