git-cl: Make tests run on Python 3.

Bug: 1002209
Change-Id: I90de660afd901e544e5557f3af3a56cef4d6adaf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/1891667
Commit-Queue: Edward Lesmes <ehmaldonado@chromium.org>
Reviewed-by: Anthony Polito <apolito@google.com>
diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py
index b95a3ee..a90525b 100755
--- a/tests/git_cl_test.py
+++ b/tests/git_cl_test.py
@@ -1,10 +1,13 @@
-#!/usr/bin/env python
+#!/usr/bin/env vpython3
+# coding=utf-8
 # Copyright (c) 2012 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.
 
 """Unit tests for git_cl.py."""
 
+from __future__ import unicode_literals
+
 import datetime
 import json
 import logging
@@ -35,7 +38,7 @@
   from io import StringIO
 
 
-def callError(code=1, cmd='', cwd='', stdout='', stderr=''):
+def callError(code=1, cmd='', cwd='', stdout=b'', stderr=b''):
   return subprocess2.CalledProcessError(code, cmd, cwd, stdout, stderr)
 
 
@@ -48,11 +51,11 @@
 CERR1 = callError(1)
 
 
-def MakeNamedTemporaryFileMock(expected_content):
+def MakeNamedTemporaryFileMock(test, expected_content):
   class NamedTemporaryFileMock(object):
     def __init__(self, *args, **kwargs):
       self.name = '/tmp/named'
-      self.expected_content = expected_content
+      self.expected_content = expected_content.encode('utf-8', 'replace')
 
     def __enter__(self):
       return self
@@ -62,7 +65,7 @@
 
     def write(self, content):
       if self.expected_content:
-        assert content == self.expected_content
+        test.assertEqual(self.expected_content, content)
 
     def close(self):
       pass
@@ -706,6 +709,10 @@
     self._calls_done.append(top)
     if isinstance(result, Exception):
       raise result
+    # stdout from git commands is supposed to be a bytestream. Convert it here
+    # instead of converting all test output in this file to bytes.
+    if args[0][0] == 'git' and not isinstance(result, bytes):
+      result = result.encode('utf-8')
     return result
 
   def test_ask_for_explicit_yes_true(self):
