コード例 #1
0
ファイル: test_filter.py プロジェクト: wzel/topydo
    def setUp(self):
        super().setUp()

        self.todo1 = "2015-12-19 With creation date."
        self.todo2 = "Without creation date."

        self.todos = [Todo(self.todo1), Todo(self.todo2)]
コード例 #2
0
ファイル: test_colors.py プロジェクト: kevinheader/topydo
    def test_priority_color4(self):
        config("test/data/ColorsTest4.conf")
        todo_a = Todo('(A) Foo')
        todo_b = Todo('(B) Bar')
        todo_c = Todo('(C) FooBar')

        color_a = config().priority_color(todo_a.priority()).as_ansi()
        color_b = config().priority_color(todo_b.priority()).as_ansi()
        color_c = config().priority_color(todo_c.priority()).as_ansi()

        self.assertEqual(color_a, '')
        self.assertEqual(color_b, '')
        self.assertEqual(color_c, '')
コード例 #3
0
ファイル: TodoListBase.py プロジェクト: wroldwiedbwe/topydo
    def add_list(self, p_srcs):
        todos = [Todo(src) for src in p_srcs]
        if config().auto_delete_whitespace():
            todos = [todo for todo in todos if re.search(r'\S', todo.source())]
        self.add_todos(todos)

        return todos
コード例 #4
0
 def test_importance_ignore_weekends_due_not_next_monday(self):
     # Today is sunday
     # due on a monday, but over a month away.
     # So 2 + 0 (no priority) + 0 (no star) + 0 (due > 14 days)
     config(p_overrides={('sort', 'ignore_weekends'): '1'})
     todo = Todo("Foo " + config().tag_due() + ":" + "2016-11-28")
     self.assertEqual(importance(todo), 2)
コード例 #5
0
    def test_todo_number1(self):
        todo = Todo("No number")
        self.todolist.add_todo(todo)

        todo = self.todolist.todo(6)
        self.assertIsInstance(todo, Todo)
        self.assertEquals(todo.text(), "No number")
コード例 #6
0
ファイル: test_filter.py プロジェクト: wzel/topydo
    def setUp(self):
        super().setUp()

        self.todo1 = "(A) Foo"
        self.todo2 = "(B) Bar"
        self.todo3 = "(C) Baz"
        self.todo4 = "(Z) FooBar"
        self.todo5 = "FooBaz"

        self.todos = [
            Todo(self.todo1),
            Todo(self.todo2),
            Todo(self.todo3),
            Todo(self.todo4),
            Todo(self.todo5),
        ]
コード例 #7
0
def _advance_recurring_todo_helper(p_todo, p_offset):
    """
    Given a Todo item, return a new instance of a Todo item with the dates
    shifted according to the recurrence rule.

    The new date is calculated from the given p_offset value.

    When no recurrence tag is present, an exception is raised.
    """

    todo = Todo(p_todo.source())
    pattern = todo.tag_value('rec')

    if not pattern:
        raise NoRecurrenceException()

    length = todo.length()
    new_due = relative_date_to_date(pattern, p_offset)

    if not new_due:
        raise NoRecurrenceException()

    # pylint: disable=E1103
    todo.set_tag(config().tag_due(), new_due.isoformat())

    if todo.start_date():
        new_start = new_due - timedelta(length)
        todo.set_tag(config().tag_start(), new_start.isoformat())

    todo.set_creation_date(date.today())

    return todo
コード例 #8
0
    def test_json(self):
        """ Print a single todo item. """
        printer = JsonPrinter()
        todo = Todo('2015-06-06 Foo due:2015-05-32')

        result = printer.print_todo(todo)

        self.assertEqual(result, '{"completed": false, "completion_date": null, "contexts": [], "creation_date": "2015-06-06", "priority": null, "projects": [], "source": "2015-06-06 Foo due:2015-05-32", "tags": [["due", "2015-05-32"]], "text": "Foo"}')
コード例 #9
0
    def test_edit_expr(self, mock_open_in_editor, mock_todos_from_temp, mock_is_edited):
        """ Edit todos matching expression. """
        mock_open_in_editor.return_value = 0
        mock_todos_from_temp.return_value = [Todo('Lazy Cat'),
                                             Todo('Lazy Dog')]
        mock_is_edited.return_value = True

        command = EditCommand(["-e", "@test"], self.todolist, self.out,
                              self.error, None)
        command.execute()

        expected = u"|  3| Lazy Cat\n|  4| Lazy Dog\n"

        self.assertEqual(self.errors, "")
        self.assertTrue(self.todolist.dirty)
        self.assertEqual(self.output, expected)
        self.assertEqual(self.todolist.print_todos(), u"Foo id:1\nFo\u00f3B\u0105\u017a\nLazy Cat\nLazy Dog")
