blob: efbf7797dd93904176130b846f728c86c3e9b680 [file]
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import json
import StringIO
from testing_utils import testing
import textwrap
import urllib2
from libs.gitiles import commit_util
class CodeReviewUtilTest(testing.AppengineTestCase):
def testExtractChangeInfo(self):
testcases = [{
'message': 'balabala...\n'
'\n'
'BUG=604502\n'
'\n'
'Review-Url: https://codereview.chromium.org/1927593004\n'
'Cr-Commit-Position: refs/heads/master@{#390254}\n',
'commit_position': 390254,
'code_review_url': 'https://codereview.chromium.org/1927593004',
'change_id': '1927593004',
'host': 'codereview.chromium.org',
}, {
'message': 'balabala...\n'
'\n'
'BUG=409934\n'
'\n'
'Review URL: https://codereview.chromium.org/547753003\n'
'\n'
'Cr-Commit-Position: refs/heads/master@{#293661}',
'commit_position': 293661,
'code_review_url': 'https://codereview.chromium.org/547753003',
'change_id': '547753003',
'host': 'codereview.chromium.org',
}, {
'message': 'Review URL: https://codereview.chromium.org/469523002\n'
'\n'
'Cr-Commit-Position: refs/heads/master@{#289120}',
'commit_position': 289120,
'code_review_url': 'https://codereview.chromium.org/469523002',
'change_id': '469523002',
'host': 'codereview.chromium.org',
}, {
'message': 'balabala...\n'
'\n'
'balabala...\n'
'\n'
'R=test4@chromium.org\n'
'\n'
'Review URL: https://codereview.chromium.org/469523002\n',
'commit_position': None,
'code_review_url': 'https://codereview.chromium.org/469523002',
'change_id': '469523002',
'host': 'codereview.chromium.org',
}, {
'message': None,
'commit_position': None,
'code_review_url': None,
'change_id': None,
'host': None,
}, {
'message': 'abc',
'commit_position': None,
'code_review_url': None,
'change_id': None,
'host': None,
}, {
'message':
'balabala...\n'
'\n'
'balabala...\n'
'\n'
'R=test4@chromium.org\n'
'\n'
'Change-Id: Iaa54f242b5b2fa10870503ef88291b9422cb47ca\n'
'Reviewed-on: https://chromium-review.googlesource.com/45425\n'
'Cr-Commit-Position: refs/heads/master@{#456563}',
'commit_position': 456563,
'code_review_url': 'https://chromium-review.googlesource.com/q/'
'Iaa54f242b5b2fa10870503ef88291b9422cb47ca',
'change_id': 'Iaa54f242b5b2fa10870503ef88291b9422cb47ca',
'host': 'chromium-review.googlesource.com',
}]
for testcase in testcases:
change_info = commit_util.ExtractChangeInfo(testcase['message'])
self.assertEqual(
change_info.get('commit_position'), testcase['commit_position'])
self.assertEqual(
change_info.get('code_review_url'), testcase['code_review_url'])
self.assertEqual(change_info.get('host'), testcase['host'])
self.assertEqual(change_info.get('change_id'), testcase['change_id'])
def testNormalizeEmail(self):
self.assertEqual(
commit_util.NormalizeEmail(
'test@chromium.org@bbb929c8-8fbe-4397-9dbb-9b2b20218538'),
'test@chromium.org')
def testGetRevertedRevision(self):
message = ('Revert of test1\n\nReason for revert:\nrevert test1\n\n'
'Original issue\'s description:\n> test 1\n>\n'
'> description of test 1.\n>\n> BUG=none\n> TEST=none\n'
'> R=test@chromium.org\n> TBR=test@chromium.org\n>\n'
'> Committed: https://chromium.googlesource.com/chromium/src/+/'
'c9cc182781484f9010f062859cda048afefefefe\n'
'> Cr-Commit-Position: refs/heads/master@{#341992}\n\n'
'TBR=test@chromium.org\nNOPRESUBMIT=true\nNOTREECHECKS=true\n'
'NOTRY=true\nBUG=none\n\n'
'Review URL: https://codereview.chromium.org/1278653002\n\n'
'Cr-Commit-Position: refs/heads/master@{#342013}\n')
reverted_revision = commit_util.GetRevertedRevision(message)
self.assertEqual('c9cc182781484f9010f062859cda048afefefefe',
reverted_revision)
def testGetRevertedRevisionEmptyMessage(self):
self.assertIsNone(commit_util.GetRevertedRevision(''))
def testGetRevertedRevisionRevertOfRevert(self):
message = (
'Revert of Revert\n\nReason for revert:\nRevert of revert\n\n'
'Original issue\'s description:\n> test case of revert of revert\n>\n'
'> Reason for revert:\n> reason\n>\n> Original issue\'s description:\n'
'> > base cl\n> >\n> > R=kalman\n> > BUG=424661\n> >\n'
'> > Committed: https://crrev.com/34ea66b8ac1d56dadd670431063857ffdd\n'
'> > Cr-Commit-Position: refs/heads/master@{#326953}\n>\n'
'> TBR=test@chromium.org\n> NOPRESUBMIT=true\n'
'> NOTREECHECKS=true\n> NOTRY=true\n> BUG=424661\n>\n'
'> Committed: https://crrev.com/76a7e3446188256ca240dc31f78de29511a'
'2c322\n'
'> Cr-Commit-Position: refs/heads/master@{#327021}\n\n'
'TBR=test@chromium.org\nNOPRESUBMIT=true\n'
'NOTREECHECKS=true\nNOTRY=true\nBUG=424661\n\n'
'Review URL: https://codereview.chromium.org/1161773008\n\n'
'Cr-Commit-Position: refs/heads/master@{#332062}\n')
reverted_revision = commit_util.GetRevertedRevision(message)
self.assertEqual('76a7e3446188256ca240dc31f78de29511a2c322',
reverted_revision)
def testGetRevertedRevisionNoRevertedCL(self):
message = ('Test for not revert cl\n\n'
'TBR=test@chromium.org\nNOPRESUBMIT=true\n'
'NOTREECHECKS=true\nNOTRY=true\nBUG=424661\n\n'
'Review URL: https://codereview.chromium.org/1161773008\n\n'
'Cr-Commit-Position: refs/heads/master@{#332062}\n')
reverted_revision = commit_util.GetRevertedRevision(message)
self.assertIsNone(reverted_revision)
def testDistanceBetweenLineRangesErrors(self):
self.assertRaises(
ValueError,
lambda: commit_util.DistanceBetweenLineRanges((1, 0), (2, 3)))
self.assertRaises(
ValueError,
lambda: commit_util.DistanceBetweenLineRanges((2, 3), (1, 0)))
def testDistanceBetweenLineRangesSuccesses(self):
tests = [
(2, (1, 2), (4, 5)),
(0, (1, 3), (2, 4)),
(0, (1, 4), (2, 3)),
]
for expected_distance, range1, range2 in tests:
distance12 = commit_util.DistanceBetweenLineRanges(range1, range2)
distance21 = commit_util.DistanceBetweenLineRanges(range2, range1)
self.assertEqual(distance12, distance21)
self.assertEqual(expected_distance, distance12)