Example #1
0
 def test_closed_leaf_goal_could_not_be_reopened(self):
     self.goals = self.build(open_(1, "Root", [2], select=selected),
                             clos_(2, "A", [3]), clos_(3, "B"))
     assert self.goals.q(keys="open,switchable") == {
         1: {
             "open": True,
             "switchable": True
         },
         2: {
             "open": False,
             "switchable": True
         },
         3: {
             "open": False,
             "switchable": False
         },
     }
     self.goals.accept_all(Select(3), ToggleClose())
     # nothing should change
     assert self.goals.q(keys="open,switchable") == {
         1: {
             "open": True,
             "switchable": True
         },
         2: {
             "open": False,
             "switchable": True
         },
         3: {
             "open": False,
             "switchable": False
         },
     }
Example #2
0
def test_closed_goals_are_shown_when_selected():
    v = OpenView(
        build_goaltree(
            open_(1, "Root", [2, 3], select=selected),
            clos_(2, "closed"),
            clos_(3, "closed too", [4]),
            clos_(4, "closed and not selected"),
        ))
    v.accept_all(ToggleOpenView(), Select(2), HoldSelect(), Select(3))
    assert v.q("name,select,open") == {
        1: {
            "name": "Root",
            "open": True,
            "select": None
        },
        2: {
            "name": "closed",
            "open": False,
            "select": "prev"
        },
        3: {
            "name": "closed too",
            "open": False,
            "select": "select"
        },
        4: {
            "name": "closed and not selected",
            "open": False,
            "select": None
        },
    }
    v.accept(ToggleOpenView())
    # Still show: open goals, selected goals
    assert v.q("name,select,open") == {
        1: {
            "name": "Root",
            "open": True,
            "select": None
        },
        2: {
            "name": "closed",
            "open": False,
            "select": "prev"
        },
        3: {
            "name": "closed too",
            "open": False,
            "select": "select"
        },
    }
Example #3
0
def test_dot_export():
    goals = build_goaltree(
        open_(1, "Root", [2, 3, 4, 5], blockers=[6]),
        clos_(
            2,
            "This is closed goal with no children or blockers. "
            "It also has a long name that must be compacted",
        ),
        open_(3, 'I have some "special" symbols', [6, 7], select=selected),
        clos_(4, ""),
        open_(5, "Many blockerz", blockers=[2, 4, 6, 7]),
        clos_(6, "!@#$%^&*()\\/,.?"),
        open_(7, ";:[{}]<>", select=previous),
    )
    verify(dot_export(goals),
           reporter=GenericDiffReporterFactory().get_first_working())
Example #4
0
 def test_message_when_closed_goal_is_blocked_by_open_one(self):
     self.goals = self.build(
         open_(1, "Root", [2, 3]),
         clos_(2, "Middle", [], select=previous),
         open_(3, "Top", [], select=selected),
     )
     self.goals.accept(ToggleLink())
     assert len(self.messages) == 1
Example #5
0
def test_build_fake_links_to_far_closed_goals():
    v = OpenView(
        build_goaltree(
            open_(1, "Root", blockers=[2], select=previous),
            clos_(2, "Middle", blockers=[3]),
            clos_(3, "Top", select=selected),
        ))
    assert v.q("select,edge") == {
        1: {
            "select": "prev",
            "edge": [(3, EdgeType.BLOCKER)]
        },
        3: {
            "select": "select",
            "edge": []
        },
    }
Example #6
0
def extract_target():
    return persistent_layers(
        build_goaltree(
            open_(1, "Extract root", [2, 3], select=selected),
            open_(2, "Subgoal", blockers=[3]),
            open_(3, "Selected subgoal (selection will be lost)", [4]),
            clos_(4, "Closed subgoal"),
        ))
Example #7
0
def extract_source():
    # Legend: goals marked with 'NX' must not be extracted
    return Enumeration(
        all_layers(
            build_goaltree(
                open_(1, "Root NX", [2, 3], select=selected),
                open_(2, "Extract root", [4, 5], blockers=[3]),
                open_(3, "External blocker NX", [7]),
                open_(4, "Subgoal", blockers=[5]),
                open_(
                    5,
                    "Selected subgoal (selection will be lost)",
                    [6],
                    select=previous,
                ),
                clos_(6, "Closed subgoal", blockers=[7]),
                clos_(7, "Another external blocker NX"),
            )))
Example #8
0
def test_still_show_root_when_it_is_closed_and_unselected():
    v = OpenView(
        build_goaltree(
            clos_(1, "Hidden root", [2]),
            clos_(2, "Visible", select=selected),
        ))
    assert v.q("select,open,edge") == {
        1: {
            "select": None,
            "open": False,
            "edge": [(2, EdgeType.PARENT)]
        },
        2: {
            "select": "select",
            "open": False,
            "edge": []
        },
    }
