blob: 5d7a31cbaebf34fa62267ccbf9942423db380cd9 [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unittests for parsing bits in git."""
from __future__ import print_function
import tempfile
import unittest
import git
class GitTest(unittest.TestCase):
"""Tests for git."""
def setUp(self):
self.tfile = tempfile.NamedTemporaryFile()
def tearDown(self):
self.tfile.close()
def test_merge_ignored(self):
"""Test that merge commits are ignored."""
inp = '''
commit aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Merge: bbbbbbbbbbbb cccccccccccc
Author: Some author <some@author.com>
Date: Thu Aug 23 12:09:19 2018 -0700
Merge commit 'aa9f07a3749ae33849d7595485c30b4fc5912a27' into some_branch
Change-Id: I2805aef1f4bd5f5fcfb45ecadb522803fe024497
'''.strip()
self.tfile.write(inp)
self.tfile.flush()
g = git.Gitlog(self.tfile.name, '/tmp/junk')
self.assertEqual(0, len(g.commits))
def test_empty(self):
"""Test that empty gitlogs result in 0 GitCommit's."""
inp = ''
self.tfile.write(inp)
self.tfile.flush()
g = git.Gitlog(self.tfile.name, '/tmp/junk')
self.assertEqual(0, len(g.commits))
def test_normal_1(self):
"""Test parsing of a regular git commit."""
expected_title = 'commit title'
expected_sha = 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'
expected_files = '''
a/b/c
ddd
'''.strip()
inp = '''
commit: %s
Author: Some author <some@author.com>
Date: Tue Aug 21 08:47:56 2018 -0700
%s
Dummy commit body
Signed-off-by: some author <some@author.com>
%s
'''.strip() % (expected_sha, expected_title, expected_files)
self.tfile.write(inp)
self.tfile.flush()
g = git.Gitlog(self.tfile.name, '/tmp/junk')
self.assertEqual(1, len(g.commits))
commit = g.commits[0]
self.assertEqual(expected_sha, commit.commitid)
self.assertEqual(expected_title, commit.title)
self.assertEqual(expected_files, commit.files)
def test_normal_2(self):
"""Test parsing of 3 commits one of which is a merge commit."""
expected_titles = ['commit title1', 'commit title2']
expected_files = ['''
a/b/c
ddd
'''.strip(),
'''
r/e/w
asdfasdf
'''.strip()]
expected_shas = ['bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
'cccccccccccccccccccccccccccccccccccccccc']
inp = '''
commit %s
Author: Some author <some@author.com>
Date: Tue Aug 21 08:47:56 2018 -0700
%s
Dummy commit body
Signed-off-by: some author <some@author.com>
%s
commit aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Merge: bbbbbbbbbbbb cccccccccccc
Author: Some author <some@author.com>
Date: Thu Aug 23 12:09:19 2018 -0700
Merge commit 'aa9f07a3749ae33849d7595485c30b4fc5912a27' into some_branch
commit %s
Author: Some author <some@author.com>
Date: Tue Aug 21 08:47:56 2018 -0700
%s
Dummy commit body
Signed-off-by: some author <some@author.com>
%s
'''.strip() % (expected_shas[0], expected_titles[0], expected_files[0],
expected_shas[1], expected_titles[1], expected_files[1])
self.tfile.write(inp)
self.tfile.flush()
g = git.Gitlog(self.tfile.name, '/tmp/junk')
self.assertEqual(2, len(g.commits))
self.assertEqual(g.commits[0].commitid, expected_shas[0])
self.assertEqual(g.commits[0].title, expected_titles[0])
self.assertEqual(g.commits[0].files, expected_files[0])
self.assertEqual(g.commits[1].commitid, expected_shas[1])
self.assertEqual(g.commits[1].title, expected_titles[1])
self.assertEqual(g.commits[1].files, expected_files[1])
if __name__ == '__main__':
unittest.main()