190 lines
4.1 KiB
Python
190 lines
4.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Tests for scripts/diff_analyzer.py — 10 tests."""
|
|
|
|
import sys
|
|
import os
|
|
sys.path.insert(0, os.path.dirname(__file__) or ".")
|
|
|
|
import importlib.util
|
|
spec = importlib.util.spec_from_file_location("da", os.path.join(os.path.dirname(__file__) or ".", "diff_analyzer.py"))
|
|
mod = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(mod)
|
|
DiffAnalyzer = mod.DiffAnalyzer
|
|
ChangeCategory = mod.ChangeCategory
|
|
|
|
|
|
SAMPLE_ADD = """diff --git a/new.py b/new.py
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/new.py
|
|
@@ -0,0 +1,3 @@
|
|
+def hello():
|
|
+ print("world")
|
|
+ return True
|
|
"""
|
|
|
|
SAMPLE_DELETE = """diff --git a/old.py b/old.py
|
|
deleted file mode 100644
|
|
--- a/old.py
|
|
+++ /dev/null
|
|
@@ -1,2 +0,0 @@
|
|
-def goodbye():
|
|
- pass
|
|
"""
|
|
|
|
SAMPLE_MODIFY = """diff --git a/app.py b/app.py
|
|
--- a/app.py
|
|
+++ b/app.py
|
|
@@ -1,3 +1,4 @@
|
|
def main():
|
|
- print("old")
|
|
+ print("new")
|
|
+ print("extra")
|
|
return 0
|
|
"""
|
|
|
|
SAMPLE_RENAME = """diff --git a/old_name.py b/new_name.py
|
|
rename from old_name.py
|
|
rename to new_name.py
|
|
--- a/old_name.py
|
|
+++ b/new_name.py
|
|
@@ -1,1 +1,1 @@
|
|
-old content
|
|
+new content
|
|
"""
|
|
|
|
SAMPLE_MULTI = """diff --git a/a.py b/a.py
|
|
--- a/a.py
|
|
+++ b/a.py
|
|
@@ -1,1 +1,2 @@
|
|
existing
|
|
+added line
|
|
diff --git b/b.py b/b.py
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/b.py
|
|
@@ -0,0 +1,1 @@
|
|
+new file
|
|
"""
|
|
|
|
SAMPLE_BINARY = """diff --git a/img.png b/img.png
|
|
Binary files a/img.png and b/img.png differ
|
|
"""
|
|
|
|
|
|
def test_empty():
|
|
a = DiffAnalyzer()
|
|
s = a.analyze("")
|
|
assert s.total_files_changed == 0
|
|
print("PASS: test_empty")
|
|
|
|
def test_addition():
|
|
a = DiffAnalyzer()
|
|
s = a.analyze(SAMPLE_ADD)
|
|
assert s.total_files_changed == 1
|
|
assert s.total_added == 3
|
|
assert s.total_deleted == 0
|
|
assert s.new_files == 1
|
|
assert s.files[0].hunks[0].category == ChangeCategory.ADDED
|
|
print("PASS: test_addition")
|
|
|
|
def test_deletion():
|
|
a = DiffAnalyzer()
|
|
s = a.analyze(SAMPLE_DELETE)
|
|
assert s.total_deleted == 2
|
|
assert s.deleted_files == 1
|
|
assert s.files[0].hunks[0].category == ChangeCategory.DELETED
|
|
print("PASS: test_deletion")
|
|
|
|
def test_modification():
|
|
a = DiffAnalyzer()
|
|
s = a.analyze(SAMPLE_MODIFY)
|
|
assert s.total_added == 2
|
|
assert s.total_deleted == 1
|
|
assert s.files[0].hunks[0].category == ChangeCategory.MODIFIED
|
|
print("PASS: test_modification")
|
|
|
|
def test_rename():
|
|
a = DiffAnalyzer()
|
|
s = a.analyze(SAMPLE_RENAME)
|
|
assert s.renamed_files == 1
|
|
assert s.files[0].old_path == "old_name.py"
|
|
assert s.files[0].path == "new_name.py"
|
|
assert s.files[0].is_renamed == True
|
|
print("PASS: test_rename")
|
|
|
|
def test_multiple_files():
|
|
a = DiffAnalyzer()
|
|
s = a.analyze(SAMPLE_MULTI)
|
|
assert s.total_files_changed == 2
|
|
assert s.new_files == 1
|
|
print("PASS: test_multiple_files")
|
|
|
|
def test_binary():
|
|
a = DiffAnalyzer()
|
|
s = a.analyze(SAMPLE_BINARY)
|
|
assert s.binary_files == 1
|
|
assert s.files[0].is_binary == True
|
|
assert len(s.files[0].hunks) == 0
|
|
print("PASS: test_binary")
|
|
|
|
def test_to_dict():
|
|
a = DiffAnalyzer()
|
|
s = a.analyze(SAMPLE_MODIFY)
|
|
d = s.to_dict()
|
|
assert "total_files_changed" in d
|
|
assert "files" in d
|
|
assert isinstance(d["files"], list)
|
|
print("PASS: test_to_dict")
|
|
|
|
def test_context_only():
|
|
diff = """diff --git a/f.py b/f.py
|
|
--- a/f.py
|
|
+++ b/f.py
|
|
@@ -1,3 +1,3 @@
|
|
line1
|
|
-old
|
|
+new
|
|
line3
|
|
"""
|
|
a = DiffAnalyzer()
|
|
s = a.analyze(diff)
|
|
# Has both added and deleted = MODIFIED
|
|
assert s.files[0].hunks[0].category == ChangeCategory.MODIFIED
|
|
print("PASS: test_context_only")
|
|
|
|
def test_multi_hunk():
|
|
diff = """diff --git a/f.py b/f.py
|
|
--- a/f.py
|
|
+++ b/f.py
|
|
@@ -1,1 +1,2 @@
|
|
existing
|
|
+first addition
|
|
@@ -10,1 +11,2 @@
|
|
more
|
|
+second addition
|
|
"""
|
|
a = DiffAnalyzer()
|
|
s = a.analyze(diff)
|
|
assert s.total_hunks == 2
|
|
assert s.total_added == 2
|
|
print("PASS: test_multi_hunk")
|
|
|
|
|
|
def run_all():
|
|
test_empty()
|
|
test_addition()
|
|
test_deletion()
|
|
test_modification()
|
|
test_rename()
|
|
test_multiple_files()
|
|
test_binary()
|
|
test_to_dict()
|
|
test_context_only()
|
|
test_multi_hunk()
|
|
print("\nAll 10 tests passed!")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
run_all()
|