コード例 #10
0
ファイル: EditCommand.py プロジェクト: wzel/topydo
    def _todos_from_temp(p_temp_file):
        with codecs.open(p_temp_file.name, encoding='utf-8') as temp:
            todos = temp.read().splitlines()

        todo_objs = []
        for todo in todos:
            todo_objs.append(Todo(todo))

        return todo_objs
コード例 #11
0
    def _todos_from_temp(self, p_temp_file):
        p_temp_file.seek(0)
        todos = p_temp_file.read().decode('utf-8').splitlines()

        todo_objs = []
        for todo in todos:
            todo_objs.append(Todo(todo))

        return todo_objs
コード例 #12
0
ファイル: test_todo_list.py プロジェクト: kevinheader/topydo
    def test_delete2(self):
        """ Try to remove a todo item that does not exist. """
        count = self.todolist.count()

        todo = Todo('Not in the list')
        self.todolist.delete(todo)

        self.assertEqual(self.todolist.count(), count)
        self.assertFalse(self.todolist.dirty)
コード例 #13
0
    def test_edit_addnew(self, mock_open_in_editor, mock_todos_from_temp,
                         mock_is_edited):
        """ New todos are added in the process of editing. """
        mock_open_in_editor.return_value = 0
        mock_todos_from_temp.return_value = [
            Todo('Bar (edited)'),
            Todo('New1'), Todo('New 2')
        ]
        mock_is_edited.return_value = True

        command = EditCommand(["2"], self.todolist, self.out, self.error, None)
        command.execute()

        self.assertEqual(self.errors, "")
        self.assertTrue(self.todolist.dirty)
        self.assertEqual(
            self.todolist.print_todos(),
            u"Foo id:1\nBar (edited)\nBaz @test\nFo\u00f3B\u0105\u017a\nNew1\nNew 2"
        )
コード例 #14
0
ファイル: test_colors.py プロジェクト: kevinheader/topydo
    def test_priority_color3(self):
        config("test/data/ColorsTest3.conf")
        todo_a = Todo('(A) Foo')
        todo_b = Todo('(B) Bar')
        todo_z = Todo('(Z) FooBar')
        todo_d = Todo('(D) Baz')
        todo_c = Todo('(C) FooBaz')

        color_a = config().priority_color(todo_a.priority()).as_ansi()
        color_b = config().priority_color(todo_b.priority()).as_ansi()
        color_z = config().priority_color(todo_z.priority()).as_ansi()
        color_d = config().priority_color(todo_d.priority()).as_ansi()
        color_c = config().priority_color(todo_c.priority()).as_ansi()

        self.assertEqual(color_a, '\033[0;35m')
        self.assertEqual(color_b, '\033[0;1;36m')
        self.assertEqual(color_z, NEUTRAL_COLOR)
        self.assertEqual(color_d, '\033[0;31m')
        self.assertEqual(color_c, '\033[0;37m')
コード例 #15
0
    def setUp(self):
        super(OrdinalTagFilterTest, self).setUp()

        today = date.today()
        tomorrow = today + timedelta(1)

        self.today = today.isoformat()
        self.tomorrow = tomorrow.isoformat()

        self.todo1 = "Foo due:{}".format(self.today)
        self.todo2 = "Bar due:{}".format(self.tomorrow)
        self.todo3 = "Baz due:nonsense"
        self.todo4 = "Fnord due:2014-10-32"

        self.todos = [
            Todo(self.todo1),
            Todo(self.todo2),
            Todo(self.todo3),
            Todo(self.todo4),
        ]
コード例 #16
0
    def test_edit01(self, mock_open_in_editor, mock_todos_from_temp, mock_is_edited):
        """ Preserve dependencies after editing. """
        mock_open_in_editor.return_value = 0
        mock_todos_from_temp.return_value = [Todo('Foo id:1')]
        mock_is_edited.return_value = True

        command = EditCommand(["1"], self.todolist, self.out, self.error, None)
        command.execute()

        self.assertEqual(self.errors, "")
        self.assertTrue(self.todolist.dirty)
        self.assertEqual(self.todolist.print_todos(), u"Bar p:1 @test\nBaz @test\nFo\u00f3B\u0105\u017a\nFoo id:1")
