blob: 1ae6dd1854f583b46fe38bed53aef1e4ea5d887d [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
luqui@chromium.org0b887622014-09-03 02:31:03 +000028 def testFootersBasic(self):
29 self.assertEqual(
tandrii@chromium.orgf2aa52b2016-06-03 12:58:20 +000030 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 Shyshkalov80cae422017-04-27 01:01:42 +020038 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.orgf2aa52b2016-06-03 12:58:20 +000045
46 self.assertEqual(
luqui@chromium.org0b887622014-09-03 02:31:03 +000047 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.org0b887622014-09-03 02:31:03 +000052 git_footers.parse_footers(self._message + self._position_footer
53 + self._position_footer),
54 { 'Cr-Commit-Position': [ self._position, self._position ] })
Andrii Shyshkalov80cae422017-04-27 01:01:42 +020055 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.org0b887622014-09-03 02:31:03 +000062
tandrii@chromium.org3c3c0342016-03-04 11:59:28 +000063 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.org09d7a6a2016-03-04 15:44:48 +000070 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.org3c3c0342016-03-04 11:59:28 +000074
75 def testAddFooterChangeId(self):
tandrii@chromium.orgf2aa52b2016-06-03 12:58:20 +000076 with self.assertRaises(AssertionError):
77 git_footers.add_footer_change_id('Already has\n\nChange-Id: Ixxx', 'Izzz')
78
tandrii@chromium.org3c3c0342016-03-04 11:59:28 +000079 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.org9fc50db2016-03-17 12:38:55 +000099 # 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.orgf2aa52b2016-06-03 12:58:20 +0000104 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.org456ca7f2016-05-23 21:33:28 +0000131 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.org3c3c0342016-03-04 11:59:28 +0000142
luqui@chromium.org0b887622014-09-03 02:31:03 +0000143if __name__ == '__main__':
144 unittest.main()