From 985616e90891cca1d341e13cf089a3e1734eda59 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Mon, 2 Feb 2026 14:00:02 +0000 Subject: [PATCH] Add test configuration and parser/language detector tests --- tests/test_diff_parser.py | 150 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 tests/test_diff_parser.py diff --git a/tests/test_diff_parser.py b/tests/test_diff_parser.py new file mode 100644 index 0000000..bb3125e --- /dev/null +++ b/tests/test_diff_parser.py @@ -0,0 +1,150 @@ +"""Tests for the DiffParser module.""" + +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / 'src')) + +from gdiffer.parser import DiffParser, parse_diff +from gdiffer.models import DiffFile, DiffHunk + + +class TestDiffParser: + def test_parse_simple_diff(self, diff_parser, sample_diff): + files = diff_parser.parse(sample_diff) + assert len(files) == 1 + assert files[0].filename == "src/main.py" + assert len(files[0].hunks) == 1 + + def test_parse_new_file(self, diff_parser): + diff = """diff --git a/new_file.py b/new_file.py +new file mode 100644 +index 0000000..1234567 +--- /dev/null ++++ b/new_file.py +@@ -0,0 +1,3 @@ ++def new_function(): ++ pass +""" + files = diff_parser.parse(diff) + assert len(files) == 1 + assert files[0].is_new + assert files[0].change_type == "add" + + def test_parse_deleted_file(self, diff_parser): + diff = """diff --git a/old_file.py b/old_file.py +deleted file mode 100644 +index 1234567..0000000 +--- a/old_file.py ++++ /dev/null +@@ -1,3 +0,0 @@ +-def old_function(): +- pass +- +""" + files = diff_parser.parse(diff) + assert len(files) == 1 + assert files[0].is_deleted + assert files[0].change_type == "delete" + + def test_parse_rename(self, diff_parser): + diff = """diff --git a/old_name.py b/new_name.py +similarity index 95% +rename from old_name.py +rename to new_name.py +index 1234567..89abcde 100644 +--- a/old_name.py ++++ b/new_name.py +@@ -1,3 +1,3 @@ + def renamed_function(): +- return "old" ++ return "new"""" + files = diff_parser.parse(diff) + assert len(files) == 1 + assert files[0].is_rename + assert files[0].rename_from == "old_name.py" + assert files[0].change_type == "rename" + + def test_parse_multi_file(self, diff_parser, multi_file_diff): + files = diff_parser.parse(multi_file_diff) + assert len(files) == 3 + file_types = [f.change_type for f in files] + assert "add" in file_types + assert "delete" in file_types + assert "modify" in file_types + + def test_get_added_lines(self, diff_parser): + diff = """diff --git a/test.py b/test.py +--- a/test.py ++++ b/test.py +@@ -1,3 +1,5 @@ ++import os ++import sys + def test(): + return True +""" + files = diff_parser.parse(diff) + hunk = files[0].hunks[0] + added_lines = hunk.get_added_lines() + assert len(added_lines) == 2 + + def test_get_removed_lines(self, diff_parser): + diff = """diff --git a/test.py b/test.py +--- a/test.py ++++ b/test.py +@@ -1,3 +1,2 @@ +-import os + def test(): + return True +""" + files = diff_parser.parse(diff) + hunk = files[0].hunks[0] + removed_lines = hunk.get_removed_lines() + assert len(removed_lines) == 1 + + def test_empty_diff(self, diff_parser): + files = diff_parser.parse("") + assert len(files) == 0 + + def test_parse_diff_function(self): + diff = """diff --git a/test.py b/test.py +--- a/test.py ++++ b/test.py +@@ -1 +1 @@ +-old ++new +""" + files = parse_diff(diff) + assert len(files) == 1 + assert files[0].filename == "test.py" + + +class TestDiffFile: + def test_filename_property(self): + file_obj = DiffFile(old_path="old.py", new_path="new.py") + assert file_obj.filename == "new.py" + + def test_filename_only_old_path(self): + file_obj = DiffFile(old_path="old.py", new_path=None) + assert file_obj.filename == "old.py" + + def test_is_new_property(self): + file_obj = DiffFile(old_path=None, new_path="new.py", new_file_mode="100644") + assert file_obj.is_new + + def test_is_deleted_property(self): + file_obj = DiffFile(old_path="old.py", new_path=None, deleted_file_mode="100644") + assert file_obj.is_deleted + + def test_is_rename_property(self): + file_obj = DiffFile(old_path="old.py", new_path="new.py", rename_from="old.py", rename_to="new.py") + assert file_obj.is_rename + + +class TestDiffHunk: + def test_get_modified_lines(self): + hunk = DiffHunk(old_start=1, old_lines=3, new_start=1, new_lines=3, + old_lines_content=["-old1", "-old2", "-old3"], + new_lines_content=["+new1", "+new2", "+new3"]) + modified = hunk.get_modified_lines() + assert len(modified) == 3