コード例 #17
0
    def test_edit7(self, mock_open_in_editor, mock_todos_from_temp):
        """ Edit todo with special characters. """
        mock_open_in_editor.return_value = 0
        mock_todos_from_temp.return_value = [Todo('Lazy Cat')]

        command = EditCommand([u("Fo\u00f3B\u0105\u017a")], self.todolist,
                              self.out, self.error, None)
        command.execute()

        self.assertTrue(self.todolist.is_dirty())
        self.assertEqual(self.errors, "")
        self.assertEqual(self.todolist.print_todos(),
                         u("Foo id:1\nBar p:1 @test\nBaz @test\nLazy Cat"))
コード例 #18
0
    def test_edit07(self, mock_open_in_editor, mock_todos_from_temp, mock_is_edited):
        """ Don't perform write if tempfile is unchanged """
        mock_open_in_editor.return_value = 0
        mock_todos_from_temp.return_value = [Todo('Only one line')]
        mock_is_edited.return_value = False

        command = EditCommand(["1", "Bar"], self.todolist, self.out,
                              self.error, None)
        command.execute()

        self.assertFalse(self.todolist.dirty)
        self.assertEqual(self.errors, "Editing aborted. Nothing to do.\n")
        self.assertEqual(self.todolist.print_todos(), u"Foo id:1\nBar p:1 @test\nBaz @test\nFo\u00f3B\u0105\u017a")
コード例 #19
0
ファイル: test_filter.py プロジェクト: wzel/topydo
    def setUp(self):
        super().setUp()

        today = date.today()
        tomorrow = today + timedelta(1)

        self.today = today.isoformat()
        self.tomorrow = tomorrow.isoformat()

        self.todo1 = "Foo due:{}".format(self.today)
        self.todo2 = "Bar due:{}".format(self.tomorrow)
        self.todo3 = "Baz due:Nonsense"
        self.todo4 = "Fnord due:2014-10-32"
        self.todo5 = "Double tags key:value1 key:value2"

        self.todos = [
            Todo(self.todo1),
            Todo(self.todo2),
            Todo(self.todo3),
            Todo(self.todo4),
            Todo(self.todo5),
        ]
コード例 #20
0
    def test_edit02(self, mock_open_in_editor, mock_todos_from_temp, mock_is_edited):
        """ Edit some todo. """
        mock_open_in_editor.return_value = 0
        mock_todos_from_temp.return_value = [Todo('Lazy Cat')]
        mock_is_edited.return_value = True

        command = EditCommand(["Bar"], self.todolist, self.out, self.error,
                              None)
        command.execute()

        self.assertTrue(self.todolist.dirty)
        self.assertEqual(self.errors, "")
        self.assertEqual(self.todolist.print_todos(), u"Foo id:1\nBaz @test\nFo\u00f3B\u0105\u017a\nLazy Cat")
コード例 #21
0
ファイル: test_colors.py プロジェクト: kevinheader/topydo
    def test_empty_color_values(self):
        config("test/data/ColorsTest5.conf")
        project_color = config().project_color().as_ansi(p_decoration='bold')
        context_color = config().context_color().as_ansi(p_decoration='bold')
        link_color = config().link_color().as_ansi(p_decoration='underline')
        metadata_color = config().metadata_color().as_ansi(p_decoration='bold')

        todo_a = Todo('(A) Foo')
        todo_b = Todo('(B) Bar')
        todo_c = Todo('(C) FooBar')

        color_a = config().priority_color(todo_a.priority()).as_ansi()
        color_b = config().priority_color(todo_b.priority()).as_ansi()
        color_c = config().priority_color(todo_c.priority()).as_ansi()

        self.assertEqual(color_a, NEUTRAL_COLOR)
        self.assertEqual(color_b, NEUTRAL_COLOR)
        self.assertEqual(color_c, NEUTRAL_COLOR)
        self.assertEqual(project_color, '')
        self.assertEqual(context_color, '')
        self.assertEqual(link_color, '')
        self.assertEqual(metadata_color, '')
