Пример #1
0
 def test_skeleton_day_active(self, setdt):
     setdt(2013, 1, 30, 12)
     tracker = Tracker()
     tracker.deserialize({"life":
         "days\n"
         "    day#bcdef: today\n"
         "        @started: September 23, 2012 11:00 AM\n"
         "        _genactive#cdefg: something\n"
         "            @active\n"
         "    sleep#defgh: today\n"
         "todo bucket#ghijk\n"
         "fitness log#hijkl"
     })
     today = tracker.root.find("days > day: today").one()
     tracker.root.active_node.started = None
     assert match(serialize_to_str(tracker.root), (
         "days#00001\n"
         "    day#bcdef: {0}\n"
         "        @started: September 23, 2012 11:00:00 AM\n"
         "        _genactive#cdefg: something\n"
         "            @active\n"
         "    sleep#defgh: {0}\n"
         "todo bucket#ghijk\n"
         "fitness log#hijkl\n"
     ).format(today.text))
     assert set(tracker.root.ids) == {
             "00001", "bcdef", "cdefg", "defgh", "ghijk", "hijkl", "00000"}
Пример #2
0
def test_activate_deactivate(monkeypatch, setdt):
    setdt(2012, 10, 24)
    tracker = Tracker(nodecreator=FakeNodeCreator(tasks.Task),
            skeleton=False)

    tracker.deserialize({"life":
        "task: \xfc1\n"
        "    @active\n"
        "task: \xfc2\n"
        "task: \xfc3\n"
    })

    setdt(2012, 10, 24, 0, 5)
    navigation._cmd("done", tracker.root)
    navigation._cmd("done", tracker.root)

    assert match(tracker.serialize()["life"], (
        "task#?????: \xfc1\n"
        "    @finished: 5m after October 24, 2012 12:00:00 AM\n"
        "task#?????: \xfc2\n"
        "    @finished: 0s after October 24, 2012 12:05:00 AM\n"
        "task#?????: \xfc3\n"
        "    @started: October 24, 2012 12:05:00 AM\n"
        "    @active\n"
    ))
Пример #3
0
    def test_iter_parents(self):
        tracker = Tracker(skeleton=False)

        input_str = (
            "_genactive: 0\n"
            "    _genactive: 1\n"
            "        _genactive: 2\n"
            "            _genactive: 3\n"
            "                @active"
        )

        tracker.deserialize({"life": input_str})

        expected_pairs = [
            ("_genactive", "3"),
            ("_genactive", "2"),
            ("_genactive", "1"),
            ("_genactive", "0"),
            ("life", None)
        ]

        for expected, node in izip_longest(expected_pairs,
                tracker.root.active_node.iter_parents()):
            node_type, text = expected
            assert node_type == node.node_type
            assert text == node.text
Пример #4
0
def test_searchhooks(setdt, monkeypatch):
    monkeypatch.setattr(searching, "parsecreatefilters", [
        _parsehook_dayparse,
        _parsehook_dayabs
    ])
    setdt(2014, 2, 19, 12)
    tracker = Tracker(skeleton=False)

    tracker.deserialize({"life":
        "task: something\n"
        "days\n"
        "    day: today\n"
        "    day: tomorrow\n"
        "    day: September 20, 2014\n"
    })

    something = tracker.root.find("something").one()
    assert something.find("today").one().date == date(2014, 2, 19)
    assert something.find("tomorrow").one().date == date(2014, 2, 20)
    assert something.find("sept 20, 2014").one().date == date(2014, 9, 20)
    assert not something.find("invalid date sept 20, 1995").first()

    # subject to change
    assert not something.find("sept 21, 2014").first()

    assert (searching.parse("day: today")
            == searching.Queries(searching.parse("today").queries[0]))

    setdt(2014, 2, 20, 12)
    assert something.find("today").one().date == date(2014, 2, 20)
Пример #5
0
def test_task():
    tracker = Tracker(nodecreator=FakeNodeCreator(tasks.Task),
            skeleton=False)

    tracker.deserialize({"life":
        "task: \xfca task\n"
        "    @started: June 7, 2010 7:00 AM"
    })
