1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-24 02:50:03 +08:00
SpaceVim/bundle/vim-bookmarks/t/bm_spec.vim
2021-08-04 17:05:38 +08:00

207 lines
6.4 KiB
VimL

describe 'empty model'
it 'should have no bookmarks'
Expect bm#has_bookmarks_in_file('foo') to_be_false
Expect bm#next('foo', 1) ==# 0
Expect bm#prev('foo', 1) ==# 0
end
it 'should add bookmark'
Expect bm#has_bookmarks_in_file('foo') to_be_false
Expect bm#has_bookmark_at_line('foo', 3) to_be_false
call bm#add_bookmark('foo', 1, 3, 'bar')
Expect bm#has_bookmarks_in_file('foo') to_be_true
Expect bm#has_bookmark_at_line('foo', 3) to_be_true
end
it 'should add bookmark with annotation'
call bm#add_bookmark('foo', 1, 3, 'bar', 'a remark')
Expect bm#get_bookmark_by_sign('foo', 1) ==# {'line_nr': 3, 'sign_idx': 1, 'content': 'bar', 'annotation': 'a remark'}
end
it 'should deserialize bookmarks'
let data = []
call add(data, "let l:bm_file_version = 1")
call add(data, "let l:bm_sessions = {'default': {'file1': [{'sign_idx': 99, 'line_nr': 1, 'content': 'foo ''test''', 'annotation': 'a note'},],'file2': [{'sign_idx': 50, 'line_nr': 12, 'content': 'bar'},{'sign_idx': 51, 'line_nr': 15, 'content': '''test'''},],}}")
call add(data, "let l:bm_current_session = 'default'")
let result = bm#deserialize(data)
Expect bm#has_bookmarks_in_file('file1') to_be_true
Expect bm#has_bookmark_at_line('file1', 1) to_be_true
Expect bm#location_list() ==# ["file1:1:Annotation: a note", "file2:12:bar", "file2:15:'test'"]
Expect len(result) ==# 3
Expect result ==# [{"file": "file1", "line_nr": 1, "sign_idx": 99, "content": "foo 'test'", "annotation": "a note"},
\{"file": "file2", "line_nr": 12, "sign_idx": 50, "content": "bar", "annotation": ""},
\{"file": "file2", "line_nr": 15, "sign_idx": 51, "content": "'test'", "annotation": ""}]
end
after
call bm#del_all()
end
end
describe 'model with bookmark'
before
call bm#add_bookmark('foo', 1, 3, 'bar', 'note')
end
it 'should get bookmark by line'
let bookmark = bm#get_bookmark_by_line('foo', 3)
Expect bookmark['line_nr'] ==# 3
Expect bookmark['sign_idx'] ==# 1
Expect bookmark['content'] ==# 'bar'
Expect bookmark['annotation'] ==# 'note'
end
it 'should get bookmark by sign'
let bookmark = bm#get_bookmark_by_sign('foo', 1)
Expect bookmark['line_nr'] ==# 3
Expect bookmark['sign_idx'] ==# 1
Expect bookmark['content'] ==# 'bar'
end
it 'should update bookmark'
call bm#update_bookmark_for_sign('foo', 1, 5, 'baz')
let bookmark = bm#get_bookmark_by_line('foo', 5)
Expect bookmark['line_nr'] ==# 5
Expect bookmark['sign_idx'] ==# 1
Expect bookmark['content'] ==# 'baz'
Expect bookmark['annotation'] ==# 'note'
Expect bookmark ==# bm#get_bookmark_by_sign('foo', 1)
end
it 'should update annotation'
call bm#update_annotation('foo', 1, 'awesome annotation')
let bookmark = bm#get_bookmark_by_line('foo', 3)
Expect bookmark['annotation'] ==# 'awesome annotation'
end
it 'should delete bookmark at line'
call bm#del_bookmark_at_line('foo', 3)
Expect bm#has_bookmark_at_line('foo', 3) to_be_false
end
after
call bm#del_all()
end
end
describe 'model with multiple bookmarks in different files'
before
call bm#add_bookmark('file3', 1, 10, 'file3/line10')
call bm#add_bookmark('file1', 1, 12, 'file1/line12')
call bm#add_bookmark('file2', 2, 34, 'file2/line34', 'an annotation')
call bm#add_bookmark('file1', 3, 2, 'file1/line2')
call bm#add_bookmark('file1', 4, 45, '''test''')
call bm#add_bookmark('file2', 5, 45, '')
end
it 'should return all bookmarks of file per line'
let dict1 = bm#all_bookmarks_by_line('file1')
let dict2 = bm#all_bookmarks_by_line('file2')
Expect len(keys(dict1)) ==# 3
Expect len(keys(dict2)) ==# 2
Expect dict1[12]['sign_idx'] ==# 1
Expect dict2[34]['sign_idx'] ==# 2
Expect dict1[2]['sign_idx'] ==# 3
Expect dict1[45]['sign_idx'] ==# 4
Expect dict2[45]['sign_idx'] ==# 5
end
it 'should return total count of bookmarks'
Expect bm#total_count() ==# 6
end
it 'should return all lines'
let lines = bm#all_lines('file1')
Expect lines ==# ['2', '12', '45']
end
it 'should return all files with bookmarks'
let files = bm#all_files()
Expect files ==# ['file1', 'file2', 'file3']
end
it 'should return next bookmark'
Expect bm#next('file1', 1) ==# 2
Expect bm#next('file1', 3) ==# 12
Expect bm#next('file1', 11) ==# 12
Expect bm#next('file1', 12) ==# 45
Expect bm#next('file1', 13) ==# 45
Expect bm#next('file1', 59) ==# 2
end
it 'should return previous bookmark'
Expect bm#prev('file1', 1) ==# 45
Expect bm#prev('file1', 3) ==# 2
Expect bm#prev('file1', 11) ==# 2
Expect bm#prev('file1', 12) ==# 2
Expect bm#prev('file1', 13) ==# 12
Expect bm#prev('file1', 59) ==# 45
end
it 'should return location list'
let locations = bm#location_list()
Expect len(locations) ==# 6
Expect locations[0] ==# 'file1:2:file1/line2'
Expect locations[1] ==# 'file1:12:file1/line12'
Expect locations[2] ==# 'file1:45:''test'''
Expect locations[3] ==# 'file2:34:Annotation: an annotation'
Expect locations[4] ==# 'file2:45:empty line'
Expect locations[5] ==# 'file3:10:file3/line10'
end
it 'should serialize'
exec join(bm#serialize(), " | ")
let s = l:bm_sessions["default"]
Expect l:bm_file_version ==# 1
Expect len(keys(l:bm_sessions)) ==# 1
Expect len(s) ==# 3
Expect len(s["file1"]) ==# 3
Expect len(s["file2"]) ==# 2
Expect len(s["file3"]) ==# 1
Expect s["file1"] ==# [{"line_nr": 2, "sign_idx": 3, "content": "file1/line2"}, {"line_nr": 12, "sign_idx": 1, "content": "file1/line12"}, {"line_nr": 45, "sign_idx": 4, "content": "'test'"}]
Expect s["file2"] ==# [{"line_nr": 34, "sign_idx": 2, "content": "file2/line34", "annotation": "an annotation"}, {"line_nr": 45, "sign_idx": 5, "content": ""}]
Expect s["file3"] ==# [{"line_nr": 10, "sign_idx": 1, "content": "file3/line10"}]
Expect l:bm_current_session ==# 'default'
end
after
call bm#del_all()
end
end
describe 'bm#del_all'
it 'should reset the model'
call bm#add_bookmark('file1', 1, 1, 'line1')
call bm#add_bookmark('file2', 2, 1, 'line1')
call bm#del_all()
Expect empty(g:line_map) to_be_true
Expect empty(g:sign_map) to_be_true
Expect bm#has_bookmarks_in_file('file1') to_be_false
Expect bm#has_bookmarks_in_file('file2') to_be_false
end
end