1" Tests for decoding escape sequences sent by the terminal. 2 3" This only works for Unix in a terminal 4if has('gui_running') || !has('unix') 5 finish 6endif 7 8source shared.vim 9 10" xterm2 and sgr always work, urxvt is optional. 11let s:ttymouse_values = ['xterm2', 'sgr'] 12if has('mouse_urxvt') 13 call add(s:ttymouse_values, 'urxvt') 14endif 15 16" dec doesn't support all the functionality 17if has('mouse_dec') 18 let s:ttymouse_dec = ['dec'] 19else 20 let s:ttymouse_dec = [] 21endif 22 23" netterm only supports left click 24if has('mouse_netterm') 25 let s:ttymouse_netterm = ['netterm'] 26else 27 let s:ttymouse_netterm = [] 28endif 29 30" Helper function to emit a terminal escape code. 31func TerminalEscapeCode(code, row, col, m) 32 if &ttymouse ==# 'xterm2' 33 " need to use byte encoding here. 34 let str = list2str([a:code + 0x20, a:col + 0x20, a:row + 0x20]) 35 if has('iconv') 36 let bytes = iconv(str, 'utf-8', 'latin1') 37 else 38 " Hopefully the numbers are not too big. 39 let bytes = str 40 endif 41 call feedkeys("\<Esc>[M" .. bytes, 'Lx!') 42 elseif &ttymouse ==# 'sgr' 43 call feedkeys(printf("\<Esc>[<%d;%d;%d%s", a:code, a:col, a:row, a:m), 'Lx!') 44 elseif &ttymouse ==# 'urxvt' 45 call feedkeys(printf("\<Esc>[%d;%d;%dM", a:code + 0x20, a:col, a:row), 'Lx!') 46 endif 47endfunc 48 49func DecEscapeCode(code, down, row, col) 50 call feedkeys(printf("\<Esc>[%d;%d;%d;%d&w", a:code, a:down, a:row, a:col), 'Lx!') 51endfunc 52 53func NettermEscapeCode(row, col) 54 call feedkeys(printf("\<Esc>}%d,%d\r", a:row, a:col), 'Lx!') 55endfunc 56 57func MouseLeftClick(row, col) 58 if &ttymouse ==# 'dec' 59 call DecEscapeCode(2, 4, a:row, a:col) 60 elseif &ttymouse ==# 'netterm' 61 call NettermEscapeCode(a:row, a:col) 62 else 63 call TerminalEscapeCode(0, a:row, a:col, 'M') 64 endif 65endfunc 66 67func MouseMiddleClick(row, col) 68 if &ttymouse ==# 'dec' 69 call DecEscapeCode(4, 2, a:row, a:col) 70 else 71 call TerminalEscapeCode(1, a:row, a:col, 'M') 72 endif 73endfunc 74 75func MouseCtrlLeftClick(row, col) 76 let ctrl = 0x10 77 call TerminalEscapeCode(0 + ctrl, a:row, a:col, 'M') 78endfunc 79 80func MouseCtrlRightClick(row, col) 81 let ctrl = 0x10 82 call TerminalEscapeCode(2 + ctrl, a:row, a:col, 'M') 83endfunc 84 85func MouseLeftRelease(row, col) 86 if &ttymouse ==# 'dec' 87 call DecEscapeCode(3, 0, a:row, a:col) 88 elseif &ttymouse ==# 'netterm' 89 " send nothing 90 else 91 call TerminalEscapeCode(3, a:row, a:col, 'm') 92 endif 93endfunc 94 95func MouseMiddleRelease(row, col) 96 if &ttymouse ==# 'dec' 97 call DecEscapeCode(5, 0, a:row, a:col) 98 else 99 call TerminalEscapeCode(3, a:row, a:col, 'm') 100 endif 101endfunc 102 103func MouseRightRelease(row, col) 104 call TerminalEscapeCode(3, a:row, a:col, 'm') 105endfunc 106 107func MouseLeftDrag(row, col) 108 if &ttymouse ==# 'dec' 109 call DecEscapeCode(1, 4, a:row, a:col) 110 else 111 call TerminalEscapeCode(0x20, a:row, a:col, 'M') 112 endif 113endfunc 114 115func MouseWheelUp(row, col) 116 call TerminalEscapeCode(0x40, a:row, a:col, 'M') 117endfunc 118 119func MouseWheelDown(row, col) 120 call TerminalEscapeCode(0x41, a:row, a:col, 'M') 121endfunc 122 123func Test_term_mouse_left_click() 124 new 125 let save_mouse = &mouse 126 let save_term = &term 127 let save_ttymouse = &ttymouse 128 call test_override('no_query_mouse', 1) 129 set mouse=a term=xterm 130 call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer']) 131 132 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec + s:ttymouse_netterm 133 let msg = 'ttymouse=' .. ttymouse_val 134 exe 'set ttymouse=' .. ttymouse_val 135 go 136 call assert_equal([0, 1, 1, 0], getpos('.'), msg) 137 let row = 2 138 let col = 6 139 call MouseLeftClick(row, col) 140 call MouseLeftRelease(row, col) 141 call assert_equal([0, 2, 6, 0], getpos('.'), msg) 142 endfor 143 144 let &mouse = save_mouse 145 let &term = save_term 146 let &ttymouse = save_ttymouse 147 call test_override('no_query_mouse', 0) 148 bwipe! 149endfunc 150 151" Test that <C-LeftMouse> jumps to help tag and <C-RightMouse> jumps back. 152func Test_xterm_mouse_ctrl_click() 153 let save_mouse = &mouse 154 let save_term = &term 155 let save_ttymouse = &ttymouse 156 set mouse=a term=xterm 157 158 for ttymouse_val in s:ttymouse_values 159 let msg = 'ttymouse=' .. ttymouse_val 160 exe 'set ttymouse=' .. ttymouse_val 161 help 162 /usr_02.txt 163 norm! zt 164 let row = 1 165 let col = 1 166 call MouseCtrlLeftClick(row, col) 167 call MouseLeftRelease(row, col) 168 call assert_match('usr_02.txt$', bufname('%'), msg) 169 call assert_equal('*usr_02.txt*', expand('<cWORD>')) 170 171 call MouseCtrlRightClick(row, col) 172 call MouseRightRelease(row, col) 173 call assert_match('help.txt$', bufname('%'), msg) 174 call assert_equal('|usr_02.txt|', expand('<cWORD>')) 175 176 helpclose 177 endfor 178 179 let &mouse = save_mouse 180 let &term = save_term 181 let &ttymouse = save_ttymouse 182endfunc 183 184func Test_term_mouse_middle_click() 185 if !WorkingClipboard() 186 throw 'Skipped: No working clipboard' 187 endif 188 189 new 190 let save_mouse = &mouse 191 let save_term = &term 192 let save_ttymouse = &ttymouse 193 call test_override('no_query_mouse', 1) 194 let save_quotestar = @* 195 let @* = 'abc' 196 set mouse=a term=xterm 197 198 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 199 let msg = 'ttymouse=' .. ttymouse_val 200 exe 'set ttymouse=' .. ttymouse_val 201 call setline(1, ['123456789', '123456789']) 202 203 " Middle-click in the middle of the line pastes text where clicked. 204 let row = 1 205 let col = 6 206 call MouseMiddleClick(row, col) 207 call MouseMiddleRelease(row, col) 208 call assert_equal(['12345abc6789', '123456789'], getline(1, '$'), msg) 209 210 " Middle-click beyond end of the line pastes text at the end of the line. 211 let col = 20 212 call MouseMiddleClick(row, col) 213 call MouseMiddleRelease(row, col) 214 call assert_equal(['12345abc6789abc', '123456789'], getline(1, '$'), msg) 215 216 " Middle-click beyond the last line pastes in the last line. 217 let row = 5 218 let col = 3 219 call MouseMiddleClick(row, col) 220 call MouseMiddleRelease(row, col) 221 call assert_equal(['12345abc6789abc', '12abc3456789'], getline(1, '$'), msg) 222 endfor 223 224 let &mouse = save_mouse 225 let &term = save_term 226 let &ttymouse = save_ttymouse 227 call test_override('no_query_mouse', 0) 228 let @* = save_quotestar 229 bwipe! 230endfunc 231 232" TODO: for unclear reasons this test fails if it comes after 233" Test_xterm_mouse_ctrl_click() 234func Test_1xterm_mouse_wheel() 235 new 236 let save_mouse = &mouse 237 let save_term = &term 238 let save_ttymouse = &ttymouse 239 set mouse=a term=xterm 240 call setline(1, range(1, 100)) 241 242 for ttymouse_val in s:ttymouse_values 243 let msg = 'ttymouse=' .. ttymouse_val 244 exe 'set ttymouse=' .. ttymouse_val 245 go 246 call assert_equal(1, line('w0'), msg) 247 call assert_equal([0, 1, 1, 0], getpos('.'), msg) 248 249 call MouseWheelDown(1, 1) 250 call assert_equal(4, line('w0'), msg) 251 call assert_equal([0, 4, 1, 0], getpos('.'), msg) 252 253 call MouseWheelDown(1, 1) 254 call assert_equal(7, line('w0'), msg) 255 call assert_equal([0, 7, 1, 0], getpos('.'), msg) 256 257 call MouseWheelUp(1, 1) 258 call assert_equal(4, line('w0'), msg) 259 call assert_equal([0, 7, 1, 0], getpos('.'), msg) 260 261 call MouseWheelUp(1, 1) 262 call assert_equal(1, line('w0'), msg) 263 call assert_equal([0, 7, 1, 0], getpos('.'), msg) 264 endfor 265 266 let &mouse = save_mouse 267 let &term = save_term 268 let &ttymouse = save_ttymouse 269 bwipe! 270endfunc 271 272func Test_term_mouse_drag_window_separator() 273 let save_mouse = &mouse 274 let save_term = &term 275 let save_ttymouse = &ttymouse 276 call test_override('no_query_mouse', 1) 277 set mouse=a term=xterm 278 279 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 280 let msg = 'ttymouse=' .. ttymouse_val 281 exe 'set ttymouse=' .. ttymouse_val 282 283 " Split horizontally and test dragging the horizontal window separator. 284 split 285 let rowseparator = winheight(0) + 1 286 let row = rowseparator 287 let col = 1 288 289 " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 290 if ttymouse_val !=# 'xterm2' || row <= 223 291 call MouseLeftClick(row, col) 292 let row -= 1 293 call MouseLeftDrag(row, col) 294 call assert_equal(rowseparator - 1, winheight(0) + 1, msg) 295 let row += 1 296 call MouseLeftDrag(row, col) 297 call assert_equal(rowseparator, winheight(0) + 1, msg) 298 call MouseLeftRelease(row, col) 299 call assert_equal(rowseparator, winheight(0) + 1, msg) 300 endif 301 bwipe! 302 303 " Split vertically and test dragging the vertical window separator. 304 vsplit 305 let colseparator = winwidth(0) + 1 306 let row = 1 307 let col = colseparator 308 309 " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 310 if ttymouse_val !=# 'xterm2' || col <= 223 311 call MouseLeftClick(row, col) 312 let col -= 1 313 call MouseLeftDrag(row, col) 314 call assert_equal(colseparator - 1, winwidth(0) + 1, msg) 315 let col += 1 316 call MouseLeftDrag(row, col) 317 call assert_equal(colseparator, winwidth(0) + 1, msg) 318 call MouseLeftRelease(row, col) 319 call assert_equal(colseparator, winwidth(0) + 1, msg) 320 endif 321 bwipe! 322 endfor 323 324 let &mouse = save_mouse 325 let &term = save_term 326 let &ttymouse = save_ttymouse 327 call test_override('no_query_mouse', 0) 328endfunc 329 330func Test_term_mouse_drag_statusline() 331 let save_mouse = &mouse 332 let save_term = &term 333 let save_ttymouse = &ttymouse 334 call test_override('no_query_mouse', 1) 335 let save_laststatus = &laststatus 336 set mouse=a term=xterm laststatus=2 337 338 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 339 let msg = 'ttymouse=' .. ttymouse_val 340 exe 'set ttymouse=' .. ttymouse_val 341 342 call assert_equal(1, &cmdheight, msg) 343 let rowstatusline = winheight(0) + 1 344 let row = rowstatusline 345 let col = 1 346 347 if ttymouse_val ==# 'xterm2' && row > 223 348 " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 349 continue 350 endif 351 352 call MouseLeftClick(row, col) 353 let row -= 1 354 call MouseLeftDrag(row, col) 355 call assert_equal(2, &cmdheight, msg) 356 call assert_equal(rowstatusline - 1, winheight(0) + 1, msg) 357 let row += 1 358 call MouseLeftDrag(row, col) 359 call assert_equal(1, &cmdheight, msg) 360 call assert_equal(rowstatusline, winheight(0) + 1, msg) 361 call MouseLeftRelease(row, col) 362 call assert_equal(1, &cmdheight, msg) 363 call assert_equal(rowstatusline, winheight(0) + 1, msg) 364 endfor 365 366 let &mouse = save_mouse 367 let &term = save_term 368 let &ttymouse = save_ttymouse 369 call test_override('no_query_mouse', 0) 370 let &laststatus = save_laststatus 371endfunc 372 373func Test_term_mouse_click_tab() 374 let save_mouse = &mouse 375 let save_term = &term 376 let save_ttymouse = &ttymouse 377 call test_override('no_query_mouse', 1) 378 set mouse=a term=xterm 379 let row = 1 380 381 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec + s:ttymouse_netterm 382 let msg = 'ttymouse=' .. ttymouse_val 383 exe 'set ttymouse=' .. ttymouse_val 384 e Xfoo 385 tabnew Xbar 386 387 let a = split(execute(':tabs'), "\n") 388 call assert_equal(['Tab page 1', 389 \ ' Xfoo', 390 \ 'Tab page 2', 391 \ '> Xbar'], a, msg) 392 393 " Test clicking on tab names in the tabline at the top. 394 let col = 2 395 redraw 396 call MouseLeftClick(row, col) 397 call MouseLeftRelease(row, col) 398 let a = split(execute(':tabs'), "\n") 399 call assert_equal(['Tab page 1', 400 \ '> Xfoo', 401 \ 'Tab page 2', 402 \ ' Xbar'], a, msg) 403 404 let col = 9 405 call MouseLeftClick(row, col) 406 call MouseLeftRelease(row, col) 407 let a = split(execute(':tabs'), "\n") 408 call assert_equal(['Tab page 1', 409 \ ' Xfoo', 410 \ 'Tab page 2', 411 \ '> Xbar'], a, msg) 412 413 %bwipe! 414 endfor 415 416 let &mouse = save_mouse 417 let &term = save_term 418 let &ttymouse = save_ttymouse 419 call test_override('no_query_mouse', 0) 420endfunc 421 422func Test_term_mouse_click_X_to_close_tab() 423 let save_mouse = &mouse 424 let save_term = &term 425 let save_ttymouse = &ttymouse 426 call test_override('no_query_mouse', 1) 427 set mouse=a term=xterm 428 let row = 1 429 let col = &columns 430 431 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec + s:ttymouse_netterm 432 if ttymouse_val ==# 'xterm2' && col > 223 433 " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 434 continue 435 endif 436 let msg = 'ttymouse=' .. ttymouse_val 437 exe 'set ttymouse=' .. ttymouse_val 438 e Xtab1 439 tabnew Xtab2 440 tabnew Xtab3 441 tabn 2 442 443 let a = split(execute(':tabs'), "\n") 444 call assert_equal(['Tab page 1', 445 \ ' Xtab1', 446 \ 'Tab page 2', 447 \ '> Xtab2', 448 \ 'Tab page 3', 449 \ ' Xtab3'], a, msg) 450 451 " Click on "X" in tabline to close current tab i.e. Xtab2. 452 redraw 453 call MouseLeftClick(row, col) 454 call MouseLeftRelease(row, col) 455 let a = split(execute(':tabs'), "\n") 456 call assert_equal(['Tab page 1', 457 \ ' Xtab1', 458 \ 'Tab page 2', 459 \ '> Xtab3'], a, msg) 460 461 %bwipe! 462 endfor 463 464 let &mouse = save_mouse 465 let &term = save_term 466 let &ttymouse = save_ttymouse 467 call test_override('no_query_mouse', 0) 468endfunc 469 470func Test_term_mouse_drag_to_move_tab() 471 let save_mouse = &mouse 472 let save_term = &term 473 let save_ttymouse = &ttymouse 474 call test_override('no_query_mouse', 1) 475 " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop 476 set mouse=a term=xterm mousetime=1 477 let row = 1 478 479 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 480 let msg = 'ttymouse=' .. ttymouse_val 481 exe 'set ttymouse=' .. ttymouse_val 482 e Xtab1 483 tabnew Xtab2 484 485 let a = split(execute(':tabs'), "\n") 486 call assert_equal(['Tab page 1', 487 \ ' Xtab1', 488 \ 'Tab page 2', 489 \ '> Xtab2'], a, msg) 490 redraw 491 492 " Click in tab2 and drag it to tab1. 493 " Check getcharmod() to verify that click is not 494 " interpreted as a spurious double-click. 495 call MouseLeftClick(row, 10) 496 call assert_equal(0, getcharmod(), msg) 497 for col in [9, 8, 7, 6] 498 call MouseLeftDrag(row, col) 499 endfor 500 call MouseLeftRelease(row, col) 501 let a = split(execute(':tabs'), "\n") 502 call assert_equal(['Tab page 1', 503 \ '> Xtab2', 504 \ 'Tab page 2', 505 \ ' Xtab1'], a, msg) 506 507 " brief sleep to avoid causing a double-click 508 sleep 20m 509 %bwipe! 510 endfor 511 512 let &mouse = save_mouse 513 let &term = save_term 514 let &ttymouse = save_ttymouse 515 call test_override('no_query_mouse', 0) 516 set mousetime& 517endfunc 518 519func Test_term_mouse_double_click_to_create_tab() 520 let save_mouse = &mouse 521 let save_term = &term 522 let save_ttymouse = &ttymouse 523 call test_override('no_query_mouse', 1) 524 " Set 'mousetime' to a small value, so that double-click works but we don't 525 " have to wait long to avoid a triple-click. 526 set mouse=a term=xterm mousetime=100 527 let row = 1 528 let col = 10 529 530 let round = 0 531 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 532 let msg = 'ttymouse=' .. ttymouse_val 533 exe 'set ttymouse=' .. ttymouse_val 534 e Xtab1 535 tabnew Xtab2 536 537 if round > 0 538 " We need to sleep, or else the first MouseLeftClick() will be 539 " interpreted as a spurious triple-click. 540 sleep 100m 541 endif 542 let round += 1 543 544 let a = split(execute(':tabs'), "\n") 545 call assert_equal(['Tab page 1', 546 \ ' Xtab1', 547 \ 'Tab page 2', 548 \ '> Xtab2'], a, msg) 549 550 redraw 551 call MouseLeftClick(row, col) 552 " Check getcharmod() to verify that first click is not 553 " interpreted as a spurious double-click. 554 call assert_equal(0, getcharmod(), msg) 555 call MouseLeftRelease(row, col) 556 call MouseLeftClick(row, col) 557 call assert_equal(32, getcharmod(), msg) " double-click 558 call MouseLeftRelease(row, col) 559 let a = split(execute(':tabs'), "\n") 560 call assert_equal(['Tab page 1', 561 \ ' Xtab1', 562 \ 'Tab page 2', 563 \ '> [No Name]', 564 \ 'Tab page 3', 565 \ ' Xtab2'], a, msg) 566 567 %bwipe! 568 endfor 569 570 let &mouse = save_mouse 571 let &term = save_term 572 let &ttymouse = save_ttymouse 573 call test_override('no_query_mouse', 0) 574 set mousetime& 575endfunc 576 577func Test_xterm_mouse_click_in_fold_columns() 578 new 579 let save_mouse = &mouse 580 let save_term = &term 581 let save_ttymouse = &ttymouse 582 let save_foldcolumn = &foldcolumn 583 set mouse=a term=xterm foldcolumn=3 ttymouse=xterm2 584 585 " Create 2 nested folds. 586 call setline(1, range(1, 7)) 587 2,6fold 588 norm! zR 589 4,5fold 590 call assert_equal([-1, -1, -1, 4, 4, -1, -1], 591 \ map(range(1, 7), 'foldclosed(v:val)')) 592 593 " Click in "+" of inner fold in foldcolumn should open it. 594 redraw 595 let row = 4 596 let col = 2 597 call MouseLeftClick(row, col) 598 call MouseLeftRelease(row, col) 599 call assert_equal([-1, -1, -1, -1, -1, -1, -1], 600 \ map(range(1, 7), 'foldclosed(v:val)')) 601 602 " Click in "-" of outer fold in foldcolumn should close it. 603 redraw 604 let row = 2 605 let col = 1 606 call MouseLeftClick(row, col) 607 call MouseLeftRelease(row, col) 608 call assert_equal([-1, 2, 2, 2, 2, 2, -1], 609 \ map(range(1, 7), 'foldclosed(v:val)')) 610 norm! zR 611 612 " Click in "|" of inner fold in foldcolumn should close it. 613 redraw 614 let row = 5 615 let col = 2 616 call MouseLeftClick(row, col) 617 call MouseLeftRelease(row, col) 618 call assert_equal([-1, -1, -1, 4, 4, -1, -1], 619 \ map(range(1, 7), 'foldclosed(v:val)')) 620 621 let &foldcolumn = save_foldcolumn 622 let &ttymouse = save_ttymouse 623 let &term = save_term 624 let &mouse = save_mouse 625 bwipe! 626endfunc 627 628" This only checks if the sequence is recognized. 629func Test_term_rgb_response() 630 set t_RF=x 631 set t_RB=y 632 633 " response to t_RF, 4 digits 634 let red = 0x12 635 let green = 0x34 636 let blue = 0x56 637 let seq = printf("\<Esc>]10;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 638 call feedkeys(seq, 'Lx!') 639 call assert_equal(seq, v:termrfgresp) 640 641 " response to t_RF, 2 digits 642 let red = 0x78 643 let green = 0x9a 644 let blue = 0xbc 645 let seq = printf("\<Esc>]10;rgb:%02x/%02x/%02x\x07", red, green, blue) 646 call feedkeys(seq, 'Lx!') 647 call assert_equal(seq, v:termrfgresp) 648 649 " response to t_RB, 4 digits, dark 650 set background=light 651 call test_option_not_set('background') 652 let red = 0x29 653 let green = 0x4a 654 let blue = 0x6b 655 let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 656 call feedkeys(seq, 'Lx!') 657 call assert_equal(seq, v:termrbgresp) 658 call assert_equal('dark', &background) 659 660 " response to t_RB, 4 digits, light 661 set background=dark 662 call test_option_not_set('background') 663 let red = 0x81 664 let green = 0x63 665 let blue = 0x65 666 let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 667 call feedkeys(seq, 'Lx!') 668 call assert_equal(seq, v:termrbgresp) 669 call assert_equal('light', &background) 670 671 " response to t_RB, 2 digits, dark 672 set background=light 673 call test_option_not_set('background') 674 let red = 0x47 675 let green = 0x59 676 let blue = 0x5b 677 let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 678 call feedkeys(seq, 'Lx!') 679 call assert_equal(seq, v:termrbgresp) 680 call assert_equal('dark', &background) 681 682 " response to t_RB, 2 digits, light 683 set background=dark 684 call test_option_not_set('background') 685 let red = 0x83 686 let green = 0xa4 687 let blue = 0xc2 688 let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 689 call feedkeys(seq, 'Lx!') 690 call assert_equal(seq, v:termrbgresp) 691 call assert_equal('light', &background) 692 693 set t_RF= t_RB= 694endfunc 695 696" This only checks if the sequence is recognized. 697" This must be last, because it has side effects to xterm properties. 698" TODO: check that the values were parsed properly 699func Test_xx_term_style_response() 700 " Termresponse is only parsed when t_RV is not empty. 701 set t_RV=x 702 703 " send the termresponse to trigger requesting the XT codes 704 let seq = "\<Esc>[>41;337;0c" 705 call feedkeys(seq, 'Lx!') 706 call assert_equal(seq, v:termresponse) 707 708 let seq = "\<Esc>P1$r2 q\<Esc>\\" 709 call feedkeys(seq, 'Lx!') 710 call assert_equal(seq, v:termstyleresp) 711 712 set t_RV= 713endfunc 714 715func Test_get_termcode() 716 let k1 = &t_k1 717 set t_k1= 718 set t_k1& 719 call assert_equal(k1, &t_k1) 720 721 " use external termcap first 722 set nottybuiltin 723 set t_k1= 724 set t_k1& 725 " when using external termcap may get something else, but it must not be 726 " empty, since we would fallback to the builtin one. 727 call assert_notequal('', &t_k1) 728 729 if &term =~ 'xterm' 730 " use internal termcap first 731 let term_save = &term 732 let &term = 'builtin_' .. &term 733 set t_k1= 734 set t_k1& 735 call assert_equal(k1, &t_k1) 736 let &term = term_save 737 endif 738 739 set ttybuiltin 740endfunc 741