From bbe79fe65ed87755feb022898798214938ad595b Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Fri, 30 Jan 2026 23:35:17 +0000 Subject: [PATCH] Initial upload: CLI Explain Fix project with CI/CD workflow --- tests/test_parser.py | 178 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 tests/test_parser.py diff --git a/tests/test_parser.py b/tests/test_parser.py new file mode 100644 index 0000000..6f796b6 --- /dev/null +++ b/tests/test_parser.py @@ -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 + 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