fix: resolve CI issues - push complete implementation with tests
This commit is contained in:
@@ -1,5 +1,3 @@
|
|||||||
"""Tests for the DiffParser module."""
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
@@ -10,10 +8,7 @@ from gdiffer.parser import parse_diff
|
|||||||
|
|
||||||
|
|
||||||
class TestDiffParser:
|
class TestDiffParser:
|
||||||
"""Tests for DiffParser class."""
|
|
||||||
|
|
||||||
def test_parse_simple_diff(self, diff_parser, sample_diff):
|
def test_parse_simple_diff(self, diff_parser, sample_diff):
|
||||||
"""Test parsing a simple diff."""
|
|
||||||
files = diff_parser.parse(sample_diff)
|
files = diff_parser.parse(sample_diff)
|
||||||
|
|
||||||
assert len(files) == 1
|
assert len(files) == 1
|
||||||
@@ -21,7 +16,6 @@ class TestDiffParser:
|
|||||||
assert len(files[0].hunks) == 1
|
assert len(files[0].hunks) == 1
|
||||||
|
|
||||||
def test_parse_new_file(self, diff_parser):
|
def test_parse_new_file(self, diff_parser):
|
||||||
"""Test parsing diff with new file."""
|
|
||||||
diff = """diff --git a/new_file.py b/new_file.py
|
diff = """diff --git a/new_file.py b/new_file.py
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..1234567
|
index 0000000..1234567
|
||||||
@@ -39,7 +33,6 @@ index 0000000..1234567
|
|||||||
assert files[0].new_file_mode == "100644"
|
assert files[0].new_file_mode == "100644"
|
||||||
|
|
||||||
def test_parse_deleted_file(self, diff_parser):
|
def test_parse_deleted_file(self, diff_parser):
|
||||||
"""Test parsing diff with deleted file."""
|
|
||||||
diff = """diff --git a/old_file.py b/old_file.py
|
diff = """diff --git a/old_file.py b/old_file.py
|
||||||
deleted file mode 100644
|
deleted file mode 100644
|
||||||
index 1234567..0000000
|
index 1234567..0000000
|
||||||
@@ -57,7 +50,6 @@ index 1234567..0000000
|
|||||||
assert files[0].change_type == "delete"
|
assert files[0].change_type == "delete"
|
||||||
|
|
||||||
def test_parse_rename(self, diff_parser):
|
def test_parse_rename(self, diff_parser):
|
||||||
"""Test parsing diff with renamed file."""
|
|
||||||
diff = """diff --git a/old_name.py b/new_name.py
|
diff = """diff --git a/old_name.py b/new_name.py
|
||||||
similarity index 95%
|
similarity index 95%
|
||||||
rename from old_name.py
|
rename from old_name.py
|
||||||
@@ -79,7 +71,6 @@ index 1234567..89abcde 100644
|
|||||||
assert files[0].change_type == "rename"
|
assert files[0].change_type == "rename"
|
||||||
|
|
||||||
def test_parse_multi_file(self, diff_parser, multi_file_diff):
|
def test_parse_multi_file(self, diff_parser, multi_file_diff):
|
||||||
"""Test parsing diff with multiple files."""
|
|
||||||
files = diff_parser.parse(multi_file_diff)
|
files = diff_parser.parse(multi_file_diff)
|
||||||
|
|
||||||
assert len(files) == 3
|
assert len(files) == 3
|
||||||
@@ -90,7 +81,6 @@ index 1234567..89abcde 100644
|
|||||||
assert "modify" in file_types
|
assert "modify" in file_types
|
||||||
|
|
||||||
def test_hunk_parsing(self, diff_parser, sample_diff):
|
def test_hunk_parsing(self, diff_parser, sample_diff):
|
||||||
"""Test that hunks are correctly parsed."""
|
|
||||||
files = diff_parser.parse(sample_diff)
|
files = diff_parser.parse(sample_diff)
|
||||||
file_obj = files[0]
|
file_obj = files[0]
|
||||||
|
|
||||||
@@ -103,7 +93,6 @@ index 1234567..89abcde 100644
|
|||||||
assert hunk.new_lines > 0
|
assert hunk.new_lines > 0
|
||||||
|
|
||||||
def test_get_added_lines(self, diff_parser):
|
def test_get_added_lines(self, diff_parser):
|
||||||
"""Test getting added lines from hunk."""
|
|
||||||
diff = """diff --git a/test.py b/test.py
|
diff = """diff --git a/test.py b/test.py
|
||||||
--- a/test.py
|
--- a/test.py
|
||||||
+++ b/test.py
|
+++ b/test.py
|
||||||
@@ -120,7 +109,6 @@ index 1234567..89abcde 100644
|
|||||||
assert len(added_lines) == 2
|
assert len(added_lines) == 2
|
||||||
|
|
||||||
def test_get_removed_lines(self, diff_parser):
|
def test_get_removed_lines(self, diff_parser):
|
||||||
"""Test getting removed lines from hunk."""
|
|
||||||
diff = """diff --git a/test.py b/test.py
|
diff = """diff --git a/test.py b/test.py
|
||||||
--- a/test.py
|
--- a/test.py
|
||||||
+++ b/test.py
|
+++ b/test.py
|
||||||
@@ -136,7 +124,6 @@ index 1234567..89abcde 100644
|
|||||||
assert len(removed_lines) == 1
|
assert len(removed_lines) == 1
|
||||||
|
|
||||||
def test_file_extension(self, diff_parser):
|
def test_file_extension(self, diff_parser):
|
||||||
"""Test file extension detection."""
|
|
||||||
diff_py = """diff --git a/test.py b/test.py
|
diff_py = """diff --git a/test.py b/test.py
|
||||||
--- a/test.py
|
--- a/test.py
|
||||||
+++ b/test.py
|
+++ b/test.py
|
||||||
@@ -159,12 +146,10 @@ index 1234567..89abcde 100644
|
|||||||
assert files_js[0].extension == "js"
|
assert files_js[0].extension == "js"
|
||||||
|
|
||||||
def test_empty_diff(self, diff_parser):
|
def test_empty_diff(self, diff_parser):
|
||||||
"""Test parsing empty diff."""
|
|
||||||
files = diff_parser.parse("")
|
files = diff_parser.parse("")
|
||||||
assert len(files) == 0
|
assert len(files) == 0
|
||||||
|
|
||||||
def test_parse_diff_function(self):
|
def test_parse_diff_function(self):
|
||||||
"""Test the parse_diff convenience function."""
|
|
||||||
diff = """diff --git a/test.py b/test.py
|
diff = """diff --git a/test.py b/test.py
|
||||||
--- a/test.py
|
--- a/test.py
|
||||||
+++ b/test.py
|
+++ b/test.py
|
||||||
@@ -178,20 +163,15 @@ index 1234567..89abcde 100644
|
|||||||
|
|
||||||
|
|
||||||
class TestDiffFile:
|
class TestDiffFile:
|
||||||
"""Tests for DiffFile model."""
|
|
||||||
|
|
||||||
def test_filename_property(self):
|
def test_filename_property(self):
|
||||||
"""Test filename property returns correct value."""
|
|
||||||
file_obj = DiffFile(old_path="old.py", new_path="new.py")
|
file_obj = DiffFile(old_path="old.py", new_path="new.py")
|
||||||
assert file_obj.filename == "new.py"
|
assert file_obj.filename == "new.py"
|
||||||
|
|
||||||
def test_filename_only_old_path(self):
|
def test_filename_only_old_path(self):
|
||||||
"""Test filename when only old path exists."""
|
|
||||||
file_obj = DiffFile(old_path="old.py", new_path=None)
|
file_obj = DiffFile(old_path="old.py", new_path=None)
|
||||||
assert file_obj.filename == "old.py"
|
assert file_obj.filename == "old.py"
|
||||||
|
|
||||||
def test_is_new_property(self):
|
def test_is_new_property(self):
|
||||||
"""Test is_new property."""
|
|
||||||
file_obj = DiffFile(old_path=None, new_path="new.py", new_file_mode="100644")
|
file_obj = DiffFile(old_path=None, new_path="new.py", new_file_mode="100644")
|
||||||
assert file_obj.is_new
|
assert file_obj.is_new
|
||||||
|
|
||||||
@@ -199,12 +179,10 @@ class TestDiffFile:
|
|||||||
assert not file_obj2.is_new
|
assert not file_obj2.is_new
|
||||||
|
|
||||||
def test_is_deleted_property(self):
|
def test_is_deleted_property(self):
|
||||||
"""Test is_deleted property."""
|
|
||||||
file_obj = DiffFile(old_path="old.py", new_path=None, deleted_file_mode="100644")
|
file_obj = DiffFile(old_path="old.py", new_path=None, deleted_file_mode="100644")
|
||||||
assert file_obj.is_deleted
|
assert file_obj.is_deleted
|
||||||
|
|
||||||
def test_is_rename_property(self):
|
def test_is_rename_property(self):
|
||||||
"""Test is_rename property."""
|
|
||||||
file_obj = DiffFile(
|
file_obj = DiffFile(
|
||||||
old_path="old.py",
|
old_path="old.py",
|
||||||
new_path="new.py",
|
new_path="new.py",
|
||||||
@@ -215,10 +193,7 @@ class TestDiffFile:
|
|||||||
|
|
||||||
|
|
||||||
class TestDiffHunk:
|
class TestDiffHunk:
|
||||||
"""Tests for DiffHunk model."""
|
|
||||||
|
|
||||||
def test_get_modified_lines(self):
|
def test_get_modified_lines(self):
|
||||||
"""Test getting modified lines."""
|
|
||||||
hunk = DiffHunk(
|
hunk = DiffHunk(
|
||||||
old_start=1,
|
old_start=1,
|
||||||
old_lines=3,
|
old_lines=3,
|
||||||
|
|||||||
Reference in New Issue
Block a user