codeflash/tests/test_parse_pytest_test_failures.py
Kevin Turcios eceac13fc3 Merge remote-tracking branch 'origin/main' into omni-java
# Conflicts:
#	.claude/rules/architecture.md
#	.claude/rules/code-style.md
#	.github/workflows/claude.yml
#	.github/workflows/duplicate-code-detector.yml
#	codeflash/api/aiservice.py
#	codeflash/cli_cmds/console.py
#	codeflash/cli_cmds/logging_config.py
#	codeflash/code_utils/deduplicate_code.py
#	codeflash/discovery/discover_unit_tests.py
#	codeflash/languages/base.py
#	codeflash/languages/code_replacer.py
#	codeflash/languages/javascript/mocha_runner.py
#	codeflash/languages/javascript/support.py
#	codeflash/languages/python/support.py
#	codeflash/optimization/function_optimizer.py
#	codeflash/verification/parse_test_output.py
#	codeflash/verification/verification_utils.py
#	codeflash/verification/verifier.py
#	packages/codeflash/package-lock.json
#	packages/codeflash/package.json
#	tests/languages/javascript/test_support_dispatch.py
#	tests/test_codeflash_capture.py
#	tests/test_languages/test_javascript_test_runner.py
#	tests/test_multi_file_code_replacement.py
2026-03-04 01:52:32 -05:00

152 lines
5 KiB
Python

from codeflash.verification.parse_test_output import parse_test_failures_from_stdout
def test_extracting_single_pytest_error_from_stdout():
stdout = """
F... [100%]
=================================== FAILURES ===================================
_______________________ test_calculate_portfolio_metrics _______________________
def test_calculate_portfolio_metrics():
# Test case 1: Basic portfolio
investments = [
('Stocks', 0.6, 0.12),
('Bonds', 0.3, 0.04),
('Cash', 0.1, 0.01)
]
result = calculate_portfolio_metrics(investments)
# Check weighted return calculation
expected_return = 0.6*0.12 + 0.3*0.04 + 0.1*0.01
assert abs(result['weighted_return'] - expected_return) < 1e-10
# Check volatility calculation
expected_vol = math.sqrt((0.6*0.12)**2 + (0.3*0.04)**2 + (0.1*0.01)**2)
assert abs(result['volatility'] - expected_vol) < 1e-10
# Check Sharpe ratio
expected_sharpe = (expected_return - 0.02) / expected_vol
> assert abs(result['sharpe_ratio'] - expected_sharpe) < 1e-10
E assert 4.109589046841222e-08 < 1e-10
E + where 4.109589046841222e-08 = abs((0.890411 - 0.8904109589041095))
code_to_optimize/tests/pytest/test_multiple_helpers.py:26: AssertionError
=========================== short test summary info ============================
FAILED code_to_optimize/tests/pytest/test_multiple_helpers.py::test_calculate_portfolio_metrics[ 1 ]
1 failed, 3 passed in 0.15s
"""
errors = parse_test_failures_from_stdout(stdout)
assert errors
assert len(errors.keys()) == 1
assert (
errors["test_calculate_portfolio_metrics"]
== """
def test_calculate_portfolio_metrics():
# Test case 1: Basic portfolio
investments = [
('Stocks', 0.6, 0.12),
('Bonds', 0.3, 0.04),
('Cash', 0.1, 0.01)
]
result = calculate_portfolio_metrics(investments)
# Check weighted return calculation
expected_return = 0.6*0.12 + 0.3*0.04 + 0.1*0.01
assert abs(result['weighted_return'] - expected_return) < 1e-10
# Check volatility calculation
expected_vol = math.sqrt((0.6*0.12)**2 + (0.3*0.04)**2 + (0.1*0.01)**2)
assert abs(result['volatility'] - expected_vol) < 1e-10
# Check Sharpe ratio
expected_sharpe = (expected_return - 0.02) / expected_vol
> assert abs(result['sharpe_ratio'] - expected_sharpe) < 1e-10
E assert 4.109589046841222e-08 < 1e-10
E + where 4.109589046841222e-08 = abs((0.890411 - 0.8904109589041095))
code_to_optimize/tests/pytest/test_multiple_helpers.py:26: AssertionError
"""
)
def test_extracting_no_pytest_failures():
stdout = """
.... [100%]
4 passed in 0.12s
"""
errors = parse_test_failures_from_stdout(stdout)
assert errors == {}
def test_extracting_multiple_pytest_failures_with_class_method():
print("hi")
stdout = """
F.F [100%]
=================================== FAILURES ===================================
________________________ test_simple_failure ________________________
def test_simple_failure():
x = 1 + 1
> assert x == 3
E assert 2 == 3
code_to_optimize/tests/test_simple.py:10: AssertionError
________________ TestCalculator.test_divide_by_zero ________________
class TestCalculator:
def test_divide_by_zero(self):
> Calculator().divide(10, 0)
E ZeroDivisionError: division by zero
code_to_optimize/tests/test_calculator.py:22: ZeroDivisionError
=========================== short test summary info ============================
FAILED code_to_optimize/tests/test_simple.py::test_simple_failure
FAILED code_to_optimize/tests/test_calculator.py::TestCalculator::test_divide_by_zero
2 failed, 1 passed in 0.18s
"""
errors = parse_test_failures_from_stdout(stdout)
print(errors)
assert len(errors) == 2
assert "test_simple_failure" in errors
assert (
errors["test_simple_failure"]
== """
def test_simple_failure():
x = 1 + 1
> assert x == 3
E assert 2 == 3
code_to_optimize/tests/test_simple.py:10: AssertionError
"""
)
assert "TestCalculator.test_divide_by_zero" in errors
assert (
errors["TestCalculator.test_divide_by_zero"]
== """
class TestCalculator:
def test_divide_by_zero(self):
> Calculator().divide(10, 0)
E ZeroDivisionError: division by zero
code_to_optimize/tests/test_calculator.py:22: ZeroDivisionError
"""
)
def test_extracting_from_invalid_pytest_stdout():
stdout = """
Running tests...
Everything seems fine
No structured output here
Just some random logs
"""
errors = parse_test_failures_from_stdout(stdout)
assert errors == {}