git cl description: avoid appending BUG= after Change-Id.

R=yyanagisawa@chromium.org,sergiyb@chromium.org
BUG=614587

Review-Url: https://codereview.chromium.org/2038673002

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@300692 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py
index 0084001..42ffba4 100755
--- a/tests/git_cl_test.py
+++ b/tests/git_cl_test.py
@@ -1022,6 +1022,25 @@
     change_id = git_cl.GenerateGerritChangeId('line1\nline2\n')
     self.assertEqual(change_id, 'Ihashchange')
 
+  def test_desecription_append_footer(self):
+    for init_desc, footer_line, expected_desc in [
+      # Use unique desc first lines for easy test failure identification.
+      ('foo', 'R=one', 'foo\n\nR=one'),
+      ('foo\n\nR=one', 'BUG=', 'foo\n\nR=one\nBUG='),
+      ('foo\n\nR=one', 'Change-Id: Ixx', 'foo\n\nR=one\n\nChange-Id: Ixx'),
+      ('foo\n\nChange-Id: Ixx', 'R=one', 'foo\n\nR=one\n\nChange-Id: Ixx'),
+      ('foo\n\nR=one\n\nChange-Id: Ixx', 'TBR=two',
+       'foo\n\nR=one\nTBR=two\n\nChange-Id: Ixx'),
+      ('foo\n\nR=one\n\nChange-Id: Ixx', 'Foo-Bar: baz',
+       'foo\n\nR=one\n\nChange-Id: Ixx\nFoo-Bar: baz'),
+      ('foo\n\nChange-Id: Ixx', 'Foo-Bak: baz',
+       'foo\n\nChange-Id: Ixx\nFoo-Bak: baz'),
+      ('foo', 'Change-Id: Ixx', 'foo\n\nChange-Id: Ixx'),
+    ]:
+      desc = git_cl.ChangeDescription(init_desc)
+      desc.append_footer(footer_line)
+      self.assertEqual(desc.description, expected_desc)
+
   def test_update_reviewers(self):
     data = [
       ('foo', [], 'foo'),
@@ -1444,7 +1463,7 @@
     self.assertEqual('hihi', ChangelistMock.desc)
 
   def test_description_appends_bug_line(self):
-    current_desc = 'Some\n\nChange-Id: xxx'
+    current_desc = 'Some.\n\nChange-Id: xxx'
 
     def RunEditor(desc, _, **kwargs):
       self.assertEquals(
@@ -1452,15 +1471,14 @@
           '# This will be displayed on the codereview site.\n'
           '# The first line will also be used as the subject of the review.\n'
           '#--------------------This line is 72 characters long'
-          '--------------------\n' +
-          # TODO(tandrii): fix this http://crbug.com/614587.
-          current_desc + '\n\nBUG=',
+          '--------------------\n'
+          'Some.\n\nBUG=\n\nChange-Id: xxx',
           desc)
-      return current_desc + '\n\nBUG='
+      # Simulate user changing something.
+      return 'Some.\n\nBUG=123\n\nChange-Id: xxx'
 
     def UpdateDescriptionRemote(_, desc):
-      # TODO(tandrii): fix this http://crbug.com/614587.
-      self.assertEquals(desc, current_desc + '\n\nBUG=')
+      self.assertEquals(desc, 'Some.\n\nBUG=123\n\nChange-Id: xxx')
 
     self.mock(git_cl.sys, 'stdout', StringIO.StringIO())
     self.mock(git_cl.Changelist, 'GetDescription',