fix: resolve CI issues - push complete implementation with tests
This commit is contained in:
@@ -1,5 +1,3 @@
|
|||||||
"""Tests for the CodeAnalyzer module."""
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
@@ -9,16 +7,12 @@ from gdiffer.code_analyzer import analyze_code, summarize_change
|
|||||||
|
|
||||||
|
|
||||||
class TestCodeAnalyzer:
|
class TestCodeAnalyzer:
|
||||||
"""Tests for CodeAnalyzer class."""
|
|
||||||
|
|
||||||
def test_analyze_empty_code(self, code_analyzer):
|
def test_analyze_empty_code(self, code_analyzer):
|
||||||
"""Test analyzing empty code."""
|
|
||||||
result = code_analyzer.analyze_code("")
|
result = code_analyzer.analyze_code("")
|
||||||
assert result['language'] == "text"
|
assert result['language'] == "text"
|
||||||
assert result['change_summary'] == ""
|
assert result['change_summary'] == ""
|
||||||
|
|
||||||
def test_analyze_python_code(self, code_analyzer):
|
def test_analyze_python_code(self, code_analyzer):
|
||||||
"""Test analyzing Python code."""
|
|
||||||
code = """def hello():
|
code = """def hello():
|
||||||
return "Hello"
|
return "Hello"
|
||||||
|
|
||||||
@@ -32,7 +26,6 @@ class Greeter:
|
|||||||
assert 'functions' in result or 'ast_info' in result
|
assert 'functions' in result or 'ast_info' in result
|
||||||
|
|
||||||
def test_analyze_javascript_code(self, code_analyzer):
|
def test_analyze_javascript_code(self, code_analyzer):
|
||||||
"""Test analyzing JavaScript code."""
|
|
||||||
code = """function add(a, b) {
|
code = """function add(a, b) {
|
||||||
return a + b;
|
return a + b;
|
||||||
}
|
}
|
||||||
@@ -44,7 +37,6 @@ const multiply = (x, y) => x * y;
|
|||||||
assert result['language'] == "javascript"
|
assert result['language'] == "javascript"
|
||||||
|
|
||||||
def test_analyze_rust_code(self, code_analyzer):
|
def test_analyze_rust_code(self, code_analyzer):
|
||||||
"""Test analyzing Rust code."""
|
|
||||||
code = """fn main() {
|
code = """fn main() {
|
||||||
println!("Hello");
|
println!("Hello");
|
||||||
}
|
}
|
||||||
@@ -59,9 +51,8 @@ struct Point {
|
|||||||
assert result['language'] == "rust"
|
assert result['language'] == "rust"
|
||||||
|
|
||||||
def test_summarize_change_simple(self, code_analyzer):
|
def test_summarize_change_simple(self, code_analyzer):
|
||||||
"""Test summarizing simple code changes."""
|
old_code = "def hello():\n return 'Hello'"
|
||||||
old_code = "def hello():\\n return 'Hello'"
|
new_code = "def hello():\n return 'Hello, World!'"
|
||||||
new_code = "def hello():\\n return 'Hello, World!'"
|
|
||||||
|
|
||||||
summary = code_analyzer.summarize_change(old_code, new_code, "python")
|
summary = code_analyzer.summarize_change(old_code, new_code, "python")
|
||||||
|
|
||||||
@@ -69,9 +60,8 @@ struct Point {
|
|||||||
assert len(summary) > 0
|
assert len(summary) > 0
|
||||||
|
|
||||||
def test_summarize_change_added_function(self, code_analyzer):
|
def test_summarize_change_added_function(self, code_analyzer):
|
||||||
"""Test summarizing when a function is added."""
|
|
||||||
old_code = ""
|
old_code = ""
|
||||||
new_code = "def new_func():\\n pass"
|
new_code = "def new_func():\n pass"
|
||||||
|
|
||||||
summary = code_analyzer.summarize_change(old_code, new_code, "python")
|
summary = code_analyzer.summarize_change(old_code, new_code, "python")
|
||||||
|
|
||||||
@@ -79,8 +69,7 @@ struct Point {
|
|||||||
assert len(summary) > 0
|
assert len(summary) > 0
|
||||||
|
|
||||||
def test_summarize_change_removed_function(self, code_analyzer):
|
def test_summarize_change_removed_function(self, code_analyzer):
|
||||||
"""Test summarizing when a function is removed."""
|
old_code = "def old_func():\n pass"
|
||||||
old_code = "def old_func():\\n pass"
|
|
||||||
new_code = ""
|
new_code = ""
|
||||||
|
|
||||||
summary = code_analyzer.summarize_change(old_code, new_code, "python")
|
summary = code_analyzer.summarize_change(old_code, new_code, "python")
|
||||||
@@ -88,14 +77,12 @@ struct Point {
|
|||||||
assert isinstance(summary, str)
|
assert isinstance(summary, str)
|
||||||
|
|
||||||
def test_analyze_code_without_parser(self, code_analyzer):
|
def test_analyze_code_without_parser(self, code_analyzer):
|
||||||
"""Test analyzing code when tree-sitter parser is unavailable."""
|
|
||||||
code = "def test(): pass"
|
code = "def test(): pass"
|
||||||
result = code_analyzer.analyze_code(code, "unknown_language")
|
result = code_analyzer.analyze_code(code, "unknown_language")
|
||||||
|
|
||||||
assert 'change_summary' in result
|
assert 'change_summary' in result
|
||||||
|
|
||||||
def test_fallback_analysis_detects_functions(self, code_analyzer):
|
def test_fallback_analysis_detects_functions(self, code_analyzer):
|
||||||
"""Test that fallback analysis can detect functions."""
|
|
||||||
code = """def calculate_sum(a, b):
|
code = """def calculate_sum(a, b):
|
||||||
return a + b
|
return a + b
|
||||||
|
|
||||||
@@ -108,7 +95,6 @@ def multiply(x, y):
|
|||||||
assert "calculate_sum" in result or "multiply" in result or "function" in result.lower()
|
assert "calculate_sum" in result or "multiply" in result or "function" in result.lower()
|
||||||
|
|
||||||
def test_fallback_analysis_detects_classes(self, code_analyzer):
|
def test_fallback_analysis_detects_classes(self, code_analyzer):
|
||||||
"""Test that fallback analysis can detect classes."""
|
|
||||||
code = """class Calculator:
|
code = """class Calculator:
|
||||||
def add(self, a, b):
|
def add(self, a, b):
|
||||||
return a + b
|
return a + b
|
||||||
@@ -118,8 +104,7 @@ def multiply(x, y):
|
|||||||
assert "Calculator" in result or "class" in result.lower()
|
assert "Calculator" in result or "class" in result.lower()
|
||||||
|
|
||||||
def test_fallback_analysis_line_count(self, code_analyzer):
|
def test_fallback_analysis_line_count(self, code_analyzer):
|
||||||
"""Test that fallback analysis includes line count."""
|
new_code = "line1\nline2\nline3"
|
||||||
new_code = "line1\\nline2\\nline3"
|
|
||||||
|
|
||||||
result = code_analyzer._analyze_without_parser(new_code)
|
result = code_analyzer._analyze_without_parser(new_code)
|
||||||
|
|
||||||
@@ -127,24 +112,17 @@ def multiply(x, y):
|
|||||||
|
|
||||||
|
|
||||||
class TestAnalyzeCodeFunction:
|
class TestAnalyzeCodeFunction:
|
||||||
"""Tests for the analyze_code convenience function."""
|
|
||||||
|
|
||||||
def test_analyze_code_function(self):
|
def test_analyze_code_function(self):
|
||||||
"""Test analyze_code convenience function."""
|
|
||||||
result = analyze_code("def test(): pass", "python")
|
result = analyze_code("def test(): pass", "python")
|
||||||
assert 'language' in result
|
assert 'language' in result
|
||||||
assert 'change_summary' in result
|
assert 'change_summary' in result
|
||||||
|
|
||||||
def test_analyze_code_empty(self):
|
def test_analyze_code_empty(self):
|
||||||
"""Test analyze_code with empty code."""
|
|
||||||
result = analyze_code("", "text")
|
result = analyze_code("", "text")
|
||||||
assert result['language'] == "text"
|
assert result['language'] == "text"
|
||||||
|
|
||||||
|
|
||||||
class TestSummarizeChangeFunction:
|
class TestSummarizeChangeFunction:
|
||||||
"""Tests for the summarize_change convenience function."""
|
|
||||||
|
|
||||||
def test_summarize_change_function(self):
|
def test_summarize_change_function(self):
|
||||||
"""Test summarize_change convenience function."""
|
|
||||||
result = summarize_change("old", "new", "text")
|
result = summarize_change("old", "new", "text")
|
||||||
assert isinstance(result, str)
|
assert isinstance(result, str)
|
||||||
|
|||||||
Reference in New Issue
Block a user