Initial upload: CLI Explain Fix project with CI/CD workflow
Some checks failed
CI / test (push) Failing after 11s
CI / build (push) Has been skipped

This commit is contained in:
2026-01-30 23:35:17 +00:00
parent 940fe681bf
commit bbe79fe65e

178
tests/test_parser.py Normal file
View File

@@ -0,0 +1,178 @@
"""Tests for the parser module."""
import pytest
from cli_explain_fix.parser import ErrorParser, ParsedError
class TestErrorParser:
"""Test cases for ErrorParser."""
def setup_method(self):
"""Set up parser instance for each test."""
self.parser = ErrorParser()
def test_detect_language_python_traceback(self, sample_python_traceback):
"""Test language detection for Python traceback."""
lang = self.parser.detect_language(sample_python_traceback)
assert lang == "python"
def test_detect_language_python_simple(self, sample_python_simple_error):
"""Test language detection for simple Python error."""
lang = self.parser.detect_language(sample_python_simple_error)
assert lang == "python"
def test_detect_language_javascript(self, sample_js_error):
"""Test language detection for JavaScript error."""
lang = self.parser.detect_language(sample_js_error)
assert lang == "javascript"
def test_detect_language_go(self, sample_go_panic):
"""Test language detection for Go panic."""
lang = self.parser.detect_language(sample_go_panic)
assert lang == "go"
def test_detect_language_rust(self, sample_rust_panic):
"""Test language detection for Rust panic."""
lang = self.parser.detect_language(sample_rust_panic)
assert lang == "rust"
def test_detect_language_json(self, sample_json_error):
"""Test language detection for JSON error."""
lang = self.parser.detect_language(sample_json_error)
assert lang == "json"
def test_detect_language_yaml(self, sample_yaml_error):
"""Test language detection for YAML error."""
lang = self.parser.detect_language(sample_yaml_error)
assert lang == "yaml"
def test_detect_language_cli(self, sample_cli_error):
"""Test language detection for CLI error."""
lang = self.parser.detect_language(sample_cli_error)
assert lang == "cli"
def test_detect_language_unknown(self, sample_unknown_error):
"""Test language detection for unknown error."""
lang = self.parser.detect_language(sample_unknown_error)
assert lang == "unknown"
def test_parse_python_traceback(self, sample_python_traceback):
"""Test parsing Python traceback."""
result = self.parser.parse(sample_python_traceback)
assert isinstance(result, ParsedError)
assert result.error_type == "ModuleNotFoundError"
assert result.language == "python"
assert "requests" in result.message
assert result.file_name == "/app/main.py"
assert result.line_number == 10
assert len(result.stack_frames) > 0
def test_parse_python_simple(self, sample_python_simple_error):
"""Test parsing simple Python error."""
result = self.parser.parse(sample_python_simple_error)
assert isinstance(result, ParsedError)
assert result.error_type == "ValueError"
assert result.language == "python"
assert "invalid value" in result.message
def test_parse_javascript_error(self, sample_js_error):
"""Test parsing JavaScript error."""
result = self.parser.parse(sample_js_error)
assert isinstance(result, ParsedError)
assert result.error_type == "TypeError"
assert result.language == "javascript"
def test_parse_go_panic(self, sample_go_panic):
"""Test parsing Go panic."""
result = self.parser.parse(sample_go_panic)
assert isinstance(result, ParsedError)
assert result.error_type == "panic"
assert result.language == "go"
def test_parse_rust_panic(self, sample_rust_panic):
"""Test parsing Rust panic."""
result = self.parser.parse(sample_rust_panic)
assert isinstance(result, ParsedError)
assert result.error_type == "panic"
assert result.language == "rust"
def test_parse_json_error(self, sample_json_error):n """Test parsing JSON error."""
result = self.parser.parse(sample_json_error)
assert isinstance(result, ParsedError)
assert result.error_type == "JSONParseError"
assert result.language == "json"
def test_parse_yaml_error(self, sample_yaml_error):
"""Test parsing YAML error."""
result = self.parser.parse(sample_yaml_error)
assert isinstance(result, ParsedError)
assert result.error_type == "YAMLParseError"
assert result.language == "yaml"
def test_parse_cli_error(self, sample_cli_error):
"""Test parsing CLI error."""
result = self.parser.parse(sample_cli_error)
assert isinstance(result, ParsedError)
assert result.error_type == "GenericError"
assert result.language == "cli"
def test_parse_with_explicit_language(self, sample_python_simple_error):
"""Test parsing with explicit language specification."""
result = self.parser.parse(sample_python_simple_error, language="python")
assert result.language == "python"
assert result.error_type == "ValueError"
def test_parse_unknown_error(self, sample_unknown_error):
"""Test parsing unknown error returns default."""
result = self.parser.parse(sample_unknown_error)
assert isinstance(result, ParsedError)
assert result.error_type == "UnknownError"
assert result.language == "unknown"
def test_parse_empty_input(self):
"""Test parsing empty input."""
result = self.parser.parse("")
assert isinstance(result, ParsedError)
assert result.error_type == "UnknownError"
assert result.message == "Unknown error occurred"
def test_parsed_error_to_dict(self, sample_python_simple_error):
"""Test ParsedError.to_dict() method."""
result = self.parser.parse(sample_python_simple_error)
data = result.to_dict()
assert isinstance(data, dict)
assert "error_type" in data
assert "message" in data
assert "language" in data
assert "stack_frames" in data
def test_parse_complex_python_traceback(self):
"""Test parsing complex Python traceback with multiple frames."""
traceback = '''Traceback (most recent call last):
File "app.py", line 5, in <module>
main()
File "app.py", line 10, in main
process()
File "processor.py", line 20, in process
result = data['key']
KeyError: 'key'
'''
result = self.parser.parse(traceback)
assert result.error_type == "KeyError"
assert result.language == "python"
assert result.file_name == "processor.py"
assert result.line_number == 20
assert len(result.stack_frames) == 3