comparison src/testdir/test_gui.vim @ 24982:4cb423b9250d v8.2.3028

patch 8.2.3028: GUI mouse events not tested Commit: https://github.com/vim/vim/commit/f1e7449d567c630601aa0cec6c663b791785a668 Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Mon Jun 21 18:44:26 2021 +0200 patch 8.2.3028: GUI mouse events not tested Problem: GUI mouse events not tested. Solution: Add test_gui_mouse_event(). Add mouse tests. Also add a few viminfo tests. (Yegappan Lakshmanan, closes #8407)
author Bram Moolenaar <Bram@vim.org>
date Mon, 21 Jun 2021 18:45:04 +0200
parents ee5b6208f725
children 3b1770226f85
comparison
equal deleted inserted replaced
24981:f8566203119e 24982:4cb423b9250d
387 " Invalid font names are accepted in GTK GUI 387 " Invalid font names are accepted in GTK GUI
388 call assert_fails('set guifont=xa1bc23d7f', 'E596:') 388 call assert_fails('set guifont=xa1bc23d7f', 'E596:')
389 endif 389 endif
390 390
391 " This only works if 'renderoptions' exists and does not work for Windows XP 391 " This only works if 'renderoptions' exists and does not work for Windows XP
392 " and older. 392 " and older.
393 if exists('+renderoptions') && windowsversion() !~ '^[345]\.' 393 if exists('+renderoptions') && windowsversion() !~ '^[345]\.'
394 " doing this four times used to cause a crash 394 " doing this four times used to cause a crash
395 set renderoptions=type:directx 395 set renderoptions=type:directx
396 for i in range(5) 396 for i in range(5)
397 set guifont= 397 set guifont=
873 873
874 nunmap ' 874 nunmap '
875 nunmap <C-W>a 875 nunmap <C-W>a
876 endfunc 876 endfunc
877 877
878 " Test GUI mouse events
879 func Test_gui_mouse_event()
880 set mousemodel=extend
881 call test_override('no_query_mouse', 1)
882 new
883 call setline(1, ['one two three', 'four five six'])
884
885 " place the cursor using left click
886 call cursor(1, 1)
887 call test_gui_mouse_event(0, 2, 4, 0, 0)
888 call test_gui_mouse_event(3, 2, 4, 0, 0)
889 call feedkeys("\<Esc>", 'Lx!')
890 call assert_equal([0, 2, 4, 0], getpos('.'))
891
892 " select and yank a word
893 let @" = ''
894 call test_gui_mouse_event(0, 1, 9, 0, 0)
895 call test_gui_mouse_event(0, 1, 9, 1, 0)
896 call test_gui_mouse_event(3, 1, 9, 0, 0)
897 call feedkeys("y", 'Lx!')
898 call assert_equal('three', @")
899
900 " create visual selection using right click
901 let @" = ''
902 call test_gui_mouse_event(0, 2, 6, 0, 0)
903 call test_gui_mouse_event(3, 2, 6, 0, 0)
904 call test_gui_mouse_event(2, 2, 13, 0, 0)
905 call test_gui_mouse_event(3, 2, 13, 0, 0)
906 call feedkeys("y", 'Lx!')
907 call assert_equal('five six', @")
908
909 " paste using middle mouse button
910 let @* = 'abc '
911 call feedkeys('""', 'Lx!')
912 call test_gui_mouse_event(1, 1, 9, 0, 0)
913 call test_gui_mouse_event(3, 1, 9, 0, 0)
914 call feedkeys("\<Esc>", 'Lx!')
915 call assert_equal(['one two abc three', 'four five six'], getline(1, '$'))
916
917 " extend visual selection using right click in visual mode
918 let @" = ''
919 call cursor(1, 1)
920 call feedkeys('v', 'Lx!')
921 call test_gui_mouse_event(2, 1, 17, 0, 0)
922 call test_gui_mouse_event(3, 1, 17, 0, 0)
923 call feedkeys("y", 'Lx!')
924 call assert_equal('one two abc three', @")
925
926 " extend visual selection using mouse drag
927 let @" = ''
928 call cursor(1, 1)
929 call test_gui_mouse_event(0, 2, 1, 0, 0)
930 call test_gui_mouse_event(0x43, 2, 9, 0, 0)
931 call test_gui_mouse_event(0x3, 2, 9, 0, 0)
932 call feedkeys("y", 'Lx!')
933 call assert_equal('four five', @")
934
935 " select text by moving the mouse
936 let @" = ''
937 call cursor(1, 1)
938 redraw!
939 call test_gui_mouse_event(0, 1, 4, 0, 0)
940 call test_gui_mouse_event(0x700, 1, 9, 0, 0)
941 call test_gui_mouse_event(0x700, 1, 13, 0, 0)
942 call test_gui_mouse_event(0x3, 1, 13, 0, 0)
943 call feedkeys("y", 'Lx!')
944 call assert_equal(' two abc t', @")
945
946 " Using mouse in insert mode
947 call cursor(1, 1)
948 call feedkeys('i', 't')
949 call test_gui_mouse_event(0, 2, 11, 0, 0)
950 call test_gui_mouse_event(3, 2, 11, 0, 0)
951 call feedkeys("po\<Esc>", 'Lx!')
952 call assert_equal(['one two abc three', 'four five posix'], getline(1, '$'))
953
954 %d _
955 call setline(1, range(1, 100))
956 " scroll up
957 call test_gui_mouse_event(0x200, 2, 1, 0, 0)
958 call test_gui_mouse_event(0x200, 2, 1, 0, 0)
959 call test_gui_mouse_event(0x200, 2, 1, 0, 0)
960 call feedkeys("H", 'Lx!')
961 call assert_equal(10, line('.'))
962
963 " scroll down
964 call test_gui_mouse_event(0x100, 2, 1, 0, 0)
965 call test_gui_mouse_event(0x100, 2, 1, 0, 0)
966 call feedkeys("H", 'Lx!')
967 call assert_equal(4, line('.'))
968
969 %d _
970 set nowrap
971 call setline(1, range(10)->join('')->repeat(10))
972 " scroll left
973 call test_gui_mouse_event(0x500, 1, 5, 0, 0)
974 call test_gui_mouse_event(0x500, 1, 10, 0, 0)
975 call test_gui_mouse_event(0x500, 1, 15, 0, 0)
976 call feedkeys('g0', 'Lx!')
977 call assert_equal(19, col('.'))
978
979 " scroll right
980 call test_gui_mouse_event(0x600, 1, 15, 0, 0)
981 call test_gui_mouse_event(0x600, 1, 10, 0, 0)
982 call feedkeys('g0', 'Lx!')
983 call assert_equal(7, col('.'))
984 set wrap&
985
986 %d _
987 call setline(1, repeat([repeat('a', 60)], 10))
988
989 " record various mouse events
990 let mouseEventNames = [
991 \ 'LeftMouse', 'LeftRelease', '2-LeftMouse', '3-LeftMouse',
992 \ 'S-LeftMouse', 'A-LeftMouse', 'C-LeftMouse', 'MiddleMouse',
993 \ 'MiddleRelease', '2-MiddleMouse', '3-MiddleMouse',
994 \ 'S-MiddleMouse', 'A-MiddleMouse', 'C-MiddleMouse',
995 \ 'RightMouse', 'RightRelease', '2-RightMouse',
996 \ '3-RightMouse', 'S-RightMouse', 'A-RightMouse', 'C-RightMouse',
997 \ 'X1Mouse', 'S-X1Mouse', 'A-X1Mouse', 'C-X1Mouse', 'X2Mouse',
998 \ 'S-X2Mouse', 'A-X2Mouse', 'C-X2Mouse'
999 \ ]
1000 let mouseEventCodes = map(copy(mouseEventNames), "'<' .. v:val .. '>'")
1001 let g:events = []
1002 for e in mouseEventCodes
1003 exe 'nnoremap ' .. e .. ' <Cmd>call add(g:events, "' ..
1004 \ substitute(e, '[<>]', '', 'g') .. '")<CR>'
1005 endfor
1006
1007 " Test various mouse buttons (0 - Left, 1 - Middle, 2 - Right, 0x300 - X1,
1008 " 0x300- X2)
1009 for button in [0, 1, 2, 0x300, 0x400]
1010 " Single click
1011 call test_gui_mouse_event(button, 2, 5, 0, 0)
1012 call test_gui_mouse_event(3, 2, 5, 0, 0)
1013
1014 " Double/Triple click is supported by only the Left/Middle/Right mouse
1015 " buttons
1016 if button <= 2
1017 " Double Click
1018 call test_gui_mouse_event(button, 2, 5, 0, 0)
1019 call test_gui_mouse_event(button, 2, 5, 1, 0)
1020 call test_gui_mouse_event(3, 2, 5, 0, 0)
1021
1022 " Triple Click
1023 call test_gui_mouse_event(button, 2, 5, 0, 0)
1024 call test_gui_mouse_event(button, 2, 5, 1, 0)
1025 call test_gui_mouse_event(button, 2, 5, 1, 0)
1026 call test_gui_mouse_event(3, 2, 5, 0, 0)
1027 endif
1028
1029 " Shift click
1030 call test_gui_mouse_event(button, 3, 7, 0, 4)
1031 call test_gui_mouse_event(3, 3, 7, 0, 4)
1032
1033 " Alt click
1034 call test_gui_mouse_event(button, 3, 7, 0, 8)
1035 call test_gui_mouse_event(3, 3, 7, 0, 8)
1036
1037 " Ctrl click
1038 call test_gui_mouse_event(button, 3, 7, 0, 16)
1039 call test_gui_mouse_event(3, 3, 7, 0, 16)
1040
1041 call feedkeys("\<Esc>", 'Lx!')
1042 endfor
1043
1044 call assert_equal(['LeftMouse', 'LeftRelease', 'LeftMouse', '2-LeftMouse',
1045 \ 'LeftMouse', '2-LeftMouse', '3-LeftMouse', 'S-LeftMouse',
1046 \ 'A-LeftMouse', 'C-LeftMouse', 'MiddleMouse', 'MiddleRelease',
1047 \ 'MiddleMouse', '2-MiddleMouse', 'MiddleMouse', '2-MiddleMouse',
1048 \ '3-MiddleMouse', 'S-MiddleMouse', 'A-MiddleMouse', 'C-MiddleMouse',
1049 \ 'RightMouse', 'RightRelease', 'RightMouse', '2-RightMouse',
1050 \ 'RightMouse', '2-RightMouse', '3-RightMouse', 'S-RightMouse',
1051 \ 'A-RightMouse', 'C-RightMouse', 'X1Mouse', 'S-X1Mouse', 'A-X1Mouse',
1052 \ 'C-X1Mouse', 'X2Mouse', 'S-X2Mouse', 'A-X2Mouse', 'C-X2Mouse'],
1053 \ g:events)
1054
1055 for e in mouseEventCodes
1056 exe 'nunmap ' .. e
1057 endfor
1058
1059 " modeless selection
1060 set mouse=
1061 let save_guioptions = &guioptions
1062 set guioptions+=A
1063 %d _
1064 call setline(1, ['one two three', 'four five sixteen'])
1065 call cursor(1, 1)
1066 redraw!
1067 " Double click should select the word and copy it to clipboard
1068 let @* = ''
1069 call test_gui_mouse_event(0, 2, 11, 0, 0)
1070 call test_gui_mouse_event(0, 2, 11, 1, 0)
1071 call test_gui_mouse_event(3, 2, 11, 0, 0)
1072 call feedkeys("\<Esc>", 'Lx!')
1073 call assert_equal([0, 1, 1, 0], getpos('.'))
1074 call assert_equal('sixteen', @*)
1075 " Right click should extend the selection from cursor
1076 call cursor(1, 6)
1077 redraw!
1078 let @* = ''
1079 call test_gui_mouse_event(2, 1, 11, 0, 0)
1080 call test_gui_mouse_event(3, 1, 11, 0, 0)
1081 call feedkeys("\<Esc>", 'Lx!')
1082 call assert_equal([0, 1, 6, 0], getpos('.'))
1083 call assert_equal('wo thr', @*)
1084 " Middle click should paste the clipboard contents
1085 call cursor(2, 1)
1086 redraw!
1087 call test_gui_mouse_event(1, 1, 11, 0, 0)
1088 call test_gui_mouse_event(3, 1, 11, 0, 0)
1089 call feedkeys("\<Esc>", 'Lx!')
1090 call assert_equal([0, 2, 7, 0], getpos('.'))
1091 call assert_equal('wo thrfour five sixteen', getline(2))
1092 set mouse&
1093 let &guioptions = save_guioptions
1094
1095 bw!
1096 call test_override('no_query_mouse', 0)
1097 set mousemodel&
1098 endfunc
1099
878 " vim: shiftwidth=2 sts=2 expandtab 1100 " vim: shiftwidth=2 sts=2 expandtab