import sys from mutator.runner import CommandRunner, _clojure_command, _python_command, nearest def test_nearest_walks_up_to_the_marker(tmp_path): root = tmp_path / "proj" nested = root / "src" / "demo" nested.mkdir(parents=True) (root / "pyproject.toml").write_text("", encoding="utf-8") source = nested / "app.py" source.write_text("x = 1\n", encoding="utf-8") assert nearest(source, "pyproject.toml", root) == root assert nearest(nested, "pyproject.toml", root) == root assert nearest(source, "missing.toml", root) is None def test_clojure_commands(tmp_path): bb = tmp_path / "bb-spec" bb.mkdir() (bb / "bb.edn").write_text('{:tasks {spec "spec"}}', encoding="utf-8") assert _clojure_command(bb) == "bb spec --tag ~no-mutate" bb_test = tmp_path / "bb-test" bb_test.mkdir() (bb_test / "bb.edn").write_text("{:tasks {test (clojure \"-M:test\")}}", encoding="utf-8") assert _clojure_command(bb_test) == "bb test" spec = tmp_path / "spec" spec.mkdir() (spec / "deps.edn").write_text( "{:aliases {:spec {:extra-deps {speclj/speclj {}}}}}", encoding="utf-8" ) assert _clojure_command(spec) == "clj -M:spec --tag ~no-mutate" spec_only = tmp_path / "spec-only" spec_only.mkdir() (spec_only / "deps.edn").write_text("{:aliases {:spec {}}}", encoding="utf-8") assert _clojure_command(spec_only) == "clj -M:spec" plain = tmp_path / "plain" plain.mkdir() (plain / "deps.edn").write_text("{:deps {}}", encoding="utf-8") assert _clojure_command(plain) == "clj -M:test" def test_python_commands(tmp_path): pytest_dir = tmp_path / "py" pytest_dir.mkdir() (pytest_dir / "pytest.ini").write_text("[pytest]\n", encoding="utf-8") assert _python_command(pytest_dir).endswith("-m pytest") unit = tmp_path / "unit" unit.mkdir() assert _python_command(unit).endswith("-m unittest discover") cfg = tmp_path / "cfg" cfg.mkdir() (cfg / "setup.cfg").write_text("[tool:pytest]\n", encoding="utf-8") assert _python_command(cfg).endswith("-m pytest") project = tmp_path / "proj" project.mkdir() (project / "pyproject.toml").write_text("[project]\ndependencies=['pytest']\n", encoding="utf-8") assert _python_command(project).endswith("-m pytest") conf = tmp_path / "conf" conf.mkdir() (conf / "conftest.py").write_text("", encoding="utf-8") assert _python_command(conf).endswith("-m pytest") def test_a_worker_overlay_is_imported_ahead_of_the_environment(tmp_path): worker = tmp_path / "target" / "mutation-workers" / "run-1" / "worker-0" (worker / "src").mkdir(parents=True) (worker / "src" / "demo.py").write_text("VALUE = 'worker'\n", encoding="utf-8") command = f"{sys.executable} -c 'import demo; print(demo.VALUE)'" result = CommandRunner().run(command, worker, 5) assert result.code == 0 assert result.output.strip() == "worker"