コード例 #22
0
ファイル: test_colors.py プロジェクト: kevinheader/topydo
    def test_empty_colorscheme(self):
        config("test/data/config1")
        project_color = config().project_color().as_ansi(p_decoration='bold')
        context_color = config().context_color().as_ansi(p_decoration='bold')
        link_color = config().link_color().as_ansi(p_decoration='underline')
        metadata_color = config().metadata_color().as_ansi(p_decoration='bold')

        todo_a = Todo('(A) Foo')
        todo_b = Todo('(B) Bar')
        todo_c = Todo('(C) FooBar')

        color_a = config().priority_color(todo_a.priority()).as_ansi()
        color_b = config().priority_color(todo_b.priority()).as_ansi()
        color_c = config().priority_color(todo_c.priority()).as_ansi()

        self.assertEqual(color_a, '\033[0;36m')
        self.assertEqual(color_b, '\033[0;33m')
        self.assertEqual(color_c, '\033[0;34m')
        self.assertEqual(project_color, '\033[1;31m')
        self.assertEqual(context_color, '\033[1;35m')
        self.assertEqual(link_color, '\033[4;36m')
        self.assertEqual(metadata_color, '\033[1;32m')
コード例 #23
0
    def test_edit_remove(self, mock_open_in_editor, mock_todos_from_temp,
                         mock_is_edited):
        """ Some todos are removed in the process of editing. """
        mock_open_in_editor.return_value = 0
        mock_todos_from_temp.return_value = [Todo('Foo (edited)')]

        mock_is_edited.return_value = True

        command = EditCommand(["1", "2"], self.todolist, self.out, self.error,
                              None)
        command.execute()

        self.assertEqual(self.errors, "")
        self.assertTrue(self.todolist.dirty)
        self.assertEqual(self.todolist.print_todos(),
                         u"Foo (edited)\nBaz @test\nFo\u00f3B\u0105\u017a")
コード例 #24
0
    def test_edit5(self, mock_open_in_editor, mock_todos_from_temp):
        """ Don't let to delete todos acidentally while editing. """
        mock_open_in_editor.return_value = 0
        mock_todos_from_temp.return_value = [Todo('Only one line')]

        command = EditCommand(["1", "Bar"], self.todolist, self.out,
                              self.error, None)
        command.execute()

        self.assertFalse(self.todolist.is_dirty())
        self.assertEqual(
            self.errors,
            "Number of edited todos is not equal to number of supplied todo IDs.\n"
        )
        self.assertEqual(
            self.todolist.print_todos(),
            u("Foo id:1\nBar p:1 @test\nBaz @test\nFo\u00f3B\u0105\u017a"))
コード例 #25
0
def advance_recurring_todo(p_todo, p_offset=None, p_strict=False):
    """
    Given a Todo item, return a new instance of a Todo item with the dates
    shifted according to the recurrence rule.

    Strict means that the real due date is taken as a offset, not today or a
    future date to determine the offset.

    When the todo item has no due date, then the date is used passed by the
    caller (defaulting to today).

    When no recurrence tag is present, an exception is raised.
    """
    todo = Todo(p_todo.source())
    pattern = todo.tag_value('rec')

    if not pattern:
        raise NoRecurrenceException()
    elif pattern.startswith('+'):
        p_strict = True
        # strip off the +
        pattern = pattern[1:]

    if p_strict:
        offset = p_todo.due_date() or p_offset or date.today()
    else:
        offset = p_offset or date.today()

    length = todo.length()
    new_due = relative_date_to_date(pattern, offset)

    if not new_due:
        raise NoRecurrenceException()

    # pylint: disable=E1103
    todo.set_tag(config().tag_due(), new_due.isoformat())

    if todo.start_date():
        new_start = new_due - timedelta(length)
        todo.set_tag(config().tag_start(), new_start.isoformat())

    if config().auto_creation_date():
        todo.set_creation_date(date.today())

    return todo
コード例 #26
0
 def test_progress12(self):
     """ Due tomorrow (creation date) """
     set_256_colors()
     color = progress_color(Todo('2016-01-01 Foo due:2016-01-02'))
     self.assertEqual(color.color, 22)
コード例 #27
0
    def add_list(self, p_srcs):
        todos = [Todo(src) for src in p_srcs if re.search(r'\S', src)]
        self.add_todos(todos)

        return todos
コード例 #28
0
ファイル: facilities.py プロジェクト: wzel/topydo
def load_file(p_filename):
    """
    Loads a todo file from the given filename and returns a list of todos.
    """
    todolist = load_file_to_raw_list(p_filename)
    return [Todo(src) for src in todolist]
コード例 #29
0
 def test_progress11(self):
     """ Due tomorrow (creation date) """
     color = progress_color(Todo('2016-01-01 Foo due:2016-01-02'))
     # a length of 14 days is assumed
     self.assertEqual(color.color, 2)
コード例 #30
0
 def test_todo_number2(self):
     todo = Todo("Non-existent")
     self.assertRaises(InvalidTodoException, self.todolist.number, todo)