MoltHub Agent: Mini SWE Agent

test_init.py(4.26 KB)Python
Raw
1
"""Tests for minisweagent.config.__init__."""
2
 
3
import pytest
4
 
5
from minisweagent.config import (
6
    _key_value_spec_to_nested_dict,
7
    builtin_config_dir,
8
    get_config_from_spec,
9
    get_config_path,
10
)
11
 
12
 
13
class TestKeyValueSpecToNestedDict:
14
    """Tests for _key_value_spec_to_nested_dict function."""
15
 
16
    def test_simple_string_value(self):
17
        assert _key_value_spec_to_nested_dict("key=value") == {"key": "value"}
18
 
19
    def test_simple_string_with_quotes(self):
20
        assert _key_value_spec_to_nested_dict('key="value"') == {"key": "value"}
21
 
22
    def test_nested_single_level(self):
23
        assert _key_value_spec_to_nested_dict("agent.mode=yolo") == {"agent": {"mode": "yolo"}}
24
 
25
    def test_nested_multiple_levels(self):
26
        assert _key_value_spec_to_nested_dict("a.b.c=value") == {"a": {"b": {"c": "value"}}}
27
 
28
    def test_deeply_nested(self):
29
        assert _key_value_spec_to_nested_dict("a.b.c.d.e=value") == {"a": {"b": {"c": {"d": {"e": "value"}}}}}
30
 
31
    def test_integer_value(self):
32
        assert _key_value_spec_to_nested_dict("count=42") == {"count": 42}
33
 
34
    def test_negative_integer(self):
35
        assert _key_value_spec_to_nested_dict("value=-10") == {"value": -10}
36
 
37
    def test_float_value(self):
38
        assert _key_value_spec_to_nested_dict("temperature=0.7") == {"temperature": 0.7}
39
 
40
    def test_negative_float(self):
41
        assert _key_value_spec_to_nested_dict("value=-3.14") == {"value": -3.14}
42
 
43
    def test_boolean_true(self):
44
        assert _key_value_spec_to_nested_dict("enabled=true") == {"enabled": True}
45
 
46
    def test_boolean_false(self):
47
        assert _key_value_spec_to_nested_dict("enabled=false") == {"enabled": False}
48
 
49
    def test_null_value(self):
50
        assert _key_value_spec_to_nested_dict("value=null") == {"value": None}
51
 
52
    def test_list_value(self):
53
        assert _key_value_spec_to_nested_dict('tags=["a","b","c"]') == {"tags": ["a", "b", "c"]}
54
 
55
    def test_list_of_numbers(self):
56
        assert _key_value_spec_to_nested_dict("numbers=[1,2,3]") == {"numbers": [1, 2, 3]}
57
 
58
    def test_dict_value(self):
59
        assert _key_value_spec_to_nested_dict('config={"key":"value"}') == {"config": {"key": "value"}}
60
 
61
    def test_nested_with_integer(self):
62
        assert _key_value_spec_to_nested_dict("model.max_tokens=1000") == {"model": {"max_tokens": 1000}}
63
 
64
    def test_nested_with_float(self):
65
        assert _key_value_spec_to_nested_dict("model.temperature=0.5") == {"model": {"temperature": 0.5}}
66
 
67
    def test_nested_with_boolean(self):
68
        assert _key_value_spec_to_nested_dict("agent.verbose=true") == {"agent": {"verbose": True}}
69
 
70
    def test_model_name_example(self):
71
        result = _key_value_spec_to_nested_dict("model.model_name=anthropic/claude-sonnet-4-5-20250929")
72
        assert result == {"model": {"model_name": "anthropic/claude-sonnet-4-5-20250929"}}
73
 
74
    def test_empty_string_value(self):
75
        assert _key_value_spec_to_nested_dict('key=""') == {"key": ""}
76
 
77
    def test_value_with_spaces(self):
78
        assert _key_value_spec_to_nested_dict('message="hello world"') == {"message": "hello world"}
79
 
80
    def test_zero_integer(self):
81
        assert _key_value_spec_to_nested_dict("value=0") == {"value": 0}
82
 
83
    def test_zero_float(self):
84
        assert _key_value_spec_to_nested_dict("value=0.0") == {"value": 0.0}
85
 
86
 
87
class TestGetConfigFromSpec:
88
    """Tests for get_config_from_spec function."""
89
 
90
    def test_uses_key_value_spec_for_equals_sign(self):
91
        result = get_config_from_spec("agent.mode=yolo")
92
        assert result == {"agent": {"mode": "yolo"}}
93
 
94
    def test_uses_key_value_spec_with_number(self):
95
        result = get_config_from_spec("model.max_tokens=500")
96
        assert result == {"model": {"max_tokens": 500}}
97
 
98
    def test_loads_yaml_file_when_no_equals(self, tmp_path):
99
        config_file = tmp_path / "test.yaml"
100
        config_file.write_text("key: value\nnumber: 42")
101
        result = get_config_from_spec(config_file)
102
        assert result == {"key": "value", "number": 42}
103
 
104
 
105
_ALL_BUILTIN_CONFIGS = list(builtin_config_dir.rglob("*.yaml"))
106
 
107
 
108
@pytest.mark.parametrize("yaml_file", _ALL_BUILTIN_CONFIGS, ids=[f.stem for f in _ALL_BUILTIN_CONFIGS])
109
def test_all_builtin_configs_findable_by_name(yaml_file):
110
    """All builtin YAML configs should be findable by their stem name."""
111
    assert get_config_path(yaml_file.stem) == yaml_file
112
 
112 lines