1257 lines
55 KiB
Python
1257 lines
55 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import unittest
|
|
import sys
|
|
sys.path.append(u'../ftplugin')
|
|
|
|
import vim
|
|
|
|
from orgmode.liborgmode.headings import Heading
|
|
from orgmode.vimbuffer import VimBuffer
|
|
|
|
from orgmode.py3compat.encode_compatibility import *
|
|
from orgmode.py3compat.unicode_compatibility import *
|
|
|
|
counter = 0
|
|
class VimBufferTestCase(unittest.TestCase):
|
|
def setUp(self):
|
|
global counter
|
|
counter += 1
|
|
vim.CMDHISTORY = []
|
|
vim.CMDRESULTS = {}
|
|
vim.EVALHISTORY = []
|
|
vim.EVALRESULTS = {
|
|
# no org_todo_keywords for b
|
|
u_encode(u'exists("b:org_todo_keywords")'): u_encode('0'),
|
|
# global values for org_todo_keywords
|
|
u_encode(u'exists("g:org_todo_keywords")'): u_encode('1'),
|
|
u_encode(u'g:org_todo_keywords'): [u_encode(u'TODO'),
|
|
u_encode(u'DONE'), u_encode(u'|')],
|
|
u_encode(u'exists("g:org_debug")'): u_encode(u'0'),
|
|
u_encode(u'exists("g:org_debug")'): u_encode(u'0'),
|
|
u_encode(u'exists("*repeat#set()")'): u_encode(u'0'),
|
|
u_encode(u'b:changedtick'): u_encode(u'%d' % counter),
|
|
u_encode(u'&ts'): u_encode(u'8'),
|
|
u_encode(u'exists("g:org_tag_column")'): u_encode(u'0'),
|
|
u_encode(u'exists("b:org_tag_column")'): u_encode(u'0'),
|
|
u_encode(u"v:count"): u_encode(u'0')}
|
|
vim.current.buffer[:] = [u_encode(i) for i in u"""#Meta information
|
|
#more meta information
|
|
* Überschrift 1
|
|
Text 1
|
|
|
|
Bla bla
|
|
** Überschrift 1.1
|
|
Text 2
|
|
|
|
Bla Bla bla
|
|
** Überschrift 1.2
|
|
Text 3
|
|
|
|
**** Überschrift 1.2.1.falsch
|
|
|
|
Bla Bla bla bla
|
|
*** Überschrift 1.2.1
|
|
* Überschrift 2
|
|
* Überschrift 3
|
|
asdf sdf
|
|
""".split(u'\n') ]
|
|
self.document = VimBuffer().init_dom()
|
|
|
|
def test_write_heading_tags(self):
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
h = self.document.find_heading()
|
|
self.assertEqual(h._orig_start, 2)
|
|
self.assertEqual(h.title, u'Überschrift 1')
|
|
h.tags = [u'test', u'tag']
|
|
self.assertEqual(h.tags[0], u'test')
|
|
self.document.write_heading(h)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
h2 = self.document.find_heading()
|
|
self.assertEqual(d.headings[0].title, u'Überschrift 1')
|
|
self.assertEqual(len(d.headings[0].tags), 2)
|
|
self.assertEqual(d.headings[0].tags[0], u'test')
|
|
self.assertEqual(d.headings[0]._orig_start, 2)
|
|
self.assertEqual(d.headings[0].children[0]._orig_start, 6)
|
|
|
|
def test_write_multi_heading_bodies(self):
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
h = self.document.headings[0].copy()
|
|
self.assertEqual(h._orig_start, 2)
|
|
self.assertEqual(h.title, u'Überschrift 1')
|
|
h.body.append(u'test')
|
|
h.children[0].body.append(u'another line')
|
|
self.document.write_heading(h)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
h2 = self.document.find_heading()
|
|
self.assertEqual(len(d.headings[0].body), 4)
|
|
self.assertEqual(d.headings[0]._orig_start, 2)
|
|
self.assertEqual(d.headings[0].children[0]._orig_start, 7)
|
|
self.assertEqual(d.headings[0].children[0].title, u'Überschrift 1.1')
|
|
self.assertEqual(len(d.headings[0].children[0].body), 4)
|
|
self.assertEqual(d.headings[0].children[1]._orig_start, 12)
|
|
self.assertEqual(d.headings[0].children[1].title, u'Überschrift 1.2')
|
|
self.assertEqual(len(d.headings[0].children[1].body), 2)
|
|
|
|
def test_meta_information_assign_directly(self):
|
|
# read meta information from document
|
|
self.assertEqual(u'\n'.join(self.document.meta_information), u'#Meta information\n#more meta information')
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].start, 2)
|
|
|
|
# assign meta information directly to an element in array
|
|
self.document.meta_information[0] = u'#More or less meta information'
|
|
self.assertEqual(u'\n'.join(self.document.meta_information), u'#More or less meta information\n#more meta information')
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.is_dirty_meta_information, True)
|
|
self.assertEqual(self.document.headings[0].start, 2)
|
|
|
|
def test_meta_information_assign_string(self):
|
|
# assign a single line string
|
|
self.document.meta_information = u'#Less meta information'
|
|
self.assertEqual('\n'.join(self.document.meta_information), u'#Less meta information')
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.is_dirty_meta_information, True)
|
|
self.assertEqual(self.document.headings[0].start, 1)
|
|
|
|
def test_meta_information_assign_multi_line_string(self):
|
|
# assign a multi line string
|
|
self.document.meta_information = u'#Less meta information\n#lesser information'
|
|
self.assertEqual(u'\n'.join(self.document.meta_information), u'#Less meta information\n#lesser information')
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.is_dirty_meta_information, True)
|
|
self.assertEqual(self.document.headings[0].start, 2)
|
|
|
|
def test_meta_information_assign_one_element_array(self):
|
|
# assign a single element array of strings
|
|
self.document.meta_information = u'#More or less meta information'.split(u'\n')
|
|
self.assertEqual(u'\n'.join(self.document.meta_information), u'#More or less meta information')
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.is_dirty_meta_information, True)
|
|
self.assertEqual(self.document.headings[0].start, 1)
|
|
|
|
def test_meta_information_assign_multi_element_array(self):
|
|
# assign a multi element array of strings
|
|
self.document.meta_information = u'#More or less meta information\n#lesser information'.split(u'\n')
|
|
self.assertEqual(u'\n'.join(self.document.meta_information), u'#More or less meta information\n#lesser information')
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.is_dirty_meta_information, True)
|
|
self.assertEqual(self.document.headings[0].start, 2)
|
|
|
|
def test_meta_information_read_no_meta_information(self):
|
|
vim.current.buffer[:] = [ u_encode(i) for i in u"""* Überschrift 1
|
|
Text 1
|
|
|
|
Bla bla
|
|
** Überschrift 1.1
|
|
Text 2
|
|
|
|
Bla Bla bla
|
|
** Überschrift 1.2
|
|
Text 3
|
|
|
|
**** Überschrift 1.2.1.falsch
|
|
|
|
Bla Bla bla bla
|
|
*** Überschrift 1.2.1
|
|
* Überschrift 2
|
|
* Überschrift 3
|
|
asdf sdf
|
|
""".split(u'\n') ]
|
|
self.document = VimBuffer().init_dom()
|
|
|
|
# read no meta information from document
|
|
self.assertEqual(self.document.meta_information, [])
|
|
self.assertEqual(self.document.headings[0].start, 0)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
|
|
# assign meta information to a former empty field
|
|
self.document.meta_information = u'#More or less meta information\n#lesser information'.split('\n')
|
|
self.assertEqual(u'\n'.join(self.document.meta_information), u'#More or less meta information\n#lesser information')
|
|
self.assertEqual(self.document.headings[0].start, 2)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
|
|
def test_meta_information_assign_empty_array(self):
|
|
# assign an empty array as meta information
|
|
self.document.meta_information = []
|
|
self.assertEqual(self.document.meta_information, [])
|
|
self.assertEqual(self.document.headings[0].start, 0)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
|
|
def test_meta_information_assign_empty_string(self):
|
|
# assign an empty string as meta information
|
|
self.document.meta_information = u''
|
|
self.assertEqual(self.document.meta_information, [u''])
|
|
self.assertEqual(self.document.headings[0].start, 1)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
|
|
def test_bufnr(self):
|
|
self.assertEqual(self.document.bufnr, vim.current.buffer.number)
|
|
# TODO add more tests as soon as multi buffer support has been implemented
|
|
|
|
def test_write_meta_information(self):
|
|
# write nothing
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.write(), False)
|
|
self.assertEqual(u'\n'.join(self.document.meta_information), u'#Meta information\n#more meta information')
|
|
|
|
# write changed meta information
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.document.meta_information = u'#More or less meta information\n#lesser information'.split('\n')
|
|
self.assertEqual(u'\n'.join(self.document.meta_information), u'#More or less meta information\n#lesser information')
|
|
self.assertEqual(self.document.headings[0].start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(u'\n'.join(VimBuffer().init_dom().meta_information), u'#More or less meta information\n#lesser information')
|
|
|
|
# shorten meta information
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.document.meta_information = u'!More or less meta information'.split(u'\n')
|
|
self.assertEqual(u'\n'.join(self.document.meta_information), u'!More or less meta information')
|
|
self.assertEqual(self.document.headings[0].start, 1)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].start, 1)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 1)
|
|
self.assertEqual(u'\n'.join(VimBuffer().init_dom().meta_information), u'!More or less meta information')
|
|
|
|
# lengthen meta information
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.document.meta_information = u'!More or less meta information\ntest\ntest'
|
|
self.assertEqual(u'\n'.join(self.document.meta_information), u'!More or less meta information\ntest\ntest')
|
|
self.assertEqual(self.document.headings[0].start, 3)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 1)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].start, 3)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 3)
|
|
self.assertEqual(u'\n'.join(VimBuffer().init_dom().meta_information), u'!More or less meta information\ntest\ntest')
|
|
|
|
# write empty meta information
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.document.meta_information = []
|
|
self.assertEqual(self.document.meta_information, [])
|
|
self.assertEqual(self.document.headings[0].start, 0)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 3)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].start, 0)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 0)
|
|
self.assertEqual(VimBuffer().init_dom().meta_information, [])
|
|
|
|
def test_write_changed_title(self):
|
|
# write a changed title
|
|
self.document.headings[0].title = u'Heading 1'
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.is_dirty_meta_information, False)
|
|
self.assertEqual(self.document.headings[0].is_dirty_body, False)
|
|
self.assertEqual(self.document.headings[0].is_dirty_heading, True)
|
|
self.assertEqual(self.document.headings[0].title, u'Heading 1')
|
|
self.assertEqual(self.document.headings[0].end, 5)
|
|
self.assertEqual(len(self.document.headings[0]), 4)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 4)
|
|
self.assertEqual(self.document.headings[0].children[0].start, 6)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_start, 6)
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].end, 5)
|
|
self.assertEqual(len(self.document.headings[0]), 4)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 4)
|
|
self.assertEqual(self.document.headings[0].children[0].start, 6)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_start, 6)
|
|
self.assertEqual(VimBuffer().init_dom().headings[0].title, u'Heading 1')
|
|
|
|
def test_write_changed_body(self):
|
|
# write a changed body
|
|
self.assertEqual(self.document.headings[0].end, 5)
|
|
self.document.headings[0].body[0] = u'Another text'
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.is_dirty_meta_information, False)
|
|
self.assertEqual(self.document.headings[0].is_dirty_body, True)
|
|
self.assertEqual(self.document.headings[0].is_dirty_heading, False)
|
|
self.assertEqual(self.document.headings[0].end, 5)
|
|
self.assertEqual(len(self.document.headings[0]), 4)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 4)
|
|
self.assertEqual(self.document.headings[0].children[0].start, 6)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_start, 6)
|
|
self.assertEqual(self.document.headings[0].body, [u'Another text', u'', u'Bla bla'])
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].end, 5)
|
|
self.assertEqual(len(self.document.headings[0]), 4)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 4)
|
|
self.assertEqual(self.document.headings[0].children[0].start, 6)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_start, 6)
|
|
self.assertEqual(VimBuffer().init_dom().headings[0].body, [u'Another text', u'', u'Bla bla'])
|
|
|
|
def test_write_shortened_body(self):
|
|
# write a shortened body
|
|
self.document.headings[0].body = u'Another text'
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.is_dirty_meta_information, False)
|
|
self.assertEqual(self.document.headings[0].is_dirty_body, True)
|
|
self.assertEqual(self.document.headings[0].is_dirty_heading, False)
|
|
self.assertEqual(self.document.headings[0].end, 3)
|
|
self.assertEqual(len(self.document.headings[0]), 2)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 4)
|
|
self.assertEqual(self.document.headings[0].children[0].start, 4)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_start, 6)
|
|
self.assertEqual(self.document.headings[0].body, [u'Another text'])
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].end, 3)
|
|
self.assertEqual(len(self.document.headings[0]), 2)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 2)
|
|
self.assertEqual(self.document.headings[0].children[0].start, 4)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_start, 4)
|
|
self.assertEqual(VimBuffer().init_dom().headings[0].body, [u'Another text'])
|
|
|
|
def test_write_lengthened_body(self):
|
|
# write a lengthened body
|
|
self.document.headings[0].body = [u'Another text', u'more', u'and more', u'and more']
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.is_dirty_meta_information, False)
|
|
self.assertEqual(self.document.headings[0].is_dirty_body, True)
|
|
self.assertEqual(self.document.headings[0].is_dirty_heading, False)
|
|
self.assertEqual(self.document.headings[0].end, 6)
|
|
self.assertEqual(len(self.document.headings[0]), 5)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 4)
|
|
self.assertEqual(self.document.headings[0].children[0].start, 7)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_start, 6)
|
|
self.assertEqual(self.document.headings[0].body, [u'Another text', u'more', u'and more', u'and more'])
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].end, 6)
|
|
self.assertEqual(len(self.document.headings[0]), 5)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 5)
|
|
self.assertEqual(self.document.headings[0].children[0].start, 7)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_start, 7)
|
|
self.assertEqual(VimBuffer().init_dom().headings[0].body, [u'Another text', u'more', u'and more', u'and more'])
|
|
|
|
def test_write_delete_heading(self):
|
|
# delete a heading
|
|
self.assertEqual(len(self.document.headings[0].children), 2)
|
|
del self.document.headings[0].children[0]
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(len(self.document.headings[0].children), 1)
|
|
self.assertEqual(self.document.headings[0].end, 5)
|
|
self.assertEqual(len(self.document.headings[0]), 4)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 4)
|
|
self.assertEqual(self.document.headings[0].children[0].start, 6)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_start, 10)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_len, 3)
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].end, 5)
|
|
self.assertEqual(len(self.document.headings[0]), 4)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 4)
|
|
self.assertEqual(self.document.headings[0].children[0].start, 6)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_start, 6)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_len, 3)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(len(self.document.headings[0].children), 1)
|
|
self.assertEqual(self.document.headings[0].end, 5)
|
|
self.assertEqual(d.headings[0].end, 5)
|
|
self.assertEqual(len(d.headings[0]), 4)
|
|
self.assertEqual(d.headings[0]._orig_start, 2)
|
|
self.assertEqual(d.headings[0]._orig_len, 4)
|
|
self.assertEqual(d.headings[0].children[0].start, 6)
|
|
self.assertEqual(d.headings[0].children[0]._orig_start, 6)
|
|
self.assertEqual(d.headings[0].children[0]._orig_len, 3)
|
|
|
|
def test_write_delete_first_heading(self):
|
|
# delete the first heading
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
del self.document.headings[0]
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(len(self.document.headings), 2)
|
|
self.assertEqual(self.document.headings[0].end, 2)
|
|
self.assertEqual(len(self.document.headings[0]), 1)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 17)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 1)
|
|
self.assertEqual(self.document.headings[1].start, 3)
|
|
self.assertEqual(self.document.headings[1]._orig_start, 18)
|
|
self.assertEqual(self.document.headings[1]._orig_len, 3)
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].end, 2)
|
|
self.assertEqual(len(self.document.headings[0]), 1)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 1)
|
|
self.assertEqual(self.document.headings[1].start, 3)
|
|
self.assertEqual(self.document.headings[1]._orig_start, 3)
|
|
self.assertEqual(self.document.headings[1]._orig_len, 3)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(len(self.document.headings), 2)
|
|
self.assertEqual(d.headings[0].end, 2)
|
|
self.assertEqual(len(d.headings[0]), 1)
|
|
self.assertEqual(d.headings[0]._orig_start, 2)
|
|
self.assertEqual(d.headings[0]._orig_len, 1)
|
|
self.assertEqual(d.headings[1].start, 3)
|
|
self.assertEqual(d.headings[1]._orig_start, 3)
|
|
self.assertEqual(d.headings[1]._orig_len, 3)
|
|
|
|
def test_write_delete_last_heading(self):
|
|
# delete the last heading
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
del self.document.headings[-1]
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(len(self.document.headings), 2)
|
|
self.assertEqual(self.document.headings[0].end, 5)
|
|
self.assertEqual(self.document.headings[0].end_of_last_child, 16)
|
|
self.assertEqual(len(self.document.headings[0]), 4)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 4)
|
|
self.assertEqual(self.document.headings[-1].start, 17)
|
|
self.assertEqual(self.document.headings[-1]._orig_start, 17)
|
|
self.assertEqual(self.document.headings[-1]._orig_len, 1)
|
|
self.assertEqual(self.document.headings[-1].end, 17)
|
|
self.assertEqual(self.document.headings[-1].end_of_last_child, 17)
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].end, 5)
|
|
self.assertEqual(self.document.headings[0].end_of_last_child, 16)
|
|
self.assertEqual(len(self.document.headings[0]), 4)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_len, 4)
|
|
self.assertEqual(self.document.headings[-1].start, 17)
|
|
self.assertEqual(self.document.headings[-1]._orig_start, 17)
|
|
self.assertEqual(self.document.headings[-1]._orig_len, 1)
|
|
self.assertEqual(self.document.headings[-1].end, 17)
|
|
self.assertEqual(self.document.headings[-1].end_of_last_child, 17)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(len(self.document.headings), 2)
|
|
self.assertEqual(d.headings[0].end, 5)
|
|
self.assertEqual(d.headings[0].end_of_last_child, 16)
|
|
self.assertEqual(len(d.headings[0]), 4)
|
|
self.assertEqual(d.headings[0]._orig_start, 2)
|
|
self.assertEqual(d.headings[0]._orig_len, 4)
|
|
self.assertEqual(d.headings[-1].start, 17)
|
|
self.assertEqual(d.headings[-1]._orig_start, 17)
|
|
self.assertEqual(d.headings[-1]._orig_len, 1)
|
|
self.assertEqual(d.headings[-1].end, 17)
|
|
self.assertEqual(d.headings[-1].end_of_last_child, 17)
|
|
|
|
def test_write_delete_multiple_headings(self):
|
|
# delete multiple headings
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
del self.document.headings[1]
|
|
del self.document.headings[0].children[1].children[0]
|
|
del self.document.headings[0].children[0]
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(len(self.document.headings), 2)
|
|
self.assertEqual(len(self.document.headings[0].children), 1)
|
|
self.assertEqual(len(self.document.headings[0].children[0].children), 1)
|
|
self.assertEqual(self.document.headings[0].end, 5)
|
|
self.assertEqual(self.document.headings[0].end_of_last_child, 9)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_start, 10)
|
|
self.assertEqual(self.document.headings[0].children[0].children[0]._orig_start, 16)
|
|
self.assertEqual(self.document.headings[-1]._orig_start, 18)
|
|
self.assertEqual(self.document.headings[0].start, 2)
|
|
self.assertEqual(self.document.headings[0].children[0].start, 6)
|
|
self.assertEqual(self.document.headings[0].children[0].children[0].start, 9)
|
|
self.assertEqual(self.document.headings[-1].start, 10)
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].end, 5)
|
|
self.assertEqual(self.document.headings[0].end_of_last_child, 9)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(self.document.headings[0].children[0]._orig_start, 6)
|
|
self.assertEqual(self.document.headings[0].children[0].children[0]._orig_start, 9)
|
|
self.assertEqual(self.document.headings[-1]._orig_start, 10)
|
|
self.assertEqual(self.document.headings[0].start, 2)
|
|
self.assertEqual(self.document.headings[0].children[0].start, 6)
|
|
self.assertEqual(self.document.headings[0].children[0].children[0].start, 9)
|
|
self.assertEqual(self.document.headings[-1].start, 10)
|
|
self.assertEqual(self.document.headings[0].title, u'Überschrift 1')
|
|
self.assertEqual(self.document.headings[0].children[0].title, u'Überschrift 1.2')
|
|
self.assertEqual(self.document.headings[0].children[0].children[0].title, u'Überschrift 1.2.1')
|
|
self.assertEqual(self.document.headings[-1].title, u'Überschrift 3')
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(len(self.document.headings), 2)
|
|
self.assertEqual(len(self.document.headings[0].children), 1)
|
|
self.assertEqual(len(self.document.headings[0].children[0].children), 1)
|
|
self.assertEqual(d.headings[0].end, 5)
|
|
self.assertEqual(d.headings[0].end_of_last_child, 9)
|
|
self.assertEqual(d.headings[0]._orig_start, 2)
|
|
self.assertEqual(d.headings[0].children[0]._orig_start, 6)
|
|
self.assertEqual(d.headings[0].children[0].children[0]._orig_start, 9)
|
|
self.assertEqual(d.headings[-1]._orig_start, 10)
|
|
self.assertEqual(d.headings[0].start, 2)
|
|
self.assertEqual(d.headings[0].children[0].start, 6)
|
|
self.assertEqual(d.headings[0].children[0].children[0].start, 9)
|
|
self.assertEqual(d.headings[-1].start, 10)
|
|
self.assertEqual(d.headings[0].title, u'Überschrift 1')
|
|
self.assertEqual(d.headings[0].children[0].title, u'Überschrift 1.2')
|
|
self.assertEqual(d.headings[0].children[0].children[0].title, u'Überschrift 1.2.1')
|
|
self.assertEqual(d.headings[-1].title, u'Überschrift 3')
|
|
|
|
|
|
def test_write_add_heading(self):
|
|
# add a heading
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
self.assertEqual(len(self.document.headings[0].children), 2)
|
|
h = Heading()
|
|
h.title = u'Test heading'
|
|
h.level = 2
|
|
h.body = u'Text, text\nmore text'
|
|
self.document.headings[0].children.append(h)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(len(self.document.headings[0].children), 3)
|
|
self.assertEqual(self.document.headings[0].children[-1].title, u'Test heading')
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(len(self.document.headings[0].children), 3)
|
|
self.assertEqual(self.document.headings[0].children[-1].title, u'Test heading')
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(len(d.headings[0].children), 3)
|
|
self.assertEqual(d.headings[0].children[-1].title, u'Test heading')
|
|
|
|
def test_write_add_heading_before_first_heading(self):
|
|
# add a heading before the first heading
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
h = Heading()
|
|
h.title = u'Test heading'
|
|
h.level = 2
|
|
h.body = u'Text, text\nmore text'
|
|
self.assertEqual(h.start, None)
|
|
self.document.headings[0:0] = h
|
|
self.assertEqual(h.start, 2)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(len(self.document.headings), 4)
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].title, u'Test heading')
|
|
self.assertEqual(self.document.headings[0].start, 2)
|
|
self.assertEqual(self.document.headings[0]._orig_start, 2)
|
|
self.assertEqual(len(self.document.headings[0]), 3)
|
|
self.assertEqual(self.document.headings[1].title, u'Überschrift 1')
|
|
self.assertEqual(self.document.headings[1].start, 5)
|
|
self.assertEqual(len(self.document.headings[1]), 4)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(len(d.headings), 4)
|
|
self.assertEqual(d.headings[0].title, u'Test heading')
|
|
self.assertEqual(d.headings[0].start, 2)
|
|
self.assertEqual(d.headings[0]._orig_start, 2)
|
|
self.assertEqual(len(d.headings[0]), 3)
|
|
self.assertEqual(d.headings[1].title, u'Überschrift 1')
|
|
self.assertEqual(d.headings[1].start, 5)
|
|
self.assertEqual(len(d.headings[1]), 4)
|
|
|
|
def test_write_add_heading_after_last_heading_toplevel(self):
|
|
# add a heading after the last heading (top level heading)
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
h = Heading()
|
|
h.title = u'Test heading'
|
|
h.body = u'Text, text\nmore text'
|
|
self.assertEqual(h.start, None)
|
|
#self.document.headings += h
|
|
self.document.headings.append(h)
|
|
self.assertEqual(h.start, 21)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(len(self.document.headings), 4)
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[-1].title, u'Test heading')
|
|
self.assertEqual(self.document.headings[-1].start, 21)
|
|
self.assertEqual(self.document.headings[-1]._orig_start, 21)
|
|
self.assertEqual(len(self.document.headings[-1]), 3)
|
|
self.assertEqual(self.document.headings[-2].title, u'Überschrift 3')
|
|
self.assertEqual(self.document.headings[-2].start, 18)
|
|
self.assertEqual(len(self.document.headings[-2]), 3)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(len(d.headings), 4)
|
|
self.assertEqual(d.headings[-1].title, u'Test heading')
|
|
self.assertEqual(d.headings[-1].start, 21)
|
|
self.assertEqual(d.headings[-1]._orig_start, 21)
|
|
self.assertEqual(len(d.headings[-1]), 3)
|
|
self.assertEqual(d.headings[-2].title, u'Überschrift 3')
|
|
self.assertEqual(d.headings[-2].start, 18)
|
|
self.assertEqual(len(d.headings[-2]), 3)
|
|
|
|
def test_write_add_heading_after_last_heading_subheading(self):
|
|
# add a heading after the last heading (subheading)
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
h = Heading()
|
|
h.title = u'Test heading'
|
|
h.level = 2
|
|
h.body = u'Text, text\nmore text'
|
|
self.assertEqual(h.start, None)
|
|
# TODO make it work with += operator so far it works with append and
|
|
# extend so it seems that there is a problem in __iadd__ method in
|
|
# UserList from collection in python3
|
|
#self.document.headings[-1].children += h
|
|
#self.document.headings[-1].children.extend([h])
|
|
self.document.headings[-1].children.append(h)
|
|
self.assertEqual(h.start, 21)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
self.assertEqual(len(self.document.headings[-1]), 3)
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[-1].children[-1].title, u'Test heading')
|
|
self.assertEqual(self.document.headings[-1].children[-1].start, 21)
|
|
self.assertEqual(self.document.headings[-1].children[-1]._orig_start, 21)
|
|
self.assertEqual(len(self.document.headings[-1].children[-1]), 3)
|
|
self.assertEqual(self.document.headings[-1].title, u'Überschrift 3')
|
|
self.assertEqual(self.document.headings[-1].start, 18)
|
|
self.assertEqual(len(self.document.headings[-1]), 3)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(len(d.headings), 3)
|
|
self.assertEqual(len(d.headings[-1]), 3)
|
|
self.assertEqual(d.headings[-1].children[-1].title, u'Test heading')
|
|
self.assertEqual(d.headings[-1].children[-1].start, 21)
|
|
self.assertEqual(d.headings[-1].children[-1]._orig_start, 21)
|
|
self.assertEqual(len(d.headings[-1].children[-1]), 3)
|
|
self.assertEqual(d.headings[-1].title, u'Überschrift 3')
|
|
self.assertEqual(d.headings[-1].start, 18)
|
|
self.assertEqual(len(d.headings[-1]), 3)
|
|
|
|
def test_write_replace_one_heading(self):
|
|
# replace subheadings by a list of newly created headings (one item)
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
h = Heading()
|
|
h.title = u'Test heading'
|
|
h.level = 3
|
|
h.body = u'Text, text\nmore text\nanother text'
|
|
self.assertEqual(h.start, None)
|
|
self.document.headings[0].children[1].children[0] = h
|
|
self.assertEqual(h.start, 13)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children), 2)
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].children[1].children[0].title, u'Test heading')
|
|
self.assertEqual(self.document.headings[0].children[1].children[0].start, 13)
|
|
self.assertEqual(self.document.headings[0].children[1].children[0]._orig_start, 13)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children[0]), 4)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children[0].children), 0)
|
|
self.assertEqual(len(self.document.headings[0].children[1]), 3)
|
|
self.assertEqual(len(self.document.headings[0].children[0].children), 0)
|
|
self.assertEqual(len(self.document.headings[1].children), 0)
|
|
self.assertEqual(self.document.headings[0].children[1].children[-1].title, u'Überschrift 1.2.1')
|
|
self.assertEqual(self.document.headings[0].children[1].children[-1].start, 17)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(len(d.headings), 3)
|
|
self.assertEqual(len(d.headings[0].children[1].children), 2)
|
|
self.assertEqual(d.headings[0].children[1].children[0].title, u'Test heading')
|
|
self.assertEqual(d.headings[0].children[1].children[0].start, 13)
|
|
self.assertEqual(d.headings[0].children[1].children[0]._orig_start, 13)
|
|
self.assertEqual(len(d.headings[0].children[1].children[0]), 4)
|
|
self.assertEqual(len(d.headings[0].children[1].children[0].children), 0)
|
|
self.assertEqual(len(d.headings[0].children[1]), 3)
|
|
self.assertEqual(len(d.headings[0].children[0].children), 0)
|
|
self.assertEqual(len(d.headings[1].children), 0)
|
|
self.assertEqual(d.headings[0].children[1].children[-1].title, u'Überschrift 1.2.1')
|
|
self.assertEqual(d.headings[0].children[1].children[-1].start, 17)
|
|
|
|
def test_write_replace_multiple_headings_with_one_heading(self):
|
|
# replace subheadings by a list of newly created headings (one item)
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
h = Heading()
|
|
h.title = u'Test heading'
|
|
h.level = 3
|
|
h.body = u'Text, text\nmore text\nanother text'
|
|
|
|
self.assertEqual(h.start, None)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children), 2)
|
|
self.document.headings[0].children[1].children[:] = h
|
|
self.assertEqual(h.start, 13)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.headings[0].children[1].is_dirty, False)
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children), 1)
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].children[1].title, u'Überschrift 1.2')
|
|
self.assertEqual(self.document.headings[0].children[1].children[0].title, u'Test heading')
|
|
self.assertEqual(self.document.headings[0].children[1].children[0].start, 13)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(len(d.headings[0].children[1].children), 1)
|
|
self.assertEqual(d.headings[0].children[1].title, u'Überschrift 1.2')
|
|
self.assertEqual(d.headings[0].children[1].children[0].title, u'Test heading')
|
|
self.assertEqual(d.headings[0].children[1].children[0].start, 13)
|
|
|
|
def test_write_replace_multiple_headings_with_a_multiple_heading_structure(self):
|
|
# replace subheadings by a list of newly created headings (multiple items)
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
h = Heading()
|
|
h.title = u'Test heading'
|
|
h.level = 3
|
|
h.body = u'Text, text\nmore text\nanother text'
|
|
h1 = Heading()
|
|
h1.title = u'another heading'
|
|
h1.level = 4
|
|
h1.body = u'This\nIs\nJust more\ntext'
|
|
h.children.append(h1)
|
|
h2 = Heading()
|
|
h2.title = u'yet another heading'
|
|
h2.level = 3
|
|
h2.body = u'This\nis less text'
|
|
|
|
self.assertEqual(h.start, None)
|
|
self.document.headings[0].children[1].children[:] = (h, h2)
|
|
self.assertEqual(h.start, 13)
|
|
self.assertEqual(h1.start, 17)
|
|
self.assertEqual(h2.start, 22)
|
|
self.assertEqual(self.document.is_dirty, True)
|
|
self.assertEqual(self.document.headings[0].children[1].is_dirty, False)
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children), 2)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children[0].children), 1)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children[1].children), 0)
|
|
|
|
self.assertEqual(self.document.write(), True)
|
|
self.assertEqual(self.document.is_dirty, False)
|
|
self.assertEqual(self.document.headings[0].children[1].title, u'Überschrift 1.2')
|
|
self.assertEqual(self.document.headings[0].children[1].children[0].title, u'Test heading')
|
|
self.assertEqual(self.document.headings[0].children[1].children[0].children[0].title, u'another heading')
|
|
self.assertEqual(self.document.headings[0].children[1].children[1].title, u'yet another heading')
|
|
self.assertEqual(self.document.headings[0].children[1].children[0].start, 13)
|
|
self.assertEqual(self.document.headings[0].children[1].children[0].children[0].start, 17)
|
|
self.assertEqual(self.document.headings[0].children[1].children[1].start, 22)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(d.headings[0].children[1].title, u'Überschrift 1.2')
|
|
self.assertEqual(d.headings[0].children[1].children[0].title, u'Test heading')
|
|
self.assertEqual(d.headings[0].children[1].children[0].children[0].title, u'another heading')
|
|
self.assertEqual(d.headings[0].children[1].children[1].title, u'yet another heading')
|
|
self.assertEqual(d.headings[0].children[1].children[0].start, 13)
|
|
self.assertEqual(d.headings[0].children[1].children[0].children[0].start, 17)
|
|
self.assertEqual(d.headings[0].children[1].children[1].start, 22)
|
|
|
|
def test_dom(self):
|
|
self.assertEqual(len(self.document.headings), 3)
|
|
for h in self.document.headings:
|
|
self.assertEqual(h.level, 1)
|
|
self.assertEqual(len(self.document.headings[0].children), 2)
|
|
self.assertEqual(len(self.document.headings[0].children[0].children), 0)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children), 2)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children[0].children), 0)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children[1].children), 0)
|
|
self.assertEqual(len(self.document.headings[1].children), 0)
|
|
self.assertEqual(len(self.document.headings[2].children), 0)
|
|
|
|
# test no heading
|
|
vim.current.window.cursor = (1, 0)
|
|
h = self.document.current_heading()
|
|
self.assertEqual(h, None)
|
|
|
|
def test_index_boundaries(self):
|
|
# test index boundaries
|
|
vim.current.window.cursor = (-1, 0)
|
|
h = self.document.current_heading()
|
|
self.assertEqual(h, None)
|
|
|
|
vim.current.window.cursor = (21, 0)
|
|
h = self.document.current_heading()
|
|
self.assertNotEqual(h, None)
|
|
self.assertEqual(h.level, 1)
|
|
self.assertEqual(h.start, 18)
|
|
self.assertNotEqual(h.previous_sibling, None)
|
|
self.assertEqual(h.previous_sibling.level, 1)
|
|
self.assertEqual(h.parent, None)
|
|
self.assertEqual(h.next_sibling, None)
|
|
self.assertEqual(len(h.children), 0)
|
|
|
|
vim.current.window.cursor = (999, 0)
|
|
h = self.document.current_heading()
|
|
self.assertEqual(h, None)
|
|
|
|
def test_heading_start_and_end(self):
|
|
# test heading start and end
|
|
vim.current.window.cursor = (3, 0)
|
|
h = self.document.current_heading()
|
|
self.assertNotEqual(h, None)
|
|
self.assertEqual(h.start, 2)
|
|
self.assertEqual(h.end, 5)
|
|
self.assertEqual(h.end_of_last_child, 16)
|
|
|
|
vim.current.window.cursor = (12, 0)
|
|
h = self.document.current_heading()
|
|
self.assertNotEqual(h, None)
|
|
self.assertEqual(h.start, 10)
|
|
self.assertEqual(h.end, 12)
|
|
self.assertEqual(h.end_of_last_child, 16)
|
|
|
|
vim.current.window.cursor = (19, 0)
|
|
h = self.document.current_heading()
|
|
self.assertNotEqual(h, None)
|
|
self.assertEqual(h.start, 18)
|
|
self.assertEqual(h.end, 20)
|
|
self.assertEqual(h.end_of_last_child, 20)
|
|
|
|
vim.current.buffer[:] = [ u_encode(i) for i in u"""
|
|
** Überschrift 1.2
|
|
Text 3
|
|
|
|
**** Überschrift 1.2.1.falsch
|
|
|
|
Bla Bla bla bla
|
|
*** Überschrift 1.2.1
|
|
* Überschrift 2
|
|
* Überschrift 3
|
|
asdf sdf
|
|
""".split(u'\n') ]
|
|
self.document = VimBuffer().init_dom()
|
|
vim.current.window.cursor = (3, 0)
|
|
h = self.document.current_heading()
|
|
self.assertNotEqual(h, None)
|
|
self.assertEqual(h.parent, None)
|
|
self.assertEqual(h.level, 2)
|
|
self.assertEqual(h.title, u'Überschrift 1.2')
|
|
self.assertEqual(len(h.children), 2)
|
|
self.assertEqual(h.children[1].start, 7)
|
|
self.assertEqual(h.children[1].children, [])
|
|
self.assertEqual(h.children[1].next_sibling, None)
|
|
self.assertEqual(h.children[1].end, 7)
|
|
self.assertEqual(h.start, 1)
|
|
self.assertEqual(h.end, 3)
|
|
self.assertEqual(h.end_of_last_child, 7)
|
|
|
|
vim.current.buffer[:] = [ u_encode(i) for i in u"""
|
|
* Überschrift 2
|
|
* Überschrift 3""".split(u'\n') ]
|
|
self.document = VimBuffer().init_dom()
|
|
vim.current.window.cursor = (3, 0)
|
|
h = self.document.current_heading()
|
|
self.assertNotEqual(h, None)
|
|
self.assertEqual(h.end, 2)
|
|
self.assertEqual(h.end_of_last_child, 2)
|
|
self.assertEqual(h.title, u'Überschrift 3')
|
|
|
|
def test_first_heading(self):
|
|
# test first heading
|
|
vim.current.window.cursor = (3, 0)
|
|
h = self.document.current_heading()
|
|
|
|
self.assertNotEqual(h, None)
|
|
self.assertEqual(h.parent, None)
|
|
self.assertEqual(h.level, 1)
|
|
self.assertEqual(len(h.children), 2)
|
|
self.assertEqual(h.previous_sibling, None)
|
|
|
|
self.assertEqual(h.children[0].level, 2)
|
|
self.assertEqual(h.children[0].children, [])
|
|
self.assertEqual(h.children[1].level, 2)
|
|
self.assertEqual(len(h.children[1].children), 2)
|
|
self.assertEqual(h.children[1].children[0].level, 4)
|
|
self.assertEqual(h.children[1].children[1].level, 3)
|
|
|
|
self.assertEqual(h.next_sibling.level, 1)
|
|
|
|
self.assertEqual(h.next_sibling.next_sibling.level, 1)
|
|
|
|
self.assertEqual(h.next_sibling.next_sibling.next_sibling, None)
|
|
self.assertEqual(h.next_sibling.next_sibling.parent, None)
|
|
|
|
def test_heading_in_the_middle(self):
|
|
# test heading in the middle of the file
|
|
vim.current.window.cursor = (14, 0)
|
|
h = self.document.current_heading()
|
|
|
|
self.assertNotEqual(h, None)
|
|
self.assertEqual(h.level, 4)
|
|
self.assertEqual(h.parent.level, 2)
|
|
self.assertNotEqual(h.next_sibling, None)
|
|
self.assertNotEqual(h.next_sibling.previous_sibling, None)
|
|
self.assertEqual(h.next_sibling.level, 3)
|
|
self.assertEqual(h.previous_sibling, None)
|
|
|
|
def test_previous_headings(self):
|
|
# test previous headings
|
|
vim.current.window.cursor = (17, 0)
|
|
h = self.document.current_heading()
|
|
|
|
self.assertNotEqual(h, None)
|
|
self.assertEqual(h.level, 3)
|
|
self.assertNotEqual(h.previous_sibling, None)
|
|
self.assertEqual(h.parent.level, 2)
|
|
self.assertNotEqual(h.parent.previous_sibling, None)
|
|
self.assertNotEqual(h.previous_sibling.parent, None)
|
|
self.assertEqual(h.previous_sibling.parent.start, 10)
|
|
|
|
vim.current.window.cursor = (14, 0)
|
|
h = self.document.current_heading()
|
|
self.assertNotEqual(h.parent, None)
|
|
self.assertEqual(h.parent.start, 10)
|
|
|
|
vim.current.window.cursor = (21, 0)
|
|
h = self.document.current_heading()
|
|
self.assertNotEqual(h, None)
|
|
self.assertEqual(h.level, 1)
|
|
self.assertNotEqual(h.previous_sibling, None)
|
|
self.assertEqual(h.previous_sibling.level, 1)
|
|
self.assertNotEqual(h.previous_sibling.previous_sibling, None)
|
|
self.assertEqual(h.previous_sibling.previous_sibling.level, 1)
|
|
self.assertEqual(h.previous_sibling.previous_sibling.previous_sibling,
|
|
None)
|
|
|
|
vim.current.window.cursor = (77, 0)
|
|
h = self.document.current_heading()
|
|
self.assertEqual(h, None)
|
|
|
|
class VimBufferTagsTestCase(unittest.TestCase):
|
|
def setUp(self):
|
|
global counter
|
|
counter += 1
|
|
vim.CMDHISTORY = []
|
|
vim.CMDRESULTS = {}
|
|
vim.EVALHISTORY = []
|
|
vim.EVALRESULTS = {
|
|
# no org_todo_keywords for b
|
|
u_encode(u'exists("b:org_todo_keywords")'): u_encode('0'),
|
|
# global values for org_todo_keywords
|
|
u_encode(u'exists("g:org_todo_keywords")'): u_encode('1'),
|
|
u_encode(u'g:org_todo_keywords'): [u_encode(u'TODO'),
|
|
u_encode(u'DONE'), u_encode(u'|')],
|
|
u_encode(u'exists("g:org_debug")'): u_encode(u'0'),
|
|
u_encode(u'exists("g:org_debug")'): u_encode(u'0'),
|
|
u_encode(u'exists("*repeat#set()")'): u_encode(u'0'),
|
|
u_encode(u'b:changedtick'): u_encode(u'0'),
|
|
u_encode(u'&ts'): u_encode(u'8'),
|
|
u_encode(u'exists("g:org_tag_column")'): u_encode(u'0'),
|
|
u_encode(u'exists("b:org_tag_column")'): u_encode(u'0'),
|
|
u_encode(u"v:count"): u_encode(u'0')}
|
|
vim.current.buffer[:] = [ u_encode(i) for i in u"""#Meta information
|
|
#more meta information
|
|
* Überschrift 1 :testtag:
|
|
Text 1
|
|
|
|
Bla bla
|
|
** Überschrift 1.1 :multi:tags:
|
|
Text 2
|
|
|
|
Bla Bla bla
|
|
** Überschrift 1.2:notag:
|
|
Text 3
|
|
|
|
**** Überschrift 1.2.1.falsch :no tag:
|
|
|
|
Bla Bla bla bla
|
|
*** Überschrift 1.2.1 :no tag
|
|
*** Überschrift 1.2.2 no tag:
|
|
* Überschrift 2 :more:tags:
|
|
* Überschrift 3 :lesser:tag:
|
|
asdf sdf
|
|
* Überschrift 4 super long long long long long long long long extremely long title :title:long:
|
|
* TODO Überschrift 5 super long long long long long long long long extremely long title :title_with_todo:
|
|
* oneword :with:tags:
|
|
* :noword:with:tags:
|
|
* TODO :todo:with:tags:
|
|
""".split(u'\n') ]
|
|
self.document = VimBuffer().init_dom()
|
|
|
|
def test_tag_read_no_word_with_tags(self):
|
|
self.assertEqual(len(self.document.headings[6].tags), 3)
|
|
self.assertEqual(self.document.headings[6].tags[0], u'noword')
|
|
self.assertEqual(self.document.headings[6].title, u'')
|
|
self.assertEqual(self.document.headings[6].todo, None)
|
|
|
|
def test_tag_read_one_word_with_tags(self):
|
|
self.assertEqual(len(self.document.headings[5].tags), 2)
|
|
self.assertEqual(self.document.headings[5].tags[0], u'with')
|
|
self.assertEqual(self.document.headings[5].title, u'oneword')
|
|
self.assertEqual(self.document.headings[5].todo, None)
|
|
|
|
def test_tag_read_TODO_with_tags(self):
|
|
self.assertEqual(len(self.document.headings[7].tags), 3)
|
|
self.assertEqual(self.document.headings[7].tags[0], u'todo')
|
|
self.assertEqual(self.document.headings[7].title, u'')
|
|
self.assertEqual(self.document.headings[7].todo, u'TODO')
|
|
|
|
def test_tag_read_one(self):
|
|
self.assertEqual(len(self.document.headings[0].tags), 1)
|
|
self.assertEqual(self.document.headings[0].tags[0], u'testtag')
|
|
self.assertEqual(unicode(self.document.headings[0]), u'* Überschrift 1 :testtag:')
|
|
|
|
def test_tag_read_multiple(self):
|
|
self.assertEqual(len(self.document.headings[0].children[0].tags), 2)
|
|
self.assertEqual(self.document.headings[0].children[0].tags, [u'multi', 'tags'])
|
|
self.assertEqual(unicode(self.document.headings[0].children[0]), u'** Überschrift 1.1 :multi:tags:')
|
|
|
|
def test_tag_no_tags(self):
|
|
self.assertEqual(len(self.document.headings[0].children[1].children), 3)
|
|
self.assertEqual(len(self.document.headings[0].children[1].tags), 0)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children[0].tags), 0)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children[1].tags), 0)
|
|
self.assertEqual(len(self.document.headings[0].children[1].children[2].tags), 0)
|
|
|
|
def test_tag_read_space_and_tab_separated(self):
|
|
self.assertEqual(len(self.document.headings[1].children), 0)
|
|
self.assertEqual(len(self.document.headings[1].tags), 2)
|
|
self.assertEqual(self.document.headings[1].tags, [u'more', u'tags'])
|
|
|
|
def test_tag_read_tab_separated(self):
|
|
self.assertEqual(len(self.document.headings[2].children), 0)
|
|
self.assertEqual(len(self.document.headings[2].tags), 2)
|
|
self.assertEqual(self.document.headings[2].tags, [u'lesser', u'tag'])
|
|
|
|
def test_tag_read_long_title(self):
|
|
self.assertEqual(len(self.document.headings[3].children), 0)
|
|
self.assertEqual(len(self.document.headings[3].tags), 2)
|
|
self.assertEqual(self.document.headings[3].tags, [u'title', u'long'])
|
|
self.assertEqual(unicode(self.document.headings[3]), u'* Überschrift 4 super long long long long long long long long extremely long title :title:long:')
|
|
|
|
def test_tag_read_long_title_plus_todo_state(self):
|
|
self.assertEqual(len(self.document.headings[4].children), 0)
|
|
self.assertEqual(len(self.document.headings[4].tags), 1)
|
|
self.assertEqual(self.document.headings[4].level, 1)
|
|
self.assertEqual(self.document.headings[4].todo, u'TODO')
|
|
self.assertEqual(self.document.headings[4].title, u'Überschrift 5 super long long long long long long long long extremely long title')
|
|
self.assertEqual(self.document.headings[4].tags, [u'title_with_todo'])
|
|
self.assertEqual(unicode(self.document.headings[4]), u'* TODO Überschrift 5 super long long long long long long long long extremely long title :title_with_todo:')
|
|
|
|
def test_tag_del_tags(self):
|
|
self.assertEqual(len(self.document.headings[0].tags), 1)
|
|
del self.document.headings[0].tags
|
|
self.assertEqual(len(self.document.headings[0].tags), 0)
|
|
self.assertEqual(self.document.headings[0].is_dirty_heading, True)
|
|
self.assertEqual(self.document.headings[0].is_dirty_body, False)
|
|
self.assertEqual(unicode(self.document.headings[0]), u'* Überschrift 1')
|
|
self.assertEqual(self.document.write(), True)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(len(d.headings[0].tags), 0)
|
|
self.assertEqual(d.headings[0].title, u'Überschrift 1')
|
|
self.assertEqual(unicode(d.headings[0]), u'* Überschrift 1')
|
|
|
|
def test_tag_replace_one_tag(self):
|
|
self.assertEqual(len(self.document.headings[0].tags), 1)
|
|
self.document.headings[0].tags = [u'justonetag']
|
|
self.assertEqual(len(self.document.headings[0].tags), 1)
|
|
self.assertEqual(self.document.headings[0].is_dirty_heading, True)
|
|
self.assertEqual(self.document.headings[0].is_dirty_body, False)
|
|
self.assertEqual(unicode(self.document.headings[0]), u'* Überschrift 1 :justonetag:')
|
|
self.assertEqual(self.document.write(), True)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(len(d.headings[0].tags), 1)
|
|
self.assertEqual(d.headings[0].tags, [u'justonetag'])
|
|
self.assertEqual(d.headings[0].title, u'Überschrift 1')
|
|
self.assertEqual(unicode(d.headings[0]), u'* Überschrift 1 :justonetag:')
|
|
|
|
def test_tag_replace_multiple_tags(self):
|
|
self.assertEqual(len(self.document.headings[1].tags), 2)
|
|
self.document.headings[1].tags = [u'justonetag', u'moretags', u'lesstags']
|
|
self.assertEqual(len(self.document.headings[1].tags), 3)
|
|
self.assertEqual(self.document.headings[1].is_dirty_heading, True)
|
|
self.assertEqual(self.document.headings[1].is_dirty_body, False)
|
|
self.assertEqual(unicode(self.document.headings[1]), u'* Überschrift 2 :justonetag:moretags:lesstags:')
|
|
self.assertEqual(self.document.write(), True)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(len(d.headings[1].tags), 3)
|
|
self.assertEqual(d.headings[1].tags, [u'justonetag', u'moretags', u'lesstags'])
|
|
self.assertEqual(d.headings[1].title, u'Überschrift 2')
|
|
self.assertEqual(unicode(d.headings[1]), u'* Überschrift 2 :justonetag:moretags:lesstags:')
|
|
|
|
class VimBufferTodoTestCase(unittest.TestCase):
|
|
def setUp(self):
|
|
global counter
|
|
counter += 1
|
|
vim.CMDHISTORY = []
|
|
vim.CMDRESULTS = {}
|
|
vim.EVALHISTORY = []
|
|
vim.EVALRESULTS = {
|
|
# no org_todo_keywords for b
|
|
u_encode(u'exists("b:org_todo_keywords")'): u_encode('0'),
|
|
# global values for org_todo_keywords
|
|
u_encode(u'exists("g:org_todo_keywords")'): u_encode('1'),
|
|
u_encode(u'g:org_todo_keywords'): [u_encode(u'TODO'), \
|
|
u_encode(u'DONß'), u_encode(u'DONÉ'), \
|
|
u_encode(u'DÖNE'), u_encode(u'WAITING'), \
|
|
u_encode(u'DONE'), u_encode(u'|')],
|
|
u_encode(u'exists("g:org_debug")'): u_encode(u'0'),
|
|
u_encode(u'exists("g:org_debug")'): u_encode(u'0'),
|
|
u_encode(u'exists("*repeat#set()")'): u_encode(u'0'),
|
|
u_encode(u'b:changedtick'): u_encode(u'0'),
|
|
u_encode(u'&ts'): u_encode(u'8'),
|
|
u_encode(u'exists("g:org_tag_column")'): u_encode(u'0'),
|
|
u_encode(u'exists("b:org_tag_column")'): u_encode(u'0'),
|
|
u_encode(u"v:count"): u_encode(u'0')}
|
|
vim.current.buffer[:] = [ u_encode(i) for i in u"""#Meta information
|
|
#more meta information
|
|
* TODO Überschrift 1 :testtag:
|
|
Text 1
|
|
|
|
Bla bla
|
|
** TODO NOTODO Überschrift 1.1 :multi:tags:
|
|
Text 2
|
|
|
|
Bla Bla bla
|
|
** NO-TODO Überschrift 1.2:notag:
|
|
Text 3
|
|
|
|
**** NOTODOÜberschrift 1.2.1.falsch :no tag:
|
|
|
|
Bla Bla bla bla
|
|
*** notodo Überschrift 1.2.1 :no tag
|
|
*** NOTODo Überschrift 1.2.2 no tag:
|
|
* WAITING Überschrift 2 :more:tags:
|
|
* DONE Überschrift 3 :lesser:tag:
|
|
asdf sdf
|
|
* DÖNE Überschrift 4
|
|
* DONß Überschrift 5
|
|
* DONÉ Überschrift 6
|
|
* DONé Überschrift 7
|
|
""".split(u'\n') ]
|
|
self.document = VimBuffer().init_dom()
|
|
|
|
def test_no_space_after_upper_case_single_word_heading(self):
|
|
vim.current.buffer[:] = [ u_encode(i) for i in u"""
|
|
* TEST
|
|
** Text 1
|
|
*** Text 2
|
|
* Text 1
|
|
** Text 1
|
|
some text that is
|
|
no heading
|
|
|
|
""".split(u'\n') ]
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(unicode(d.headings[0]), u'* TEST')
|
|
|
|
def test_todo_read_TODO(self):
|
|
self.assertEqual(self.document.headings[0].todo, u'TODO')
|
|
self.assertEqual(self.document.headings[0].title, u'Überschrift 1')
|
|
self.assertEqual(unicode(self.document.headings[0]), u'* TODO Überschrift 1 :testtag:')
|
|
|
|
def test_todo_read_TODO_NOTODO(self):
|
|
self.assertEqual(self.document.headings[0].children[0].todo, u'TODO')
|
|
self.assertEqual(self.document.headings[0].children[0].title, u'NOTODO Überschrift 1.1')
|
|
self.assertEqual(unicode(self.document.headings[0].children[0]), u'** TODO NOTODO Überschrift 1.1 :multi:tags:')
|
|
|
|
def test_todo_read_WAITING(self):
|
|
self.assertEqual(self.document.headings[1].todo, u'WAITING')
|
|
self.assertEqual(self.document.headings[1].title, u'Überschrift 2')
|
|
self.assertEqual(unicode(self.document.headings[1]), u'* WAITING Überschrift 2 :more:tags:')
|
|
|
|
def test_todo_read_DONE(self):
|
|
self.assertEqual(self.document.headings[2].todo, u'DONE')
|
|
self.assertEqual(self.document.headings[2].title, u'Überschrift 3')
|
|
self.assertEqual(unicode(self.document.headings[2]), u'* DONE Überschrift 3 :lesser:tag:')
|
|
|
|
def test_todo_read_special(self):
|
|
self.assertEqual(self.document.headings[3].todo, u'DÖNE')
|
|
self.assertEqual(self.document.headings[3].title, u'Überschrift 4')
|
|
|
|
self.assertEqual(self.document.headings[4].todo, u'DONß')
|
|
self.assertEqual(self.document.headings[4].title, u'Überschrift 5')
|
|
|
|
self.assertEqual(self.document.headings[5].todo, u'DONÉ')
|
|
self.assertEqual(self.document.headings[5].title, u'Überschrift 6')
|
|
|
|
self.assertEqual(self.document.headings[6].todo, None)
|
|
self.assertEqual(self.document.headings[6].title, u'DONé Überschrift 7')
|
|
|
|
def test_todo_del_todo(self):
|
|
self.assertEqual(self.document.headings[0].todo, u'TODO')
|
|
del self.document.headings[0].todo
|
|
self.assertEqual(self.document.headings[0].is_dirty_body, False)
|
|
self.assertEqual(self.document.headings[0].is_dirty_heading, True)
|
|
self.assertEqual(self.document.headings[0].todo, None)
|
|
self.assertEqual(self.document.headings[0].title, u'Überschrift 1')
|
|
self.assertEqual(unicode(self.document.headings[0]), u'* Überschrift 1 :testtag:')
|
|
self.assertEqual(self.document.write(), True)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(d.headings[0].todo, None)
|
|
self.assertEqual(d.headings[0].title, u'Überschrift 1')
|
|
self.assertEqual(unicode(d.headings[0]), u'* Überschrift 1 :testtag:')
|
|
|
|
def test_todo_write_todo_uppercase(self):
|
|
self.assertEqual(self.document.headings[0].todo, u'TODO')
|
|
self.document.headings[0].todo = u'DONE'
|
|
self.assertEqual(self.document.headings[0].is_dirty_body, False)
|
|
self.assertEqual(self.document.headings[0].is_dirty_heading, True)
|
|
self.assertEqual(self.document.headings[0].todo, u'DONE')
|
|
self.assertEqual(self.document.headings[0].title, u'Überschrift 1')
|
|
self.assertEqual(unicode(self.document.headings[0]), u'* DONE Überschrift 1 :testtag:')
|
|
self.assertEqual(self.document.write(), True)
|
|
|
|
# sanity check
|
|
d = VimBuffer().init_dom()
|
|
self.assertEqual(d.headings[0].todo, u'DONE')
|
|
self.assertEqual(d.headings[0].title, u'Überschrift 1')
|
|
self.assertEqual(unicode(d.headings[0]), u'* DONE Überschrift 1 :testtag:')
|
|
|
|
def test_todo_set_illegal_todo(self):
|
|
def set_todo(todo):
|
|
self.document.headings[0].todo = todo
|
|
self.assertEqual(self.document.headings[0].todo, u'TODO')
|
|
self.assertRaises(ValueError, set_todo, u'DO NE')
|
|
self.assertRaises(ValueError, set_todo, u'DO\tNE')
|
|
self.assertRaises(ValueError, set_todo, u'D\nNE')
|
|
self.assertRaises(ValueError, set_todo, u'DO\rNE')
|
|
self.assertEqual(self.document.headings[0].todo, u'TODO')
|
|
|
|
def suite():
|
|
return ( \
|
|
unittest.TestLoader().loadTestsFromTestCase(VimBufferTestCase), \
|
|
unittest.TestLoader().loadTestsFromTestCase(VimBufferTagsTestCase), \
|
|
unittest.TestLoader().loadTestsFromTestCase(VimBufferTodoTestCase), \
|
|
)
|