diff --git a/tests/test_advanced_features.py b/tests/test_advanced_features.py index 68e1fc4..ef18748 100644 --- a/tests/test_advanced_features.py +++ b/tests/test_advanced_features.py @@ -338,6 +338,63 @@ class TestGraphDefaults: assert report.success assert calls["n"] == 3 + def test_defaults_strategy_env_cwd(self) -> None: + """测试strategy、env、cwd字段的继承。""" + defaults = px.GraphDefaults( + strategy="thread", + env={"VAR": "value"}, + cwd="/tmp", + ) + graph = px.Graph(defaults=defaults) + graph.add(px.TaskSpec("a", lambda: "ok")) + resolved = graph.resolved_spec("a") + assert resolved.strategy == "thread" + assert resolved.env == {"VAR": "value"} + assert resolved.cwd == "/tmp" + + def test_defaults_continue_on_error_concurrency_key_verbose(self) -> None: + """测试continue_on_error、concurrency_key、verbose字段的继承。""" + defaults = px.GraphDefaults( + continue_on_error=True, + concurrency_key="pool", + verbose=True, + ) + graph = px.Graph(defaults=defaults) + graph.add(px.TaskSpec("a", lambda: "ok")) + resolved = graph.resolved_spec("a") + assert resolved.continue_on_error is True + assert resolved.concurrency_key == "pool" + assert resolved.verbose is True + + def test_defaults_spec_excludes_non_default_values(self) -> None: + """测试当spec已有非默认值时,不应被defaults覆盖。""" + defaults = px.GraphDefaults( + strategy="thread", + continue_on_error=True, + verbose=True, + priority=5, + ) + graph = px.Graph(defaults=defaults) + graph.add( + px.TaskSpec( + "a", + lambda: "ok", + strategy="sequential", + continue_on_error=True, # True是非默认值,不会被覆盖 + verbose=True, # True是非默认值,不会被覆盖 + priority=10, # 非0值,不会被覆盖 + ) + ) + resolved = graph.resolved_spec("a") + # strategy已有非默认值,不会被覆盖 + assert resolved.strategy == "sequential" + # continue_on_error=True不会被defaults覆盖(只有False才会被覆盖) + assert resolved.continue_on_error is True + # verbose=True不会被defaults覆盖(只有False才会被覆盖) + assert resolved.verbose is True + # priority非0值不会被覆盖 + assert resolved.priority == 10 + # ---------------------------------------------------------------------- # # 软依赖 soft_depends_on diff --git a/tests/test_graph.py b/tests/test_graph.py index 7abd872..950056d 100644 --- a/tests/test_graph.py +++ b/tests/test_graph.py @@ -162,6 +162,19 @@ def test_all_specs_returns_view() -> None: assert view is graph.all_specs() or view == graph.all_specs() +def test_all_deps_combines_hard_and_soft() -> None: + """all_deps 应返回硬依赖 + 软依赖的组合。""" + graph = px.Graph.from_specs([ + px.TaskSpec("a", _fn), + px.TaskSpec("b", _fn), + px.TaskSpec("c", _fn, depends_on=("a",), soft_depends_on=("b",)), + ]) + all_deps = graph.all_deps("c") + assert set(all_deps) == {"a", "b"} + # 硬依赖在前,软依赖在后 + assert all_deps == ("a", "b") + + def test_spec_accessor() -> None: graph = px.Graph.from_specs([px.TaskSpec("a", _fn)]) assert graph.spec("a").name == "a"