76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
"""Tests for pr-analyzer.py diff parsing (stdlib unittest, no extra deps)."""
|
|
|
|
import importlib.util
|
|
import os
|
|
import unittest
|
|
|
|
# The script has a hyphen in its name, so load it by path.
|
|
_HERE = os.path.dirname(os.path.abspath(__file__))
|
|
_spec = importlib.util.spec_from_file_location(
|
|
'pr_analyzer', os.path.join(_HERE, 'pr-analyzer.py')
|
|
)
|
|
pr_analyzer = importlib.util.module_from_spec(_spec)
|
|
_spec.loader.exec_module(pr_analyzer)
|
|
|
|
|
|
class ParseDiffFilenameTest(unittest.TestCase):
|
|
def test_lib_prefixed_path(self):
|
|
# "lib/" embeds a literal "b/" that the old regex swallowed.
|
|
diff = (
|
|
"diff --git a/lib/foo.py b/lib/foo.py\n"
|
|
"index 1234567..89abcde 100644\n"
|
|
"--- a/lib/foo.py\n"
|
|
"+++ b/lib/foo.py\n"
|
|
"@@ -1,2 +1,3 @@\n"
|
|
" unchanged\n"
|
|
"+added line\n"
|
|
"-removed line\n"
|
|
)
|
|
files = pr_analyzer.parse_diff(diff)
|
|
self.assertEqual(len(files), 1)
|
|
self.assertEqual(files[0].filename, 'lib/foo.py')
|
|
self.assertEqual(files[0].additions, 1)
|
|
self.assertEqual(files[0].deletions, 1)
|
|
|
|
def test_normal_path(self):
|
|
diff = (
|
|
"diff --git a/src/main.py b/src/main.py\n"
|
|
"index 1111111..2222222 100644\n"
|
|
"--- a/src/main.py\n"
|
|
"+++ b/src/main.py\n"
|
|
"@@ -0,0 +1 @@\n"
|
|
"+print('hi')\n"
|
|
)
|
|
files = pr_analyzer.parse_diff(diff)
|
|
self.assertEqual(len(files), 1)
|
|
self.assertEqual(files[0].filename, 'src/main.py')
|
|
|
|
def test_other_embedded_b_slash_prefixes(self):
|
|
# web/ and db/ also contain a literal "b/".
|
|
diff = (
|
|
"diff --git a/web/x.js b/web/x.js\n"
|
|
"+++ b/web/x.js\n"
|
|
"+console.log(1)\n"
|
|
"diff --git a/db/y.sql b/db/y.sql\n"
|
|
"+++ b/db/y.sql\n"
|
|
"+SELECT 1;\n"
|
|
)
|
|
files = pr_analyzer.parse_diff(diff)
|
|
self.assertEqual([f.filename for f in files], ['web/x.js', 'db/y.sql'])
|
|
|
|
def test_rename_falls_back_to_b_side(self):
|
|
diff = (
|
|
"diff --git a/old/name.py b/new/name.py\n"
|
|
"similarity index 100%\n"
|
|
"rename from old/name.py\n"
|
|
"rename to new/name.py\n"
|
|
)
|
|
files = pr_analyzer.parse_diff(diff)
|
|
self.assertEqual(len(files), 1)
|
|
self.assertEqual(files[0].filename, 'new/name.py')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|