comparison src/testdir/test_signs.vim @ 15247:336728a577f5 v8.1.0632

patch 8.1.0632: using sign group names is inefficient commit https://github.com/vim/vim/commit/7a2d9892b7158edf8dc48e9bcaaae70a40787b37 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Dec 24 20:23:49 2018 +0100 patch 8.1.0632: using sign group names is inefficient Problem: Using sign group names is inefficient. Solution: Store group names in a hash table and use a reference to them. Also remove unnecessary use of ":exe" from the tests. (Yegappan Lakshmanan, closes #3715)
author Bram Moolenaar <Bram@vim.org>
date Mon, 24 Dec 2018 20:30:04 +0100
parents 3a99b2e6d136
children a6319aca721b
comparison
equal deleted inserted replaced
15246:a6fc4675cf61 15247:336728a577f5
57 set norightleft 57 set norightleft
58 endif 58 endif
59 redraw 59 redraw
60 60
61 " Check that we can't change sign. 61 " Check that we can't change sign.
62 call assert_fails("exe 'sign place 40 name=Sign1 buffer=' . bufnr('%')", 'E885:') 62 call assert_fails("sign place 40 name=Sign1 buffer=" . bufnr('%'), 'E885:')
63 63
64 " Check placed signs 64 " Check placed signs
65 let a=execute('sign place') 65 let a=execute('sign place')
66 call assert_equal("\n--- Signs ---\nSigns for [NULL]:\n line=3 id=41 name=Sign1 priority=10\n", a) 66 call assert_equal("\n--- Signs ---\nSigns for [NULL]:\n line=3 id=41 name=Sign1 priority=10\n", a)
67 67
68 " Unplace the sign and try jumping to it again should fail. 68 " Unplace the sign and try jumping to it again should fail.
69 sign unplace 41 69 sign unplace 41
70 1 70 1
71 call assert_fails("exe 'sign jump 41 buffer=' . bufnr('%')", 'E157:') 71 call assert_fails("sign jump 41 buffer=" . bufnr('%'), 'E157:')
72 call assert_equal('a', getline('.')) 72 call assert_equal('a', getline('.'))
73 73
74 " Unplace sign on current line. 74 " Unplace sign on current line.
75 exe 'sign place 42 line=4 name=Sign2 buffer=' . bufnr('%') 75 exe 'sign place 42 line=4 name=Sign2 buffer=' . bufnr('%')
76 4 76 4
130 sign undefine Sign4 130 sign undefine Sign4
131 sign define Sign4 text=\\ linehl=Comment 131 sign define Sign4 text=\\ linehl=Comment
132 sign undefine Sign4 132 sign undefine Sign4
133 133
134 " Error cases 134 " Error cases
135 call assert_fails("exe 'sign place abc line=3 name=Sign1 buffer=' . bufnr('%')", 'E474:') 135 call assert_fails("sign place abc line=3 name=Sign1 buffer=" .
136 call assert_fails("exe 'sign unplace abc name=Sign1 buffer=' . bufnr('%')", 'E474:') 136 \ bufnr('%'), 'E474:')
137 call assert_fails("exe 'sign place 1abc line=3 name=Sign1 buffer=' . bufnr('%')", 'E474:') 137 call assert_fails("sign unplace abc name=Sign1 buffer=" .
138 call assert_fails("exe 'sign unplace 2abc name=Sign1 buffer=' . bufnr('%')", 'E474:') 138 \ bufnr('%'), 'E474:')
139 call assert_fails("sign place 1abc line=3 name=Sign1 buffer=" .
140 \ bufnr('%'), 'E474:')
141 call assert_fails("sign unplace 2abc name=Sign1 buffer=" .
142 \ bufnr('%'), 'E474:')
139 call assert_fails("sign unplace 2 *", 'E474:') 143 call assert_fails("sign unplace 2 *", 'E474:')
140 call assert_fails("exe 'sign place 1 line=3 name=Sign1 buffer=' . bufnr('%') a", 'E488:') 144 call assert_fails("sign place 1 line=3 name=Sign1 buffer=" .
141 call assert_fails("exe 'sign place name=Sign1 buffer=' . bufnr('%')", 'E474:') 145 \ bufnr('%') . " a", 'E488:')
142 call assert_fails("exe 'sign place line=10 buffer=' . bufnr('%')", 'E474:') 146 call assert_fails("sign place name=Sign1 buffer=" . bufnr('%'), 'E474:')
143 call assert_fails("exe 'sign unplace 2 line=10 buffer=' . bufnr('%')", 'E474:') 147 call assert_fails("sign place line=10 buffer=" . bufnr('%'), 'E474:')
144 call assert_fails("exe 'sign unplace 2 name=Sign1 buffer=' . bufnr('%')", 'E474:') 148 call assert_fails("sign unplace 2 line=10 buffer=" . bufnr('%'), 'E474:')
145 call assert_fails("exe 'sign place 2 line=3 buffer=' . bufnr('%')", 'E474:') 149 call assert_fails("sign unplace 2 name=Sign1 buffer=" . bufnr('%'), 'E474:')
150 call assert_fails("sign place 2 line=3 buffer=" . bufnr('%'), 'E474:')
146 call assert_fails("sign place 2", 'E474:') 151 call assert_fails("sign place 2", 'E474:')
147 call assert_fails("sign place abc", 'E474:') 152 call assert_fails("sign place abc", 'E474:')
148 call assert_fails("sign place 5 line=3", 'E474:') 153 call assert_fails("sign place 5 line=3", 'E474:')
149 call assert_fails("sign place 5 name=Sign1", 'E474:') 154 call assert_fails("sign place 5 name=Sign1", 'E474:')
150 call assert_fails("sign place 5 group=g1", 'E474:') 155 call assert_fails("sign place 5 group=g1", 'E474:')
155 160
156 " After undefining the sign, we should no longer be able to place it. 161 " After undefining the sign, we should no longer be able to place it.
157 sign undefine Sign1 162 sign undefine Sign1
158 sign undefine Sign2 163 sign undefine Sign2
159 sign undefine Sign3 164 sign undefine Sign3
160 call assert_fails("exe 'sign place 41 line=3 name=Sign1 buffer=' . bufnr('%')", 'E155:') 165 call assert_fails("sign place 41 line=3 name=Sign1 buffer=" .
166 \ bufnr('%'), 'E155:')
161 endfunc 167 endfunc
162 168
163 " Undefining placed sign is not recommended. 169 " Undefining placed sign is not recommended.
164 " Quoting :help sign 170 " Quoting :help sign
165 " 171 "
234 call assert_fails('sign undefine', 'E156:') 240 call assert_fails('sign undefine', 'E156:')
235 call assert_fails('sign list xxx', 'E155:') 241 call assert_fails('sign list xxx', 'E155:')
236 call assert_fails('sign place 1 buffer=999', 'E158:') 242 call assert_fails('sign place 1 buffer=999', 'E158:')
237 call assert_fails('sign define Sign2 text=', 'E239:') 243 call assert_fails('sign define Sign2 text=', 'E239:')
238 " Non-numeric identifier for :sign place 244 " Non-numeric identifier for :sign place
239 call assert_fails("exe 'sign place abc line=3 name=Sign1 buffer=' . bufnr('%')", 'E474:') 245 call assert_fails("sign place abc line=3 name=Sign1 buffer=" . bufnr('%'), 'E474:')
240 " Non-numeric identifier for :sign unplace 246 " Non-numeric identifier for :sign unplace
241 call assert_fails("exe 'sign unplace abc name=Sign1 buffer=' . bufnr('%')", 'E474:') 247 call assert_fails("sign unplace abc name=Sign1 buffer=" . bufnr('%'), 'E474:')
242 " Number followed by an alphabet as sign identifier for :sign place 248 " Number followed by an alphabet as sign identifier for :sign place
243 call assert_fails("exe 'sign place 1abc line=3 name=Sign1 buffer=' . bufnr('%')", 'E474:') 249 call assert_fails("sign place 1abc line=3 name=Sign1 buffer=" . bufnr('%'), 'E474:')
244 " Number followed by an alphabet as sign identifier for :sign unplace 250 " Number followed by an alphabet as sign identifier for :sign unplace
245 call assert_fails("exe 'sign unplace 2abc name=Sign1 buffer=' . bufnr('%')", 'E474:') 251 call assert_fails("sign unplace 2abc name=Sign1 buffer=" . bufnr('%'), 'E474:')
246 " Sign identifier and '*' for :sign unplace 252 " Sign identifier and '*' for :sign unplace
247 call assert_fails("sign unplace 2 *", 'E474:') 253 call assert_fails("sign unplace 2 *", 'E474:')
248 " Trailing characters after buffer number for :sign place 254 " Trailing characters after buffer number for :sign place
249 call assert_fails("exe 'sign place 1 line=3 name=Sign1 buffer=' . bufnr('%') . 'xxx'", 'E488:') 255 call assert_fails("sign place 1 line=3 name=Sign1 buffer=" . bufnr('%') . 'xxx', 'E488:')
250 " Trailing characters after buffer number for :sign unplace 256 " Trailing characters after buffer number for :sign unplace
251 call assert_fails("exe 'sign unplace 1 buffer=' . bufnr('%') . 'xxx'", 'E488:') 257 call assert_fails("sign unplace 1 buffer=" . bufnr('%') . 'xxx', 'E488:')
252 call assert_fails("exe 'sign unplace * buffer=' . bufnr('%') . 'xxx'", 'E488:') 258 call assert_fails("sign unplace * buffer=" . bufnr('%') . 'xxx', 'E488:')
253 call assert_fails("sign unplace 1 xxx", 'E474:') 259 call assert_fails("sign unplace 1 xxx", 'E474:')
254 call assert_fails("sign unplace * xxx", 'E474:') 260 call assert_fails("sign unplace * xxx", 'E474:')
255 call assert_fails("sign unplace xxx", 'E474:') 261 call assert_fails("sign unplace xxx", 'E474:')
256 " Placing a sign without line number 262 " Placing a sign without line number
257 call assert_fails("exe 'sign place name=Sign1 buffer=' . bufnr('%')", 'E474:') 263 call assert_fails("sign place name=Sign1 buffer=" . bufnr('%'), 'E474:')
258 " Placing a sign without sign name 264 " Placing a sign without sign name
259 call assert_fails("exe 'sign place line=10 buffer=' . bufnr('%')", 'E474:') 265 call assert_fails("sign place line=10 buffer=" . bufnr('%'), 'E474:')
260 " Unplacing a sign with line number 266 " Unplacing a sign with line number
261 call assert_fails("exe 'sign unplace 2 line=10 buffer=' . bufnr('%')", 'E474:') 267 call assert_fails("sign unplace 2 line=10 buffer=" . bufnr('%'), 'E474:')
262 " Unplacing a sign with sign name 268 " Unplacing a sign with sign name
263 call assert_fails("exe 'sign unplace 2 name=Sign1 buffer=' . bufnr('%')", 'E474:') 269 call assert_fails("sign unplace 2 name=Sign1 buffer=" . bufnr('%'), 'E474:')
264 " Placing a sign without sign name 270 " Placing a sign without sign name
265 call assert_fails("exe 'sign place 2 line=3 buffer=' . bufnr('%')", 'E474:') 271 call assert_fails("sign place 2 line=3 buffer=" . bufnr('%'), 'E474:')
266 " Placing a sign with only sign identifier 272 " Placing a sign with only sign identifier
267 call assert_fails("sign place 2", 'E474:') 273 call assert_fails("sign place 2", 'E474:')
268 " Placing a sign with only a name 274 " Placing a sign with only a name
269 call assert_fails("sign place abc", 'E474:') 275 call assert_fails("sign place abc", 'E474:')
270 " Placing a sign with only line number 276 " Placing a sign with only line number
572 call assert_equal(0, sign_unplace('', {'buffer' : bnum})) 578 call assert_equal(0, sign_unplace('', {'buffer' : bnum}))
573 579
574 call sign_unplace('*') 580 call sign_unplace('*')
575 581
576 " Test for :sign command and groups 582 " Test for :sign command and groups
577 exe 'sign place 5 line=10 name=sign1 file=' . fname 583 sign place 5 line=10 name=sign1 file=Xsign
578 exe 'sign place 5 group=g1 line=10 name=sign1 file=' . fname 584 sign place 5 group=g1 line=10 name=sign1 file=Xsign
579 exe 'sign place 5 group=g2 line=10 name=sign1 file=' . fname 585 sign place 5 group=g2 line=10 name=sign1 file=Xsign
580 586
581 " Test for :sign place group={group} file={fname} 587 " Test for :sign place group={group} file={fname}
582 let a = execute('sign place file=' . fname) 588 let a = execute('sign place file=Xsign')
583 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n line=10 id=5 name=sign1 priority=10\n", a) 589 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n line=10 id=5 name=sign1 priority=10\n", a)
584 590
585 let a = execute('sign place group=g2 file=' . fname) 591 let a = execute('sign place group=g2 file=Xsign')
586 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n line=10 id=5 group=g2 name=sign1 priority=10\n", a) 592 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n line=10 id=5 group=g2 name=sign1 priority=10\n", a)
587 593
588 let a = execute('sign place group=* file=' . fname) 594 let a = execute('sign place group=* file=Xsign')
589 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . 595 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" .
590 \ " line=10 id=5 group=g2 name=sign1 priority=10\n" . 596 \ " line=10 id=5 group=g2 name=sign1 priority=10\n" .
591 \ " line=10 id=5 group=g1 name=sign1 priority=10\n" . 597 \ " line=10 id=5 group=g1 name=sign1 priority=10\n" .
592 \ " line=10 id=5 name=sign1 priority=10\n", a) 598 \ " line=10 id=5 name=sign1 priority=10\n", a)
593 599
594 let a = execute('sign place group=xyz file=' . fname) 600 let a = execute('sign place group=xyz file=Xsign')
595 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n", a) 601 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n", a)
596 602
597 call sign_unplace('*') 603 call sign_unplace('*')
598 604
599 " Test for :sign place group={group} buffer={nr} 605 " Test for :sign place group={group} buffer={nr}
622 \ " line=10 id=5 name=sign1 priority=10\n" . 628 \ " line=10 id=5 name=sign1 priority=10\n" .
623 \ " line=11 id=5 group=g1 name=sign1 priority=10\n" . 629 \ " line=11 id=5 group=g1 name=sign1 priority=10\n" .
624 \ " line=12 id=5 group=g2 name=sign1 priority=10\n", a) 630 \ " line=12 id=5 group=g2 name=sign1 priority=10\n", a)
625 631
626 " Test for :sign unplace 632 " Test for :sign unplace
627 exe 'sign unplace 5 group=g2 file=' . fname 633 sign unplace 5 group=g2 file=Xsign
628 call assert_equal([], sign_getplaced(bnum, {'group' : 'g2'})[0].signs) 634 call assert_equal([], sign_getplaced(bnum, {'group' : 'g2'})[0].signs)
629 635
630 exe 'sign unplace 5 group=g1 buffer=' . bnum 636 exe 'sign unplace 5 group=g1 buffer=' . bnum
631 call assert_equal([], sign_getplaced(bnum, {'group' : 'g1'})[0].signs) 637 call assert_equal([], sign_getplaced(bnum, {'group' : 'g1'})[0].signs)
632 638
633 exe 'sign unplace 5 group=xy file=' . fname 639 sign unplace 5 group=xy file=Xsign
634 call assert_equal(1, len(sign_getplaced(bnum, {'group' : '*'})[0].signs)) 640 call assert_equal(1, len(sign_getplaced(bnum, {'group' : '*'})[0].signs))
635 641
636 " Test for removing all the signs. Place the signs again for this test 642 " Test for removing all the signs. Place the signs again for this test
637 exe 'sign place 5 group=g1 line=11 name=sign1 file=' . fname 643 sign place 5 group=g1 line=11 name=sign1 file=Xsign
638 exe 'sign place 5 group=g2 line=12 name=sign1 file=' . fname 644 sign place 5 group=g2 line=12 name=sign1 file=Xsign
639 exe 'sign place 6 line=20 name=sign1 file=' . fname 645 sign place 6 line=20 name=sign1 file=Xsign
640 exe 'sign place 6 group=g1 line=21 name=sign1 file=' . fname 646 sign place 6 group=g1 line=21 name=sign1 file=Xsign
641 exe 'sign place 6 group=g2 line=22 name=sign1 file=' . fname 647 sign place 6 group=g2 line=22 name=sign1 file=Xsign
642 exe 'sign unplace 5 group=* file=' . fname 648 sign unplace 5 group=* file=Xsign
643 let a = execute('sign place group=*') 649 let a = execute('sign place group=*')
644 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . 650 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" .
645 \ " line=20 id=6 name=sign1 priority=10\n" . 651 \ " line=20 id=6 name=sign1 priority=10\n" .
646 \ " line=21 id=6 group=g1 name=sign1 priority=10\n" . 652 \ " line=21 id=6 group=g1 name=sign1 priority=10\n" .
647 \ " line=22 id=6 group=g2 name=sign1 priority=10\n", a) 653 \ " line=22 id=6 group=g2 name=sign1 priority=10\n", a)
648 654
649 " Remove all the signs from the global group 655 " Remove all the signs from the global group
650 exe 'sign unplace * file=' . fname 656 sign unplace * file=Xsign
651 let a = execute('sign place group=*') 657 let a = execute('sign place group=*')
652 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . 658 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" .
653 \ " line=21 id=6 group=g1 name=sign1 priority=10\n" . 659 \ " line=21 id=6 group=g1 name=sign1 priority=10\n" .
654 \ " line=22 id=6 group=g2 name=sign1 priority=10\n", a) 660 \ " line=22 id=6 group=g2 name=sign1 priority=10\n", a)
655 661
656 " Remove all the signs from a particular group 662 " Remove all the signs from a particular group
657 exe 'sign place 5 line=10 name=sign1 file=' . fname 663 sign place 5 line=10 name=sign1 file=Xsign
658 exe 'sign place 5 group=g1 line=11 name=sign1 file=' . fname 664 sign place 5 group=g1 line=11 name=sign1 file=Xsign
659 exe 'sign place 5 group=g2 line=12 name=sign1 file=' . fname 665 sign place 5 group=g2 line=12 name=sign1 file=Xsign
660 exe 'sign unplace * group=g1 file=' . fname 666 sign unplace * group=g1 file=Xsign
661 let a = execute('sign place group=*') 667 let a = execute('sign place group=*')
662 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . 668 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" .
663 \ " line=10 id=5 name=sign1 priority=10\n" . 669 \ " line=10 id=5 name=sign1 priority=10\n" .
664 \ " line=12 id=5 group=g2 name=sign1 priority=10\n" . 670 \ " line=12 id=5 group=g2 name=sign1 priority=10\n" .
665 \ " line=22 id=6 group=g2 name=sign1 priority=10\n", a) 671 \ " line=22 id=6 group=g2 name=sign1 priority=10\n", a)
666 672
667 " Remove all the signs from all the groups in a file 673 " Remove all the signs from all the groups in a file
668 exe 'sign place 5 group=g1 line=11 name=sign1 file=' . fname 674 sign place 5 group=g1 line=11 name=sign1 file=Xsign
669 exe 'sign place 6 line=20 name=sign1 file=' . fname 675 sign place 6 line=20 name=sign1 file=Xsign
670 exe 'sign place 6 group=g1 line=21 name=sign1 file=' . fname 676 sign place 6 group=g1 line=21 name=sign1 file=Xsign
671 exe 'sign unplace * group=* file=' . fname 677 sign unplace * group=* file=Xsign
672 let a = execute('sign place group=*') 678 let a = execute('sign place group=*')
673 call assert_equal("\n--- Signs ---\n", a) 679 call assert_equal("\n--- Signs ---\n", a)
674 680
675 " Remove a particular sign id in a group from all the files 681 " Remove a particular sign id in a group from all the files
676 exe 'sign place 5 group=g1 line=11 name=sign1 file=' . fname 682 sign place 5 group=g1 line=11 name=sign1 file=Xsign
677 sign unplace 5 group=g1 683 sign unplace 5 group=g1
678 let a = execute('sign place group=*') 684 let a = execute('sign place group=*')
679 call assert_equal("\n--- Signs ---\n", a) 685 call assert_equal("\n--- Signs ---\n", a)
680 686
681 " Remove a particular sign id in all the groups from all the files 687 " Remove a particular sign id in all the groups from all the files
682 exe 'sign place 5 line=10 name=sign1 file=' . fname 688 sign place 5 line=10 name=sign1 file=Xsign
683 exe 'sign place 5 group=g1 line=11 name=sign1 file=' . fname 689 sign place 5 group=g1 line=11 name=sign1 file=Xsign
684 exe 'sign place 5 group=g2 line=12 name=sign1 file=' . fname 690 sign place 5 group=g2 line=12 name=sign1 file=Xsign
685 exe 'sign place 6 line=20 name=sign1 file=' . fname 691 sign place 6 line=20 name=sign1 file=Xsign
686 exe 'sign place 6 group=g1 line=21 name=sign1 file=' . fname 692 sign place 6 group=g1 line=21 name=sign1 file=Xsign
687 exe 'sign place 6 group=g2 line=22 name=sign1 file=' . fname 693 sign place 6 group=g2 line=22 name=sign1 file=Xsign
688 sign unplace 5 group=* 694 sign unplace 5 group=*
689 let a = execute('sign place group=*') 695 let a = execute('sign place group=*')
690 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . 696 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" .
691 \ " line=20 id=6 name=sign1 priority=10\n" . 697 \ " line=20 id=6 name=sign1 priority=10\n" .
692 \ " line=21 id=6 group=g1 name=sign1 priority=10\n" . 698 \ " line=21 id=6 group=g1 name=sign1 priority=10\n" .
693 \ " line=22 id=6 group=g2 name=sign1 priority=10\n", a) 699 \ " line=22 id=6 group=g2 name=sign1 priority=10\n", a)
694 700
695 " Remove all the signs from all the groups in all the files 701 " Remove all the signs from all the groups in all the files
696 exe 'sign place 5 line=10 name=sign1 file=' . fname 702 sign place 5 line=10 name=sign1 file=Xsign
697 exe 'sign place 5 group=g1 line=11 name=sign1 file=' . fname 703 sign place 5 group=g1 line=11 name=sign1 file=Xsign
698 sign unplace * group=* 704 sign unplace * group=*
699 let a = execute('sign place group=*') 705 let a = execute('sign place group=*')
700 call assert_equal("\n--- Signs ---\n", a) 706 call assert_equal("\n--- Signs ---\n", a)
701 707
702 " Error cases 708 " Error cases
703 call assert_fails("exe 'sign place 3 group= name=sign1 buffer=' . bnum", 'E474:') 709 call assert_fails("sign place 3 group= name=sign1 buffer=" . bnum, 'E474:')
704 710
705 call delete("Xsign") 711 call delete("Xsign")
706 call sign_unplace('*') 712 call sign_unplace('*')
707 call sign_undefine() 713 call sign_undefine()
708 enew | only 714 enew | only