mirror of
https://github.com/aljazceru/goose.git
synced 2025-12-27 11:04:26 +01:00
94 lines
2.6 KiB
Python
94 lines
2.6 KiB
Python
import os
|
|
from unittest.mock import Mock
|
|
import pytest
|
|
from goose.synopsis.system import OperatingSystem
|
|
|
|
|
|
@pytest.fixture
|
|
def os_instance(tmpdir):
|
|
original_cwd = os.getcwd()
|
|
os.chdir(tmpdir)
|
|
yield OperatingSystem(cwd=str(tmpdir))
|
|
os.chdir(original_cwd)
|
|
|
|
|
|
def test_to_relative(os_instance, tmpdir):
|
|
abs_path = os.path.join(tmpdir, "test_file.txt")
|
|
rel_path = os_instance.to_relative(abs_path)
|
|
assert rel_path == "test_file.txt"
|
|
|
|
|
|
def test_remember_forget_file(os_instance, tmpdir):
|
|
test_file = tmpdir.join("test_file.txt")
|
|
test_file.write("test content")
|
|
|
|
os_instance.remember_file(str(test_file))
|
|
assert os_instance.is_active(str(test_file))
|
|
|
|
os_instance.forget_file(str(test_file))
|
|
assert not os_instance.is_active(str(test_file))
|
|
|
|
|
|
def test_active_files(os_instance, tmpdir):
|
|
test_file1 = tmpdir.join("test_file1.txt")
|
|
test_file2 = tmpdir.join("test_file2.py")
|
|
test_file1.write("test content 1")
|
|
test_file2.write("test content 2")
|
|
|
|
os_instance.remember_file(str(test_file1))
|
|
os_instance.remember_file(str(test_file2))
|
|
|
|
active_files = list(os_instance.active_files)
|
|
assert len(active_files) == 2
|
|
assert any(f.path == "test_file1.txt" for f in active_files)
|
|
assert any(f.path == "test_file2.py" for f in active_files)
|
|
|
|
|
|
def test_info(os_instance):
|
|
info = os_instance.info()
|
|
assert "os" in info
|
|
assert "cwd" in info
|
|
assert "shell" in info
|
|
|
|
|
|
def test_add_process(os_instance):
|
|
process = Mock()
|
|
process.pid = 1234
|
|
process.stdout = Mock()
|
|
process.stdout.fileno.return_value = 1
|
|
process_id = os_instance.add_process(process)
|
|
assert process_id == 1234
|
|
assert 1234 in os_instance._processes
|
|
|
|
|
|
def test_get_processes(os_instance):
|
|
process1 = Mock()
|
|
process1.pid = 1234
|
|
process1.args = "python -m http.server 8000"
|
|
process1.stdout = Mock()
|
|
process1.stdout.fileno.return_value = 1
|
|
os_instance.add_process(process1)
|
|
|
|
process2 = Mock()
|
|
process2.pid = 5678
|
|
process2.args = "python script.py"
|
|
process2.stdout = Mock()
|
|
process2.stdout.fileno.return_value = 2
|
|
os_instance.add_process(process2)
|
|
|
|
processes = os_instance.get_processes()
|
|
assert processes == {1234: "python -m http.server 8000", 5678: "python script.py"}
|
|
|
|
|
|
def test_cancel_process(os_instance):
|
|
process = Mock()
|
|
process.pid = 1234
|
|
process.stdout = Mock()
|
|
process.stdout.fileno.return_value = 1
|
|
os_instance.add_process(process)
|
|
|
|
result = os_instance.cancel_process(1234)
|
|
assert result is True
|
|
assert 1234 not in os_instance._processes
|
|
process.terminate.assert_called_once()
|