Mercurial > vim
comparison src/testdir/test_textprop.vim @ 15138:9df130fd5e0d v8.1.0579
patch 8.1.0579: cannot attach properties to text
commit https://github.com/vim/vim/commit/98aefe7c3250bb5d4153b994f878594d1745424e
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Dec 13 22:20:09 2018 +0100
patch 8.1.0579: cannot attach properties to text
Problem: Cannot attach properties to text.
Solution: First part of adding text properties.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 13 Dec 2018 22:30:08 +0100 |
parents | |
children | 17525ca95e1e |
comparison
equal
deleted
inserted
replaced
15137:44f47a35a3f4 | 15138:9df130fd5e0d |
---|---|
1 " Tests for defining text property types and adding text properties to the | |
2 " buffer. | |
3 | |
4 if !has('textprop') | |
5 finish | |
6 endif | |
7 | |
8 func Test_proptype_global() | |
9 call prop_type_add('comment', {'highlight': 'Directory', 'priority': 123, 'start_incl': 1, 'end_incl': 1}) | |
10 let proptypes = prop_type_list() | |
11 call assert_equal(1, len(proptypes)) | |
12 call assert_equal('comment', proptypes[0]) | |
13 | |
14 let proptype = prop_type_get('comment') | |
15 call assert_equal('Directory', proptype['highlight']) | |
16 call assert_equal(123, proptype['priority']) | |
17 call assert_equal(1, proptype['start_incl']) | |
18 call assert_equal(1, proptype['end_incl']) | |
19 | |
20 call prop_type_delete('comment') | |
21 call assert_equal(0, len(prop_type_list())) | |
22 | |
23 call prop_type_add('one', {}) | |
24 call assert_equal(1, len(prop_type_list())) | |
25 let proptype = prop_type_get('one') | |
26 call assert_false(has_key(proptype, 'highlight')) | |
27 call assert_equal(0, proptype['priority']) | |
28 call assert_equal(0, proptype['start_incl']) | |
29 call assert_equal(0, proptype['end_incl']) | |
30 | |
31 call prop_type_add('two', {}) | |
32 call assert_equal(2, len(prop_type_list())) | |
33 call prop_type_delete('one') | |
34 call assert_equal(1, len(prop_type_list())) | |
35 call prop_type_delete('two') | |
36 call assert_equal(0, len(prop_type_list())) | |
37 endfunc | |
38 | |
39 func Test_proptype_buf() | |
40 let bufnr = bufnr('') | |
41 call prop_type_add('comment', {'bufnr': bufnr, 'highlight': 'Directory', 'priority': 123, 'start_incl': 1, 'end_incl': 1}) | |
42 let proptypes = prop_type_list({'bufnr': bufnr}) | |
43 call assert_equal(1, len(proptypes)) | |
44 call assert_equal('comment', proptypes[0]) | |
45 | |
46 let proptype = prop_type_get('comment', {'bufnr': bufnr}) | |
47 call assert_equal('Directory', proptype['highlight']) | |
48 call assert_equal(123, proptype['priority']) | |
49 call assert_equal(1, proptype['start_incl']) | |
50 call assert_equal(1, proptype['end_incl']) | |
51 | |
52 call prop_type_delete('comment', {'bufnr': bufnr}) | |
53 call assert_equal(0, len(prop_type_list({'bufnr': bufnr}))) | |
54 | |
55 call prop_type_add('one', {'bufnr': bufnr}) | |
56 let proptype = prop_type_get('one', {'bufnr': bufnr}) | |
57 call assert_false(has_key(proptype, 'highlight')) | |
58 call assert_equal(0, proptype['priority']) | |
59 call assert_equal(0, proptype['start_incl']) | |
60 call assert_equal(0, proptype['end_incl']) | |
61 | |
62 call prop_type_add('two', {'bufnr': bufnr}) | |
63 call assert_equal(2, len(prop_type_list({'bufnr': bufnr}))) | |
64 call prop_type_delete('one', {'bufnr': bufnr}) | |
65 call assert_equal(1, len(prop_type_list({'bufnr': bufnr}))) | |
66 call prop_type_delete('two', {'bufnr': bufnr}) | |
67 call assert_equal(0, len(prop_type_list({'bufnr': bufnr}))) | |
68 endfunc | |
69 | |
70 func AddPropTypes() | |
71 call prop_type_add('one', {}) | |
72 call prop_type_add('two', {}) | |
73 call prop_type_add('three', {}) | |
74 call prop_type_add('whole', {}) | |
75 endfunc | |
76 | |
77 func DeletePropTypes() | |
78 call prop_type_delete('one') | |
79 call prop_type_delete('two') | |
80 call prop_type_delete('three') | |
81 call prop_type_delete('whole') | |
82 endfunc | |
83 | |
84 func SetupPropsInFirstLine() | |
85 call setline(1, 'one two three') | |
86 call prop_add(1, 1, {'length': 3, 'id': 11, 'type': 'one'}) | |
87 call prop_add(1, 5, {'length': 3, 'id': 12, 'type': 'two'}) | |
88 call prop_add(1, 8, {'length': 5, 'id': 13, 'type': 'three'}) | |
89 call prop_add(1, 1, {'length': 13, 'id': 14, 'type': 'whole'}) | |
90 endfunc | |
91 | |
92 let s:expected_props = [{'col': 1, 'length': 13, 'id': 14, 'type': 'whole', 'start': 1, 'end': 1}, | |
93 \ {'col': 1, 'length': 3, 'id': 11, 'type': 'one', 'start': 1, 'end': 1}, | |
94 \ {'col': 5, 'length': 3, 'id': 12, 'type': 'two', 'start': 1, 'end': 1}, | |
95 \ {'col': 8, 'length': 5, 'id': 13, 'type': 'three', 'start': 1, 'end': 1}, | |
96 \ ] | |
97 | |
98 func Test_prop_add() | |
99 new | |
100 call AddPropTypes() | |
101 call SetupPropsInFirstLine() | |
102 call assert_equal(s:expected_props, prop_list(1)) | |
103 call assert_fails("call prop_add(10, 1, {'length': 1, 'id': 14, 'type': 'whole'})", 'E966:') | |
104 call assert_fails("call prop_add(1, 22, {'length': 1, 'id': 14, 'type': 'whole'})", 'E964:') | |
105 | |
106 " Insert a line above, text props must still be there. | |
107 call append(0, 'empty') | |
108 call assert_equal(s:expected_props, prop_list(2)) | |
109 " Delete a line above, text props must still be there. | |
110 1del | |
111 call assert_equal(s:expected_props, prop_list(1)) | |
112 | |
113 call DeletePropTypes() | |
114 bwipe! | |
115 endfunc | |
116 | |
117 func Test_prop_remove() | |
118 new | |
119 call AddPropTypes() | |
120 call SetupPropsInFirstLine() | |
121 let props = deepcopy(s:expected_props) | |
122 call assert_equal(props, prop_list(1)) | |
123 | |
124 " remove by id | |
125 call prop_remove({'id': 12}, 1) | |
126 unlet props[2] | |
127 call assert_equal(props, prop_list(1)) | |
128 | |
129 " remove by type | |
130 call prop_remove({'type': 'one'}, 1) | |
131 unlet props[1] | |
132 call assert_equal(props, prop_list(1)) | |
133 | |
134 call DeletePropTypes() | |
135 bwipe! | |
136 endfunc | |
137 | |
138 func Test_prop_add_remove_buf() | |
139 new | |
140 let bufnr = bufnr('') | |
141 call AddPropTypes() | |
142 call setline(1, 'one two three') | |
143 wincmd w | |
144 call prop_add(1, 1, {'length': 3, 'id': 11, 'type': 'one', 'bufnr': bufnr}) | |
145 call prop_add(1, 5, {'length': 3, 'id': 12, 'type': 'two', 'bufnr': bufnr}) | |
146 call prop_add(1, 11, {'length': 3, 'id': 13, 'type': 'three', 'bufnr': bufnr}) | |
147 | |
148 let props = [ | |
149 \ {'col': 1, 'length': 3, 'id': 11, 'type': 'one', 'start': 1, 'end': 1}, | |
150 \ {'col': 5, 'length': 3, 'id': 12, 'type': 'two', 'start': 1, 'end': 1}, | |
151 \ {'col': 11, 'length': 3, 'id': 13, 'type': 'three', 'start': 1, 'end': 1}, | |
152 \] | |
153 call assert_equal(props, prop_list(1, {'bufnr': bufnr})) | |
154 | |
155 " remove by id | |
156 call prop_remove({'id': 12, 'bufnr': bufnr}, 1) | |
157 unlet props[1] | |
158 call assert_equal(props, prop_list(1, {'bufnr': bufnr})) | |
159 | |
160 " remove by type | |
161 call prop_remove({'type': 'one', 'bufnr': bufnr}, 1) | |
162 unlet props[0] | |
163 call assert_equal(props, prop_list(1, {'bufnr': bufnr})) | |
164 | |
165 call DeletePropTypes() | |
166 wincmd w | |
167 bwipe! | |
168 endfunc | |
169 | |
170 | |
171 func Test_prop_clear() | |
172 new | |
173 call AddPropTypes() | |
174 call SetupPropsInFirstLine() | |
175 call assert_equal(s:expected_props, prop_list(1)) | |
176 | |
177 call prop_clear(1) | |
178 call assert_equal([], prop_list(1)) | |
179 | |
180 call DeletePropTypes() | |
181 bwipe! | |
182 endfunc | |
183 | |
184 func Test_prop_clear_buf() | |
185 new | |
186 call AddPropTypes() | |
187 call SetupPropsInFirstLine() | |
188 let bufnr = bufnr('') | |
189 wincmd w | |
190 call assert_equal(s:expected_props, prop_list(1, {'bufnr': bufnr})) | |
191 | |
192 call prop_clear(1, 1, {'bufnr': bufnr}) | |
193 call assert_equal([], prop_list(1, {'bufnr': bufnr})) | |
194 | |
195 wincmd w | |
196 call DeletePropTypes() | |
197 bwipe! | |
198 endfunc | |
199 | |
200 " TODO: screenshot test with highlighting |