1" Tests for defining text property types and adding text properties to the 2" buffer. 3 4if !has('textprop') 5 finish 6endif 7 8func 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())) 37endfunc 38 39func 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}))) 68endfunc 69 70func 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', {}) 75endfunc 76 77func 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') 82endfunc 83 84func 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'}) 90endfunc 91 92let 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 98func 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! 115endfunc 116 117func 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! 136endfunc 137 138func 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! 168endfunc 169 170 171func 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! 182endfunc 183 184func 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! 198endfunc 199 200" TODO: screenshot test with highlighting 201