@@ -1286,7 +1293,7 @@
         change_id=change_id)
     if fetched_status != 'ABANDONED':
       self.mock(tempfile, 'NamedTemporaryFile', MakeNamedTemporaryFileMock(
-          expected_content=description))
+          self, expected_content=description))
       self.mock(os, 'remove', lambda _: True)
       self.calls += self._gerrit_upload_calls(
           description, reviewers, squash,
@@ -1310,36 +1317,36 @@
   def test_gerrit_upload_traces_no_gitcookies(self):
     self._run_gerrit_upload_test(
         ['--no-squash'],
-        'desc\n\nBUG=\n',
+        'desc ✔\n\nBUG=\n',
         [],
         squash=False,
-        post_amend_description='desc\n\nBUG=\n\nChange-Id: Ixxx',
+        post_amend_description='desc ✔\n\nBUG=\n\nChange-Id: Ixxx',
         change_id='Ixxx',
         gitcookies_exists=False)
 
   def test_gerrit_upload_without_change_id(self):
     self._run_gerrit_upload_test(
         ['--no-squash'],
-        'desc\n\nBUG=\n',
+        'desc ✔\n\nBUG=\n',
         [],
         squash=False,
-        post_amend_description='desc\n\nBUG=\n\nChange-Id: Ixxx',
+        post_amend_description='desc ✔\n\nBUG=\n\nChange-Id: Ixxx',
         change_id='Ixxx')
 
   def test_gerrit_upload_without_change_id_override_nosquash(self):
     self._run_gerrit_upload_test(
         [],
-        'desc\n\nBUG=\n',
+        'desc ✔\n\nBUG=\n',
         [],
         squash=False,
         squash_mode='override_nosquash',
-        post_amend_description='desc\n\nBUG=\n\nChange-Id: Ixxx',
+        post_amend_description='desc ✔\n\nBUG=\n\nChange-Id: Ixxx',
         change_id='Ixxx')
 
   def test_gerrit_no_reviewer(self):
     self._run_gerrit_upload_test(
         [],
-        'desc\n\nBUG=\n\nChange-Id: I123456789\n',
+        'desc ✔\n\nBUG=\n\nChange-Id: I123456789\n',
         [],
         squash=False,
         squash_mode='override_nosquash',
@@ -1349,7 +1356,7 @@
     # TODO(crbug/877717): remove this test case.
     self._run_gerrit_upload_test(
         [],
-        'desc\n\nBUG=\n\nChange-Id: I123456789\n',
+        'desc ✔\n\nBUG=\n\nChange-Id: I123456789\n',
         [],
         squash=False,
         squash_mode='override_nosquash',
@@ -1360,7 +1367,7 @@
     self.mock(git_cl.sys, 'stdout', StringIO())
     self._run_gerrit_upload_test(
         ['-f', '-t', 'We\'ll escape ^_ ^ special chars...@{u}'],
-        'desc\n\nBUG=\n\nChange-Id: I123456789',
+        'desc ✔\n\nBUG=\n\nChange-Id: I123456789',
         squash=False,
         squash_mode='override_nosquash',
         title='We%27ll_escape_%5E%5F_%5E_special_chars%2E%2E%2E%40%7Bu%7D',
@@ -1370,14 +1377,14 @@
   def test_gerrit_reviewers_cmd_line(self):
     self._run_gerrit_upload_test(
         ['-r', 'foo@example.com', '--send-mail'],
-        'desc\n\nBUG=\n\nChange-Id: I123456789',
+        'desc ✔\n\nBUG=\n\nChange-Id: I123456789',
         ['foo@example.com'],
         squash=False,
         squash_mode='override_nosquash',
         notify=True,
         change_id='I123456789',
         final_description=(
-            'desc\n\nBUG=\nR=foo@example.com\n\nChange-Id: I123456789'))
+            'desc ✔\n\nBUG=\nR=foo@example.com\n\nChange-Id: I123456789'))
 
   def test_gerrit_upload_force_sets_bug(self):
     self._run_gerrit_upload_test(
@@ -1419,7 +1426,7 @@
               lambda *a: self._mocked_call('GetCodeReviewTbrScore', *a))
     self._run_gerrit_upload_test(
         [],
-        'desc\nTBR=reviewer@example.com\nBUG=\nR=another@example.com\n'
+        'desc ✔\nTBR=reviewer@example.com\nBUG=\nR=another@example.com\n'
         'CC=more@example.com,people@example.com\n\n'
         'Change-Id: 123456789',
         ['reviewer@example.com', 'another@example.com'],
@@ -1433,7 +1440,7 @@
   def test_gerrit_upload_squash_first_is_default(self):
     self._run_gerrit_upload_test(
         [],
-        'desc\nBUG=\n\nChange-Id: 123456789',
+        'desc ✔\nBUG=\n\nChange-Id: 123456789',
         [],
         expected_upstream_ref='origin/master',
         change_id='123456789',
@@ -1442,7 +1449,7 @@
   def test_gerrit_upload_squash_first(self):
     self._run_gerrit_upload_test(
         ['--squash'],
-        'desc\nBUG=\n\nChange-Id: 123456789',
+        'desc ✔\nBUG=\n\nChange-Id: 123456789',
         [],
         squash=True,
         expected_upstream_ref='origin/master',
@@ -1452,7 +1459,7 @@
   def test_gerrit_upload_squash_first_with_labels(self):
     self._run_gerrit_upload_test(
         ['--squash', '--cq-dry-run', '--enable-auto-submit'],
-        'desc\nBUG=\n\nChange-Id: 123456789',
+        'desc ✔\nBUG=\n\nChange-Id: 123456789',
         [],
         squash=True,
         expected_upstream_ref='origin/master',
@@ -1464,7 +1471,7 @@
     custom_cl_base = 'custom_cl_base_rev_or_branch'
     self._run_gerrit_upload_test(
         ['--squash', custom_cl_base],
-        'desc\nBUG=\n\nChange-Id: 123456789',
+        'desc ✔\nBUG=\n\nChange-Id: 123456789',
         [],
         squash=True,
         expected_upstream_ref='origin/master',
@@ -1476,7 +1483,7 @@
         sys.stdout.getvalue())
 
   def test_gerrit_upload_squash_reupload(self):
-    description = 'desc\nBUG=\n\nChange-Id: 123456789'
+    description = 'desc ✔\nBUG=\n\nChange-Id: 123456789'
     self._run_gerrit_upload_test(
         ['--squash'],
         description,
@@ -1490,7 +1497,7 @@
   def test_gerrit_upload_squash_reupload_to_abandoned(self):
     self.mock(git_cl, 'DieWithError',
               lambda msg, change=None: self._mocked_call('DieWithError', msg))
-    description = 'desc\nBUG=\n\nChange-Id: 123456789'
+    description = 'desc ✔\nBUG=\n\nChange-Id: 123456789'
     with self.assertRaises(SystemExitMock):
       self._run_gerrit_upload_test(
           ['--squash'],
@@ -1505,7 +1512,7 @@
   def test_gerrit_upload_squash_reupload_to_not_owned(self):
     self.mock(git_cl.gerrit_util, 'GetAccountDetails',
               lambda *_, **__: {'email': 'yet-another@example.com'})
-    description = 'desc\nBUG=\n\nChange-Id: 123456789'
+    description = 'desc ✔\nBUG=\n\nChange-Id: 123456789'
     self._run_gerrit_upload_test(
           ['--squash'],
           description,
@@ -3393,7 +3400,7 @@
       yapfignore.write('\n'.join(contents))
 
   def _make_files(self, file_dict):
-    for directory, files in file_dict.iteritems():
+    for directory, files in file_dict.items():
       subdir = os.path.join(self._top_dir, directory)
       if not os.path.exists(subdir):
         os.makedirs(subdir)