import pytest from io import StringIO from errorfix.formatters import TextFormatter, JSONFormatter from errorfix.patterns import MatchResult from errorfix.rules import Rule class TestTextFormatter: def test_format_single_match(self): rule = Rule( id='test-rule', name='Test Rule', pattern='TestError: .*', fix='Fix it', description='A test rule', ) result = MatchResult( rule=rule, matched_text='TestError: something', groups={'message': 'something'}, ) formatter = TextFormatter(use_colors=False) output = formatter.format([result], 'TestError: something') assert 'Test Rule' in output assert 'Fix it' in output assert 'something' in output def test_format_no_match(self): formatter = TextFormatter(use_colors=False) output = formatter.format([], 'Unknown error') assert 'No matching rules found' in output def test_write_to_stream(self): rule = Rule( id='test-rule', name='Test Rule', pattern='TestError: .*', fix='Fix it', description='A test rule', ) result = MatchResult(rule=rule, matched_text='TestError: test') formatter = TextFormatter(use_colors=False) output = StringIO() formatter.write([result], 'TestError: test', output) assert 'Test Rule' in output.getvalue() class TestJSONFormatter: def test_format_single_match(self): rule = Rule( id='test-rule', name='Test Rule', pattern='TestError: .*', fix='Fix it', description='A test rule', ) result = MatchResult( rule=rule, matched_text='TestError: something', groups={'message': 'something'}, ) formatter = JSONFormatter(pretty=True) output = formatter.format([result], 'TestError: something') assert 'Test Rule' in output assert '"suggested_fix"' in output assert 'something' in output def test_format_no_match(self): formatter = JSONFormatter(pretty=True) output = formatter.format([], 'Unknown error') assert '"match_count": 0' in output def test_pretty_output(self): formatter = JSONFormatter(pretty=True) rule = Rule( id='test-rule', name='Test Rule', pattern='TestError: .*', fix='Fix it', description='A test rule', ) result = MatchResult(rule=rule, matched_text='TestError: test') output = formatter.format([result], 'TestError: test') assert '\n' in output def test_compact_output(self): formatter = JSONFormatter(pretty=False) rule = Rule( id='test-rule', name='Test Rule', description='A test rule', ) result = MatchResult(rule=rule, matched_text='TestError: test') output = formatter.format([result], 'TestError: test') assert '\n' not in output