Пример #6
0
 def test_load_continued_text(self):
     tracker = Tracker(skeleton=False)
     lines = (
         "_gennode: derp\n"
         "    - herp\n"
         "    - derp\n"
     )
     tracker.deserialize({"life": lines})
     assert tracker.root.children.next_neighbor.text == "derp\nherp\nderp"
Пример #7
0
 def test_too_indented(self):
     tracker = Tracker(skeleton=False,
             nodecreator=FakeNodeCreator(GenericActivate))
     with pytest.raises(exceptions.LoadError):
         tracker.deserialize({"life":
             "herp\n"
             "    derp\n"
             "            donk\n"
         })
Пример #8
0
    def test_activation_no_time(self):
        tracker = Tracker(skeleton=False)

        tracker.deserialize({"life":
            "days\n"
            "    day: today\n"
            "        @active\n"
        })

        tracker.root.activate_next()
Пример #9
0
def test_active_option():
    tracker = Tracker(nodecreator=FakeNodeCreator(tasks.Task),
            skeleton=False)

    tracker.deserialize({"life":
        "task: \xfca task\n"
        "    @active"
    })

    assert tracker.root.active_node.text == "\xfca task"
Пример #10
0
    def test_load_bad_order(self):
        tracker_obj = Tracker(nodecreator=FakeNodeCreator(),
                skeleton=False)

        lines = (
            "firstchild: args\n"
            "    secondchild: other args\n"
            "    @option: this won't work here\n"
        )
        with pytest.raises(exceptions.LoadError):
            tracker_obj.deserialize({"life": lines})
Пример #11
0
def test_duplicate_day(setdt):
    setdt(2014, 3, 19, 19, 40)

    tracker = Tracker(skeleton=False)
    tracker.deserialize({"life":
        "days\n"
        "    day: today\n"
    })

    n = tracker.root.find("days").one()
    with pytest.raises(LoadError):
        n.createchild("day", "today")
Пример #12
0
    def test_roottype(self):
        class SubRootNode(TreeRootNode):

            target_variable = "present"

        tracker = Tracker(skeleton=False, roottype=SubRootNode)
        assert tracker.roottype is SubRootNode
        assert type(tracker.root) is SubRootNode

        tracker.deserialize({"life": ""})

        assert type(tracker.root) is SubRootNode
Пример #13
0
    def test_day_creation(self, setdt, hour):
        setdt(2013, 1, 30, hour)
        tracker = Tracker(skeleton=False)

        tracker.deserialize({"life":
            "days\n"
            "    day: today\n"
            "        @active\n"
        })

        days_node = tracker.root.children.next_neighbor
        node = days_node.find('sleep: today').one()
        assert node
        assert node.prev_neighbor.node_type == "day"
Пример #14
0
def test_searchhooks_mincreate(setdt, monkeypatch):
    monkeypatch.setattr(searching, "parsecreatefilters", [
        _parsehook_dayparse,
        _parsehook_dayabs
    ])
    setdt(2014, 2, 19, 12)
    tracker = Tracker(skeleton=False)

    tracker.deserialize({"life":
        "task: something\n"
        "days\n"
        "    day: today\n"
    })

    query = searching.parse("today > does not exist, cannot create")
    assert query(tracker.root).actions().list() is not None
Пример #15
0
 def test_skeleton_load_integration(self, setdt):
     setdt(2013, 1, 30, 12)
     tracker = Tracker()
     tracker.deserialize({"life":
         "todo bucket\n"
         "fitness log"
     })
     assert tracker.root.active_node is tracker.root
     assert match(serialize_to_str(tracker.root), (
         "todo bucket#?????\n"
         "fitness log#?????\n"
     ))
     assert len(tracker.root.ids) == 3
     assert tracker.root.id == "00000"
     assert "00000" in tracker.root.ids
     assert tracker.root.ids["00000"] is tracker.root
     for depth, node in tracker.root.iter_flat_children():
         assert node.id in tracker.root.ids
         assert tracker.root.ids[node.id] is node
