From 28dd456617b8d48184fab31282634f51bee92e37 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Sun, 1 Feb 2026 04:18:16 +0000 Subject: [PATCH] fix: resolve CI test failures --- errorfix/tests/test_rules.py | 134 +++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 errorfix/tests/test_rules.py diff --git a/errorfix/tests/test_rules.py b/errorfix/tests/test_rules.py new file mode 100644 index 0000000..7dee62f --- /dev/null +++ b/errorfix/tests/test_rules.py @@ -0,0 +1,134 @@ +import pytest +import json +import tempfile +import os +from errorfix.rules.rule import Rule, Severity +from errorfix.rules.loader import RuleLoader + + +class TestRule: + def test_rule_creation(self): + rule = Rule( + id="py001", + name="Undefined Variable", + pattern=r"NameError: name '(\w+)' is not defined", + fix="Declare '{name}' before using it or check for typos", + description="NameError occurs when trying to use an undefined variable", + severity="error", + language="python" + ) + assert rule.id == "py001" + assert rule.name == "Undefined Variable" + assert rule.pattern == r"NameError: name '(\w+)' is not defined" + assert "name" in rule.fix + assert rule.language == "python" + assert rule.severity == Severity.ERROR + + def test_rule_with_capture_groups(self): + rule = Rule( + id="py002", + name="Unexpected Indent", + pattern=r"SyntaxError: unexpected indent around line (?P\d+)", + fix="Remove the extra indentation on line {line}", + description="Unexpected indentation error", + severity="error", + language="python" + ) + assert "{line}" in rule.fix + + def test_rule_to_dict(self): + rule = Rule( + id="test001", + name="Test Rule", + pattern="Test pattern", + fix="Test fix", + description="Test description" + ) + data = rule.to_dict() + assert data["id"] == "test001" + assert data["name"] == "Test Rule" + assert data["severity"] == "error" + + def test_rule_from_dict(self): + data = { + "id": "from_dict_test", + "name": "From Dict", + "pattern": ".*", + "fix": "fix", + "description": "desc" + } + rule = Rule.from_dict(data) + assert rule.id == "from_dict_test" + + +class TestRuleLoader: + def test_load_yaml_rules(self, tmp_path): + rules_file = tmp_path / "python_errors.yaml" + rules_file.write_text("""[ + { + "id": "py001", + "name": "Undefined Variable", + "pattern": "NameError: name '([\\\\w]+)' is not defined", + "fix": "Declare before using", + "description": "Undefined variable error", + "severity": "error", + "language": "python" + } +] +""") + loader = RuleLoader() + rules = loader.load_yaml(str(rules_file)) + assert len(rules) == 1 + assert rules[0].language == "python" + + def test_load_json_rules(self, tmp_path): + rules_file = tmp_path / "js_errors.json" + rules_file.write_text('''[ + { + "id": "js001", + "name": "Reference Error", + "pattern": "ReferenceError: ([\\\\w]+) is not defined", + "fix": "Ensure declared before use", + "description": "Reference to undefined variable", + "severity": "error", + "language": "javascript" + } +] +''') + loader = RuleLoader() + rules = loader.load_json(str(rules_file)) + assert len(rules) == 1 + assert rules[0].language == "javascript" + + def test_load_directory(self, tmp_path): + subdir = tmp_path / "python" + subdir.mkdir() + rules_file = subdir / "errors.yaml" + rules_file.write_text(""" +- id: py_test + name: Test Rule + pattern: "TestError" + fix: "Fix the test" + description: "Test rule" + severity: "info" + language: "python" +""") + loader = RuleLoader() + rules = loader.load_directory(str(tmp_path)) + assert len(rules) >= 1 + + def test_filter_rules_by_language(self): + loader = RuleLoader() + from errorfix.rules.rule import Rule + rules = [ + Rule(id="p1", name="P1", pattern=".*", fix="f", description="d", language="python"), + Rule(id="p2", name="P2", pattern=".*", fix="f", description="d", language="javascript"), + Rule(id="p3", name="P3", pattern=".*", fix="f", description="d", language="python"), + ] + filtered = loader.filter_rules(rules, language="python") + assert len(filtered) == 2 + + def test_load_nonexistent_file(self): + loader = RuleLoader() + with pytest.raises(FileNotFoundError): + loader.load_yaml("/nonexistent/path.yaml")