|
@@ -23,25 +23,31 @@ class PresubmitDiffTest(unittest.TestCase):
|
|
|
# State of the local directory.
|
|
|
self.root = tempfile.mkdtemp()
|
|
|
os.makedirs(os.path.join(self.root, "nested"))
|
|
|
- with open(os.path.join(self.root, "unchanged.txt"), "w") as f:
|
|
|
- f.write("unchanged\n")
|
|
|
- with open(os.path.join(self.root, "added.txt"), "w") as f:
|
|
|
- f.write("added\n")
|
|
|
- with open(os.path.join(self.root, "modified.txt"), "w") as f:
|
|
|
- f.write("modified... foo\n")
|
|
|
- with open(os.path.join(self.root, "nested/modified.txt"), "w") as f:
|
|
|
- f.write("goodbye\n")
|
|
|
+
|
|
|
+ # On Windows, writing "\n" in text mode becomes "\r\n". Write in binary
|
|
|
+ # so that doesn't happen, otherwise tests will fail.
|
|
|
+ with open(os.path.join(self.root, "unchanged.txt"), "wb") as f:
|
|
|
+ f.write("unchanged\n".encode("utf-8"))
|
|
|
+ with open(os.path.join(self.root, "added.txt"), "wb") as f:
|
|
|
+ f.write("added\n".encode("utf-8"))
|
|
|
+ with open(os.path.join(self.root, "modified.txt"), "wb") as f:
|
|
|
+ f.write("modified... foo\n".encode("utf-8"))
|
|
|
+ with open(os.path.join(self.root, "nested/modified.txt"), "wb") as f:
|
|
|
+ f.write("goodbye\n".encode("utf-8"))
|
|
|
|
|
|
# State of the remote repository.
|
|
|
fetch_data = {
|
|
|
- "unchanged.txt": "unchanged\n",
|
|
|
- "deleted.txt": "deleted\n",
|
|
|
- "modified.txt": "modified... bar\n",
|
|
|
- "nested/modified.txt": "hello\n",
|
|
|
+ "unchanged.txt": "unchanged\n".encode("utf-8"),
|
|
|
+ "deleted.txt": "deleted\n".encode("utf-8"),
|
|
|
+ "modified.txt": "modified... bar\n".encode("utf-8"),
|
|
|
+ "nested/modified.txt": "hello\n".encode("utf-8"),
|
|
|
+
|
|
|
+ # Intenionally invalid start byte for utf-8.
|
|
|
+ "deleted_binary": b"\xff\x00",
|
|
|
}
|
|
|
|
|
|
def fetch_side_effect(host, repo, ref, file):
|
|
|
- return fetch_data.get(file, "")
|
|
|
+ return fetch_data.get(file, b"")
|
|
|
|
|
|
fetch_content_mock = mock.patch("presubmit_diff.fetch_content",
|
|
|
side_effect=fetch_side_effect)
|
|
@@ -111,6 +117,17 @@ index 71779d2c..00000000
|
|
|
{"deleted.txt": expected_diff},
|
|
|
)
|
|
|
|
|
|
+ def test_create_diffs_with_binary_file(self):
|
|
|
+ expected_diff = """diff --git a/deleted_binary b/deleted_binary
|
|
|
+deleted file mode 100644
|
|
|
+index ce542efaa..00000000
|
|
|
+Binary files a/deleted_binary and /dev/null differ
|
|
|
+"""
|
|
|
+ self._test_create_diffs(
|
|
|
+ ["deleted_binary"],
|
|
|
+ {"deleted_binary": expected_diff},
|
|
|
+ )
|
|
|
+
|
|
|
# pylint: disable=line-too-long
|
|
|
|
|
|
def test_create_diffs_with_modified_files(self):
|