You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
depot_tools/tests/git_footers_test.py

163 lines
5.6 KiB
Python

#!/usr/bin/env python
"""Tests for git_footers."""
import os
import StringIO
import sys
import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from testing_support.auto_stub import TestCase
import git_footers
class GitFootersTest(TestCase):
_message = """
This is my commit message. There are many like it, but this one is mine.
My commit message is my best friend. It is my life. I must master it.
"""
_position = 'refs/heads/master@{#292272}'
_position_footer = 'Cr-Commit-Position: %s\n' % _position
_git_svn_id = ('svn://svn.chromium.org/chrome/trunk/src@290386'
' 0039d316-1c4b-4281-b951-d872f2087c98')
_git_svn_id_footer = 'git-svn-id: %s\n' % _git_svn_id
_git_svn_id_branch = (
'svn://svn.chromium.org/chrome/branches/blabble/src@177288')
_git_svn_id_footer_branch = 'git-svn-id: %s\n' % _git_svn_id_branch
def testFootersBasic(self):
self.assertEqual(
git_footers.split_footers('Not-A: footer'),
(['Not-A: footer'], [], []))
self.assertEqual(
git_footers.split_footers('Header\n\nActual: footer'),
(['Header', ''], ['Actual: footer'], [('Actual', 'footer')]))
self.assertEqual(
git_footers.split_footers('\nActual: footer'),
([''], ['Actual: footer'], [('Actual', 'footer')]))
self.assertEqual(
git_footers.parse_footers(self._message), {})
self.assertEqual(
git_footers.parse_footers(self._message + self._position_footer),
{ 'Cr-Commit-Position': [ self._position ] })
self.assertEqual(
git_footers.parse_footers(self._message + self._git_svn_id_footer),
{ 'Git-Svn-Id': [ self._git_svn_id ] })
self.assertEqual(
git_footers.parse_footers(self._message + self._position_footer
+ self._position_footer),
{ 'Cr-Commit-Position': [ self._position, self._position ] })
def testTrunkHeuristic(self):
footers = git_footers.parse_footers(self._message + self._git_svn_id_footer)
self.assertEqual(
footers,
{ 'Git-Svn-Id': [ self._git_svn_id ] })
self.assertEqual(
git_footers.get_position(footers),
('refs/heads/master', '290386'))
def testBranchHeuristic(self):
footers = git_footers.parse_footers(self._message +
self._git_svn_id_footer_branch)
self.assertEqual(
footers,
{ 'Git-Svn-Id': [ self._git_svn_id_branch ] })
self.assertEqual(
git_footers.get_position(footers),
('refs/branch-heads/blabble', None))
def testGetFooterChangeId(self):
msg = '\n'.join(['whatever',
'',
'Change-Id: ignored',
'', # Above is ignored because of this empty line.
'Change-Id: Ideadbeaf'])
self.assertEqual(['Ideadbeaf'], git_footers.get_footer_change_id(msg))
self.assertEqual([], git_footers.get_footer_change_id(
'desc\nBUG=not-a-valid-footer\nChange-Id: Ixxx'))
self.assertEqual(['Ixxx'], git_footers.get_footer_change_id(
'desc\nBUG=not-a-valid-footer\n\nChange-Id: Ixxx'))
def testAddFooterChangeId(self):
with self.assertRaises(AssertionError):
git_footers.add_footer_change_id('Already has\n\nChange-Id: Ixxx', 'Izzz')
self.assertEqual(
git_footers.add_footer_change_id('header-only', 'Ixxx'),
'header-only\n\nChange-Id: Ixxx')
self.assertEqual(
git_footers.add_footer_change_id('header\n\nsome: footter', 'Ixxx'),
'header\n\nChange-Id: Ixxx\nsome: footter')
self.assertEqual(
git_footers.add_footer_change_id('header\n\nBUG: yy', 'Ixxx'),
'header\n\nBUG: yy\nChange-Id: Ixxx')
self.assertEqual(
git_footers.add_footer_change_id('header\n\nBUG: yy\nPos: 1', 'Ixxx'),
'header\n\nBUG: yy\nChange-Id: Ixxx\nPos: 1')
self.assertEqual(
git_footers.add_footer_change_id('header\n\nBUG: yy\n\nPos: 1', 'Ixxx'),
'header\n\nBUG: yy\n\nChange-Id: Ixxx\nPos: 1')
# Special case: first line is never a footer, even if it looks line one.
self.assertEqual(
git_footers.add_footer_change_id('header: like footer', 'Ixxx'),
'header: like footer\n\nChange-Id: Ixxx')
def testAddFooter(self):
self.assertEqual(
git_footers.add_footer('', 'Key', 'Value'),
'\nKey: Value')
self.assertEqual(
git_footers.add_footer('Header with empty line.\n\n', 'Key', 'Value'),
'Header with empty line.\n\nKey: Value')
self.assertEqual(
git_footers.add_footer('Top\n\nSome: footer', 'Key', 'value'),
'Top\n\nSome: footer\nKey: value')
self.assertEqual(
git_footers.add_footer('Top\n\nSome: footer', 'Key', 'value',
after_keys=['Any']),
'Top\n\nKey: value\nSome: footer')
self.assertEqual(
git_footers.add_footer('Top\n\nSome: footer', 'Key', 'value',
after_keys=['Some']),
'Top\n\nSome: footer\nKey: value')
self.assertEqual(
git_footers.add_footer('Top\n\nSome: footer\nOther: footer',
'Key', 'value', after_keys=['Some']),
'Top\n\nSome: footer\nKey: value\nOther: footer')
def testReadStdin(self):
self.mock(git_footers.sys, 'stdin', StringIO.StringIO(
'line\r\notherline\r\n\r\n\r\nFoo: baz'))
stdout = StringIO.StringIO()
self.mock(git_footers.sys, 'stdout', stdout)
self.assertEqual(git_footers.main([]), 0)
self.assertEqual(stdout.getvalue(), "Foo: baz\n")
if __name__ == '__main__':
unittest.main()