Esempio n. 1
0
class TodoListTester(TopydoTest):
    def setUp(self):
        super(TodoListTester, self).setUp()

        self.todofile = TodoFile('test/data/TodoListTest.txt')
        lines = [line for line in self.todofile.read() \
                       if re.search(r'\S', line)]
        self.text = ''.join(lines)
        self.todolist = TodoList(lines)

    def test_contexts(self):
        self.assertEquals(set(['Context1', 'Context2']), \
            self.todolist.contexts())
        self.assertFalse(self.todolist.is_dirty())

    def test_projects(self):
        self.assertEquals(set(['Project1', 'Project2']), \
            self.todolist.projects())
        self.assertFalse(self.todolist.is_dirty())

    def test_add1(self):
        text = "(C) Adding a new task @Context3 +Project3"
        count = self.todolist.count()
        todo = self.todolist.add(text)

        self.assertEquals(self.todolist.todo(count + 1).source(), text)
        self.assertEquals(set(['Project1', 'Project2', 'Project3']), \
            self.todolist.projects())
        self.assertEquals(set(['Context1', 'Context2', 'Context3']), \
            self.todolist.contexts())
        self.assertEquals(self.todolist.number(todo), 6)
        self.assertTrue(self.todolist.is_dirty())

    def test_add2(self):
        text = str(self.todolist)
        self.todolist.add('')
        self.assertEquals(str(self.todolist), text)

    def test_add3a(self):
        count = self.todolist.count()
        self.todolist.add('\n(C) New task')

        self.assertEqual(self.todolist.count(), count + 1)
        self.assertEqual(
            self.todolist.todo(count + 1).source(), '(C) New task')
        self.assertEqual(self.todolist.todo(count + 1).priority(), 'C')

    def test_add3b(self):
        count = self.todolist.count()
        self.todolist.add('(C) New task\n')

        self.assertEqual(self.todolist.count(), count + 1)
        self.assertEqual(
            self.todolist.todo(count + 1).source(), '(C) New task')
        self.assertEqual(self.todolist.todo(count + 1).priority(), 'C')

    def test_add4(self):
        text = str(self.todolist)
        self.todolist.add(' ')
        self.assertEquals(str(self.todolist), text)

    def test_add5(self):
        text = str(self.todolist)
        self.todolist.add("\n")
        self.assertEquals(str(self.todolist), text)

    def test_delete1(self):
        count = self.todolist.count()
        todo = self.todolist.todo(2)
        self.todolist.delete(todo)

        self.assertEquals(self.todolist.todo(2).source(), \
            "(C) Baz @Context1 +Project1 key:value")
        self.assertEquals(self.todolist.count(), count - 1)
        self.assertTrue(self.todolist.is_dirty())
        self.assertRaises(InvalidTodoException, self.todolist.number, todo)

    def test_append1(self):
        todo = self.todolist.todo(3)
        self.todolist.append(todo, "@Context3")

        self.assertEquals(todo.source(), \
            "(C) Baz @Context1 +Project1 key:value @Context3")
        self.assertEquals(set(['Context1', 'Context2', 'Context3']), \
            self.todolist.contexts())
        self.assertTrue(self.todolist.is_dirty())

    def test_append2(self):
        todo = self.todolist.todo(3)
        text = todo.text()
        self.todolist.append(todo, "foo:bar")

        self.assertEquals(todo.text(), text)
        self.assertEquals(todo.source(), \
            "(C) Baz @Context1 +Project1 key:value foo:bar")

    def test_append3(self):
        todo = self.todolist.todo(3)
        text = todo.text()
        self.todolist.append(todo, '')

        self.assertEquals(todo.text(), text)

    def test_todo(self):
        count = self.todolist.count()

        self.assertRaises(InvalidTodoException, self.todolist.todo,
                          count + 100)
        self.assertFalse(self.todolist.is_dirty())

    def test_string(self):
        # readlines() always ends a string with \n, but join() in str(todolist)
        # doesn't necessarily.
        self.assertEquals(str(self.todolist) + '\n', self.text)

    def test_count(self):
        """ Test that empty lines are not counted. """
        self.assertEquals(self.todolist.count(), 5)

    def test_todo_by_dep_id(self):
        """ Tests that todos can be retrieved by their id tag. """
        self.todolist.add("(C) Foo id:1")

        self.assertTrue(self.todolist.todo_by_dep_id('1'))
        self.assertFalse(self.todolist.todo_by_dep_id('2'))

    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")

    def test_todo_number2(self):
        todo = Todo("Non-existent")
        self.assertRaises(InvalidTodoException, self.todolist.number, todo)

    def test_todo_complete(self):
        todo = self.todolist.todo(1)
        self.todolist.set_todo_completed(todo)
        self.assertTrue(self.todolist.todo(1).is_completed())
        self.assertTrue(self.todolist.is_dirty())

    def test_todo_priority1(self):
        todo = self.todolist.todo(1)
        self.todolist.set_priority(todo, 'F')

        self.assertEquals(self.todolist.todo(1).priority(), 'F')
        self.assertTrue(self.todolist.is_dirty())

    def test_todo_priority2(self):
        todo = self.todolist.todo(1)
        self.todolist.set_priority(todo, 'C')

        self.assertFalse(self.todolist.is_dirty())

    def test_erase(self):
        self.todolist.erase()

        self.assertEquals(self.todolist.count(), 0)
        self.assertTrue(self.todolist.is_dirty())

    def test_regex1(self):
        """ Multiple hits should result in None. """
        self.assertRaises(InvalidTodoException, self.todolist.todo, "Project1")

    def test_regex3(self):
        todo = self.todolist.todo("project2")
        self.assertTrue(todo)
        self.assertEquals(todo.source(), "(D) Bar @Context1 +Project2")

    def test_uid1(self):
        config("test/data/todolist-uid.conf")

        self.assertEquals(
            self.todolist.todo('6iu').source(),
            "(C) Foo @Context2 Not@Context +Project1 Not+Project")

    def test_uid2(self):
        """ Changing the priority should not change the identifier. """
        config("test/data/todolist-uid.conf")

        todo = self.todolist.todo('6iu')
        self.todolist.set_priority(todo, 'B')
        self.assertEquals(
            self.todolist.todo('6iu').source(),
            "(B) Foo @Context2 Not@Context +Project1 Not+Project")

    def test_uid3(self):
        """
        Must be able to handle integers when text identifiers are enabled.
        """

        config("test/data/todolist-uid.conf")
        self.assertRaises(InvalidTodoException, self.todolist.todo, 1)

    def test_new_uid(self):
        """ Make sure that item has new text ID after append. """

        config("test/data/todolist-uid.conf")
        todo = self.todolist.todo('6iu')
        self.todolist.append(todo, "A")

        self.assertNotEquals(self.todolist.number(todo), '6iu')