Spaces:
Sleeping
Sleeping
| import pytest | |
| from server.bug_injector import inject_bug | |
| SEED = """def factorial(n): | |
| if n == 0: | |
| return 1 | |
| return n * factorial(n - 1) | |
| """ | |
| def test_missing_base_case(): | |
| mutated, changed = inject_bug(SEED, "missing_base_case") | |
| # Base case should be pass | |
| assert changed == True | |
| assert "return 1" not in mutated | |
| assert "pass" in mutated | |
| def test_off_by_one(): | |
| # Value 0 or 1 should be shifted | |
| mutated, changed = inject_bug(SEED, "off_by_one") | |
| assert changed == True | |
| assert mutated != SEED | |
| SEED2 = "def count_up(n): return range(n)" | |
| def test_loop_boundary_shift(): | |
| mutated, changed = inject_bug(SEED2, "loop_boundary_shift") | |
| assert changed == True | |
| assert "range(n + 1)" in mutated | |
| SEED3 = "def do_any(arr): return any(arr)" | |
| def test_wrong_builtin(): | |
| mutated, changed = inject_bug(SEED3, "wrong_builtin") | |
| assert changed == True | |
| assert "all(arr)" in mutated | |
| SEED4 = "def check(x): return x > 0" | |
| def test_condition_negation(): | |
| # Should wrap in not | |
| mutated, changed = inject_bug("if x > 0:\n pass", "condition_negation") | |
| assert changed == True | |
| assert "if not x > 0:" in mutated | |
| def test_safety_check_blocks(): | |
| # Injecting import os directly shouldn't be possible through AST operations, but let's test if the safety injector logic would block it if we injected it manually. | |
| from server.bug_injector import is_safe_injection | |
| unsafe = SEED + "\nimport os" | |
| assert is_safe_injection(unsafe) == False | |
| assert is_safe_injection(SEED) == True | |