comparison src/testdir/test_autocmd.vim @ 12783:afd8a4f36301 v8.0.1269

patch 8.0.1269: effect of autocommands on marks is not tested commit https://github.com/vim/vim/commit/aace21581345aa51c09d809ab3744a943a71c879 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Nov 5 16:23:10 2017 +0100 patch 8.0.1269: effect of autocommands on marks is not tested Problem: Effect of autocommands on marks is not tested. Solution: Add a couple of tests. (James McCoy, closes https://github.com/vim/vim/issues/2271)
author Christian Brabandt <cb@256bit.org>
date Sun, 05 Nov 2017 16:30:04 +0100
parents 0b6c09957b43
children 6e81a68d63a1
comparison
equal deleted inserted replaced
12782:a558153adcb5 12783:afd8a4f36301
995 au! FileAppendCmd 995 au! FileAppendCmd
996 %bwipe! 996 %bwipe!
997 call delete('Xxx') 997 call delete('Xxx')
998 enew! 998 enew!
999 endfunc 999 endfunc
1000
1001 func SetChangeMarks(start, end)
1002 exe a:start. 'mark ['
1003 exe a:end. 'mark ]'
1004 endfunc
1005
1006 " Verify the effects of autocmds on '[ and ']
1007 func Test_change_mark_in_autocmds()
1008 edit! Xtest
1009 call feedkeys("ia\<CR>b\<CR>c\<CR>d\<C-g>u", 'xtn')
1010
1011 call SetChangeMarks(2, 3)
1012 write
1013 call assert_equal([1, 4], [line("'["), line("']")])
1014
1015 call SetChangeMarks(2, 3)
1016 au BufWritePre * call assert_equal([1, 4], [line("'["), line("']")])
1017 write
1018 au! BufWritePre
1019
1020 if executable('cat')
1021 write XtestFilter
1022 write >> XtestFilter
1023
1024 call SetChangeMarks(2, 3)
1025 " Marks are set to the entire range of the write
1026 au FilterWritePre * call assert_equal([1, 4], [line("'["), line("']")])
1027 " '[ is adjusted to just before the line that will receive the filtered
1028 " data
1029 au FilterReadPre * call assert_equal([4, 4], [line("'["), line("']")])
1030 " The filtered data is read into the buffer, and the source lines are
1031 " still present, so the range is after the source lines
1032 au FilterReadPost * call assert_equal([5, 12], [line("'["), line("']")])
1033 %!cat XtestFilter
1034 " After the filtered data is read, the original lines are deleted
1035 call assert_equal([1, 8], [line("'["), line("']")])
1036 au! FilterWritePre,FilterReadPre,FilterReadPost
1037 undo
1038
1039 call SetChangeMarks(1, 4)
1040 au FilterWritePre * call assert_equal([2, 3], [line("'["), line("']")])
1041 au FilterReadPre * call assert_equal([3, 3], [line("'["), line("']")])
1042 au FilterReadPost * call assert_equal([4, 11], [line("'["), line("']")])
1043 2,3!cat XtestFilter
1044 call assert_equal([2, 9], [line("'["), line("']")])
1045 au! FilterWritePre,FilterReadPre,FilterReadPost
1046 undo
1047
1048 call delete('XtestFilter')
1049 endif
1050
1051 call SetChangeMarks(1, 4)
1052 au FileWritePre * call assert_equal([2, 3], [line("'["), line("']")])
1053 2,3write Xtest2
1054 au! FileWritePre
1055
1056 call SetChangeMarks(2, 3)
1057 au FileAppendPre * call assert_equal([1, 4], [line("'["), line("']")])
1058 write >> Xtest2
1059 au! FileAppendPre
1060
1061 call SetChangeMarks(1, 4)
1062 au FileAppendPre * call assert_equal([2, 3], [line("'["), line("']")])
1063 2,3write >> Xtest2
1064 au! FileAppendPre
1065
1066 call SetChangeMarks(1, 1)
1067 au FileReadPre * call assert_equal([3, 1], [line("'["), line("']")])
1068 au FileReadPost * call assert_equal([4, 11], [line("'["), line("']")])
1069 3read Xtest2
1070 au! FileReadPre,FileReadPost
1071 undo
1072
1073 call SetChangeMarks(4, 4)
1074 " When the line is 0, it's adjusted to 1
1075 au FileReadPre * call assert_equal([1, 4], [line("'["), line("']")])
1076 au FileReadPost * call assert_equal([1, 8], [line("'["), line("']")])
1077 0read Xtest2
1078 au! FileReadPre,FileReadPost
1079 undo
1080
1081 call SetChangeMarks(4, 4)
1082 " When the line is 0, it's adjusted to 1
1083 au FileReadPre * call assert_equal([1, 4], [line("'["), line("']")])
1084 au FileReadPost * call assert_equal([2, 9], [line("'["), line("']")])
1085 1read Xtest2
1086 au! FileReadPre,FileReadPost
1087 undo
1088
1089 bwipe!
1090 call delete('Xtest')
1091 call delete('Xtest2')
1092 endfunc
1093
1094 func Test_Filter_noshelltemp()
1095 if !executable('cat')
1096 return
1097 endif
1098
1099 enew!
1100 call setline(1, ['a', 'b', 'c', 'd'])
1101
1102 let shelltemp = &shelltemp
1103 set shelltemp
1104
1105 let g:filter_au = 0
1106 au FilterWritePre * let g:filter_au += 1
1107 au FilterReadPre * let g:filter_au += 1
1108 au FilterReadPost * let g:filter_au += 1
1109 %!cat
1110 call assert_equal(3, g:filter_au)
1111
1112 if has('filterpipe')
1113 set noshelltemp
1114
1115 let g:filter_au = 0
1116 au FilterWritePre * let g:filter_au += 1
1117 au FilterReadPre * let g:filter_au += 1
1118 au FilterReadPost * let g:filter_au += 1
1119 %!cat
1120 call assert_equal(0, g:filter_au)
1121 endif
1122
1123 au! FilterWritePre,FilterReadPre,FilterReadPost
1124 let &shelltemp = shelltemp
1125 bwipe!
1126 endfunc