Пример #16
0
def test_faroff_activate(setdt):
    setdt(2014, 3, 19, 20, 17)

    tracker = Tracker(skeleton=False)
    tracker.deserialize({"life":
        "days\n"
        "    day: today\n"
        "        @active\n"
        "    day: March 25, 2014\n"
    })

    navigation._cmd("create", tracker.root, "March 25, 2014 > task: something")

    navigation._cmd("activate", tracker.root, "March 25, 2014")

    with pytest.raises(searching.NoMatchesError):
        navigation._cmd("activate", tracker.root,
                "March 25, 2014 > task: something")

    assert tracker.root.active_node is tracker.root.find("today").one()
Пример #17
0
def test_archival():
    tracker = Tracker(False)
    tracker.deserialize(
        {
            "life": "archived: task#abcde: \xfctest\n"
            "    task#zxcvb: \xfcderp\n"
            "        task#qwert: \xfcderk\n"
            "    task#hjklo: \xfcherp\n"
        }
    )

    assert tracker.serialize()["life"] == (
        "archived#abcde: task#abcde: \xfctest\n"
        "    @_af\n"
        "    archived#zxcvb: task#zxcvb: \xfcderp\n"
        "        @_af\n"
        "        archived#qwert: task#qwert: \xfcderk\n"
        "            @_af\n"
        "    archived#hjklo: task#hjklo: \xfcherp\n"
        "        @_af\n"
    )

    tracker.deserialize(
        {
            "life": "unarchive: archived#abcde: task#abcde: \xfctest\n"
            "    @_af\n"
            "    archived#zxcvb: task#zxcvb: \xfcderp\n"
            "        @_af\n"
            "        archived#qwert: task#qwert: \xfcderk\n"
            "            @_af\n"
            "    archived#hjklo: task#hjklo: \xfcherp\n"
            "        @_af\n"
        }
    )

    assert tracker.serialize()["life"] == (
        "task#abcde: \xfctest\n"
        "    task#zxcvb: \xfcderp\n"
        "        task#qwert: \xfcderk\n"
        "    task#hjklo: \xfcherp\n"
    )
Пример #18
0
    def test_unhandled_load_error(self):
        class ExcOnOptionNode(GenericNode):
            def setoption(self, option, value):
                raise Exception("test exception")

        tracker = Tracker(skeleton=False,
                nodecreator=FakeNodeCreator(ExcOnOptionNode))
        input_str = (
            "node1: node1\n"
            "node2: node2\n"
            "node3: node3\n"
            "    @someoption: boom\n"
        )
        try:
            tracker.deserialize({"life": input_str})
        except exceptions.LoadError as e:
            result = str(e)
            assert "At line 4: UNHANDLED ERROR" in result
            assert "Exception: test exception" in result
        else:  # pragma: no cover
            assert False
Пример #19
0
 def test_empty_line(self):
     tracker = Tracker(skeleton=False)
     tracker.deserialize({"life":
             "\n"
             "task#12345: whatever\n"
             "   \n"
             "    task#abcde: whatever again\n"
             "\n"
             "    task#hijkl: some other thing\n"
             "\n"
             "\n"
     })
     assert tracker.serialize()["life"] == (
             "\n"
             "task#12345: whatever\n"
             "    \n"
             "    task#abcde: whatever again\n"
             "        \n"
             "    task#hijkl: some other thing\n"
             "        \n"
             "        \n"
     )
Пример #20
0
from __future__ import unicode_literals, print_function

if __name__ == "__main__":
    import sys
    from treeoflife import searching
    if "create" in sys.argv:
        dothing = searching.parse_create
    else:
        dothing = searching.parse

    todofile = "/Users/lahwran/.treeoflife/life"
    from treeoflife.tracker import Tracker
    import time
    tracker = Tracker()
    with open(todofile, "r") as reader:
        tracker.deserialize({"life": reader.read()})

    while True:
        querytext = raw_input("query: ")
        import subprocess
        subprocess.call(["clear"])
        print("query:", querytext)
        a = time.time()
        queryer = dothing(querytext)
        b = time.time()
        print(queryer, b - a)

        inittime = time.time()
        results = queryer(tracker.root)
        finishtime = time.time()