Example #9
0
 def test_close_goal_again(self):
     self.goals = self.build(
         open_(1, "Root", [2], select=selected),
         open_(2, "A", [3]),
         clos_(3, "Ab"),
     )
     self.goals.accept_all(Select(2), ToggleClose())
     assert self.goals.q(keys="open,switchable") == {
         1: {
             "open": True,
             "switchable": True
         },
         2: {
             "open": False,
             "switchable": True
         },
         3: {
             "open": False,
             "switchable": False
         },
     }
     self.goals.accept_all(Select(2), ToggleClose())
     assert self.goals.q(keys="open,switchable") == {
         1: {
             "open": True,
             "switchable": False
         },
         2: {
             "open": True,
             "switchable": True
         },
         3: {
             "open": False,
             "switchable": True
         },
     }
     self.goals.accept_all(Select(2), ToggleClose())
     assert self.goals.q(keys="open,switchable") == {
         1: {
             "open": True,
             "switchable": True
         },
         2: {
             "open": False,
             "switchable": True
         },
         3: {
             "open": False,
             "switchable": False
         },
     }
Example #10
0
def test_render_example():
    g = build_goaltree(
        open_(1, "Root", [2, 3, 4, 5, 6], [7, 8]),
        clos_(2, "Closed", blockers=[7]),
        open_(3, "Simply 3", blockers=[5, 8]),
        open_(4, "Also 4", blockers=[5, 6, 7, 8], select=selected),
        open_(5, "Now 5", blockers=[6]),
        clos_(6, "Same 6", blockers=[7]),
        clos_(7, "Lucky 7", [8], select=previous),
        clos_(8, "Finally 8"),
    )
    r = Renderer(g)
    result = r.build()
    gp = FakeGeometry()
    adjust_graph(result, gp)
    lines = render_lines(gp, result)
    with io.StringIO() as out:
        print("== Graph\n", file=out)
        pprint(result.graph, out)
        print("\n== Geometry change after adjust\n", file=out)
        total_delta = Point(0, 0)
        for goal_id in g.goals:
            goal = result.graph[goal_id]
            delta = gp.top_left(goal["row"], goal["col"]) - Point(
                goal["x"], goal["y"])
            total_delta += delta
            print(f"{goal_id}: dx={delta.x}, dy={delta.y}", file=out)
        avg_dx = total_delta.x // len(g.goals)
        avg_dy = total_delta.y // len(g.goals)
        print(f"Avg: dx={avg_dx}, dy={avg_dy}", file=out)
        print("\n== Edge options\n", file=out)
        pprint(result.edge_opts, out)
        print("\n== Lines", file=out)
        pprint(lines, out)
        verify(out.getvalue(),
               reporter=GenericDiffReporterFactory().get_first_working())
Example #11
0
def test_do_not_add_autolink_to_closed_goals():
    messages: List[str] = []
    goals = AutoLink(
        build_goaltree(
            open_(1, "Root", [2]),
            clos_(2, "Well, it's closed", select=selected),
            message_fn=messages.append,
        ))
    goals.accept(ToggleAutoLink("Failed"))
    assert goals.q("name,edge") == {
        1: {
            "name": "Root",
            "edge": [(2, EdgeType.PARENT)]
        },
        2: {
            "name": "Well, it's closed",
            "edge": []
        },
    }
    assert messages == ["Autolink cannot be set for closed goals"]
    assert _autolink_events(goals) == []
Example #12
0
 def test_reopen_goal(self):
     self.goals = self.build(open_(1, "Root", [2]),
                             clos_(2, "A", select=selected))
     assert self.goals.q(keys="open") == {
         1: {
             "open": True
         },
         2: {
             "open": False
         }
     }
     self.goals.accept(ToggleClose())
     assert self.goals.q(keys="open,switchable") == {
         1: {
             "open": True,
             "switchable": False
         },
         2: {
             "open": True,
             "switchable": True
         },
     }
Example #13
0
 def test_message_on_delete_root_goal(self):
     self.goals = self.build(clos_(1, "Root", [2], select=selected),
                             clos_(2, "Top"))
     self.goals.accept(Delete())
     assert len(self.messages) == 1
Example #14
0
 def test_no_message_on_delete_non_root_goal(self):
     self.goals = self.build(clos_(1, "Root", [2]),
                             clos_(2, "Top", [], select=selected))
     self.goals.accept(Delete())
     assert self.messages == []
Example #15
0
 def test_message_on_reopening_blocked_goal(self):
     self.goals = self.build(clos_(1, "Root", [2]),
                             clos_(2, "Top", [], select=selected))
     self.goals.accept(ToggleClose())
     assert len(self.messages) == 1
Example #16
0
def two_goals():
    g = build_goaltree(open_(1, "Open", [2], [], select=selected),
                       clos_(2, "Closed"))
    return OpenView(g)
Example #17
0
 def test_message_on_wrong_add(self):
     self.goals = self.build(clos_(1, "Root", select=selected))
     self.goals.accept(Add("Failed"))
     assert len(self.messages) == 1
Example #18
0
 def test_no_message_on_valid_reopening(self):
     self.goals = self.build(clos_(1, "Root", [2], select=selected),
                             clos_(2, "Top"))
     self.goals.accept(ToggleClose())
     assert self.messages == []