neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

linematch_spec.lua (82350B)


      1 local t = require('test.testutil')
      2 local n = require('test.functional.testnvim')()
      3 local Screen = require('test.functional.ui.screen')
      4 
      5 local feed = n.feed
      6 local clear = n.clear
      7 local write_file = t.write_file
      8 
      9 describe('Diff mode screen with 3 diffs open', function()
     10  local fname = 'Xtest-functional-diff-screen-1'
     11  local fname_2 = fname .. '.2'
     12  local fname_3 = fname .. '.3'
     13  local screen
     14 
     15  local reread = function()
     16    feed(':e<cr><c-w>w:e<cr><c-w>w:e<cr><c-w>w')
     17  end
     18 
     19  setup(function()
     20    clear()
     21    os.remove(fname)
     22    os.remove(fname_2)
     23    os.remove(fname_3)
     24  end)
     25 
     26  teardown(function()
     27    os.remove(fname)
     28    os.remove(fname_2)
     29    os.remove(fname_3)
     30  end)
     31 
     32  before_each(function()
     33    clear()
     34    feed(':set diffopt=internal,filler,linematch:30<cr>')
     35    feed(':e ' .. fname .. '<cr>')
     36    feed(':vnew ' .. fname_2 .. '<cr>')
     37    feed(':vnew ' .. fname_3 .. '<cr>')
     38    feed(':windo diffthis<cr>')
     39 
     40    screen = Screen.new(100, 16)
     41    feed('<c-w>=')
     42    feed(':windo set nu!<cr>')
     43  end)
     44 
     45  describe(
     46    'setup the diff screen to look like a merge conflict with 3 files in diff mode',
     47    function()
     48      before_each(function()
     49        local f1 = [[
     50 
     51  common line
     52      AAA
     53      AAA
     54      AAA
     55      ]]
     56        local f2 = [[
     57 
     58  common line
     59  <<<<<<< HEAD
     60      AAA
     61      AAA
     62      AAA
     63  =======
     64      BBB
     65      BBB
     66      BBB
     67  >>>>>>> branch1
     68      ]]
     69        local f3 = [[
     70 
     71  common line
     72      BBB
     73      BBB
     74      BBB
     75      ]]
     76 
     77        write_file(fname, f1, false)
     78        write_file(fname_2, f2, false)
     79        write_file(fname_3, f3, false)
     80        reread()
     81      end)
     82 
     83      it('get from window 1', function()
     84        feed('1<c-w>w')
     85        feed(':2,6diffget screen-1.2<cr>')
     86        screen:expect([[
     87      {7:  }{8:  1 }^                           {7:  }{8:  1 }                          {7:  }{8:  1 }                           |
     88      {7:  }{8:  2 }common line                {7:  }{8:  2 }common line               {7:  }{8:  2 }common line                |
     89      {7:  }{8:  3 }{22:<<<<<<< HEAD               }{7:  }{8:  3 }{22:<<<<<<< HEAD              }{7:  }{8:    }{23:---------------------------}|
     90      {7:  }{8:  4 }    AAA                    {7:  }{8:  4 }    AAA                   {7:  }{8:  3 }    AAA                    |
     91      {7:  }{8:  5 }    AAA                    {7:  }{8:  5 }    AAA                   {7:  }{8:  4 }    AAA                    |
     92      {7:  }{8:  6 }    AAA                    {7:  }{8:  6 }    AAA                   {7:  }{8:  5 }    AAA                    |
     93      {7:  }{8:  7 }{22:=======                    }{7:  }{8:  7 }{22:=======                   }{7:  }{8:    }{23:---------------------------}|
     94      {7:  }{8:  8 }{22:    BBB                    }{7:  }{8:  8 }{22:    BBB                   }{7:  }{8:    }{23:---------------------------}|
     95      {7:  }{8:  9 }{22:    BBB                    }{7:  }{8:  9 }{22:    BBB                   }{7:  }{8:    }{23:---------------------------}|
     96      {7:  }{8: 10 }{22:    BBB                    }{7:  }{8: 10 }{22:    BBB                   }{7:  }{8:    }{23:---------------------------}|
     97      {7:  }{8: 11 }{22:>>>>>>> branch1            }{7:  }{8: 11 }{22:>>>>>>> branch1           }{7:  }{8:    }{23:---------------------------}|
     98      {1:~                                }{1:~                               }{1:~                                }|*3
     99      {3:<-functional-diff-screen-1.3 [+]  }{2:<est-functional-diff-screen-1.2  Xtest-functional-diff-screen-1   }|
    100      :2,6diffget screen-1.2                                                                              |
    101      ]])
    102      end)
    103 
    104      it('get from window 2', function()
    105        feed('2<c-w>w')
    106        feed(':5,7diffget screen-1.3<cr>')
    107        screen:expect([[
    108      {7:  }{8:  1 }                           {7:  }{8:  1 }^                          {7:  }{8:  1 }                           |
    109      {7:  }{8:  2 }common line                {7:  }{8:  2 }common line               {7:  }{8:  2 }common line                |
    110      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  3 }{22:<<<<<<< HEAD              }│{7:  }{8:    }{23:---------------------------}|
    111      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  4 }{22:    AAA                   }│{7:  }{8:  3 }{22:    AAA                    }|
    112      {7:  }{8:  3 }{22:    BBB                    }{7:  }{8:  5 }{22:    BBB                   }{7:  }{8:    }{23:---------------------------}|
    113      {7:  }{8:  4 }{4:    }{27:BBB}{4:                    }{7:  }{8:  6 }{4:    }{27:BBB}{4:                   }{7:  }{8:  4 }{4:    }{27:AAA}{4:                    }|
    114      {7:  }{8:  5 }{4:    }{27:BBB}{4:                    }{7:  }{8:  7 }{4:    }{27:BBB}{4:                   }{7:  }{8:  5 }{4:    }{27:AAA}{4:                    }|
    115      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  8 }{22:>>>>>>> branch1           }│{7:  }{8:    }{23:---------------------------}|
    116      {1:~                                }{1:~                               }{1:~                                }|*6
    117      {2:Xtest-functional-diff-screen-1.3  }{3:<functional-diff-screen-1.2 [+]  }{2:Xtest-functional-diff-screen-1   }|
    118      :5,7diffget screen-1.3                                                                              |
    119      ]])
    120      end)
    121 
    122      it('get from window 3', function()
    123        feed('3<c-w>w')
    124        feed(':5,6diffget screen-1.2<cr>')
    125        screen:expect([[
    126      {7:  }{8:  1 }                           {7:  }{8:  1 }                          {7:  }{8:  1 }^                           |
    127      {7:  }{8:  2 }common line                {7:  }{8:  2 }common line               {7:  }{8:  2 }common line                |
    128      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  3 }{22:<<<<<<< HEAD              }│{7:  }{8:    }{23:---------------------------}|
    129      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  4 }{22:    AAA                   }│{7:  }{8:  3 }{22:    AAA                    }|
    130      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  5 }{22:    AAA                   }│{7:  }{8:  4 }{22:    AAA                    }|
    131      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  6 }{22:    AAA                   }│{7:  }{8:  5 }{22:    AAA                    }|
    132      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  7 }{22:=======                   }│{7:  }{8:  6 }{22:=======                    }|
    133      {7:  }{8:  3 }    BBB                    {7:  }{8:  8 }    BBB                   {7:  }{8:  7 }    BBB                    |
    134      {7:  }{8:  4 }    BBB                    {7:  }{8:  9 }    BBB                   {7:  }{8:  8 }    BBB                    |
    135      {7:  }{8:  5 }    BBB                    {7:  }{8: 10 }    BBB                   {7:  }{8:  9 }    BBB                    |
    136      {7:  }{8:    }{23:---------------------------}│{7:  }{8: 11 }{22:>>>>>>> branch1           }│{7:  }{8: 10 }{22:>>>>>>> branch1            }|
    137      {1:~                                }{1:~                               }{1:~                                }|*3
    138      {2:Xtest-functional-diff-screen-1.3  <est-functional-diff-screen-1.2  }{3:<st-functional-diff-screen-1 [+] }|
    139      :5,6diffget screen-1.2                                                                              |
    140      ]])
    141      end)
    142 
    143      it('put from window 2 - part', function()
    144        feed('2<c-w>w')
    145        feed(':6,8diffput screen-1<cr>')
    146        screen:expect([[
    147      {7:  }{8:  1 }                           {7:  }{8:  1 }^                          {7:  }{8:  1 }                           |
    148      {7:  }{8:  2 }common line                {7:  }{8:  2 }common line               {7:  }{8:  2 }common line                |
    149      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  3 }{22:<<<<<<< HEAD              }│{7:  }{8:    }{23:---------------------------}|
    150      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  4 }{22:    AAA                   }│{7:  }{8:  3 }{22:    AAA                    }|
    151      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  5 }{22:    AAA                   }│{7:  }{8:  4 }{22:    AAA                    }|
    152      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  6 }{22:    AAA                   }│{7:  }{8:  5 }{22:    AAA                    }|
    153      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  7 }{22:=======                   }│{7:  }{8:  6 }{22:=======                    }|
    154      {7:  }{8:  3 }{22:    BBB                    }{7:  }{8:  8 }{22:    BBB                   }{7:  }{8:    }{23:---------------------------}|
    155      {7:  }{8:  4 }{22:    BBB                    }{7:  }{8:  9 }{22:    BBB                   }{7:  }{8:    }{23:---------------------------}|
    156      {7:  }{8:  5 }    BBB                    {7:  }{8: 10 }    BBB                   {7:  }{8:  7 }    BBB                    |
    157      {7:  }{8:    }{23:---------------------------}│{7:  }{8: 11 }{22:>>>>>>> branch1           }│{7:  }{8:    }{23:---------------------------}|
    158      {1:~                                }{1:~                               }{1:~                                }|*3
    159      {2:Xtest-functional-diff-screen-1.3  }{3:<est-functional-diff-screen-1.2  }{2:<st-functional-diff-screen-1 [+] }|
    160      :6,8diffput screen-1                                                                                |
    161      ]])
    162      end)
    163 
    164      it('put from window 2 - part to end', function()
    165        feed('2<c-w>w')
    166        feed(':6,11diffput screen-1<cr>')
    167        screen:expect([[
    168      {7:  }{8:  1 }                           {7:  }{8:  1 }^                          {7:  }{8:  1 }                           |
    169      {7:  }{8:  2 }common line                {7:  }{8:  2 }common line               {7:  }{8:  2 }common line                |
    170      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  3 }{22:<<<<<<< HEAD              }│{7:  }{8:    }{23:---------------------------}|
    171      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  4 }{22:    AAA                   }│{7:  }{8:  3 }{22:    AAA                    }|
    172      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  5 }{22:    AAA                   }│{7:  }{8:  4 }{22:    AAA                    }|
    173      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  6 }{22:    AAA                   }│{7:  }{8:  5 }{22:    AAA                    }|
    174      {7:  }{8:    }{23:---------------------------}│{7:  }{8:  7 }{22:=======                   }│{7:  }{8:  6 }{22:=======                    }|
    175      {7:  }{8:  3 }    BBB                    {7:  }{8:  8 }    BBB                   {7:  }{8:  7 }    BBB                    |
    176      {7:  }{8:  4 }    BBB                    {7:  }{8:  9 }    BBB                   {7:  }{8:  8 }    BBB                    |
    177      {7:  }{8:  5 }    BBB                    {7:  }{8: 10 }    BBB                   {7:  }{8:  9 }    BBB                    |
    178      {7:  }{8:    }{23:---------------------------}│{7:  }{8: 11 }{22:>>>>>>> branch1           }│{7:  }{8: 10 }{22:>>>>>>> branch1            }|
    179      {1:~                                }{1:~                               }{1:~                                }|*3
    180      {2:Xtest-functional-diff-screen-1.3  }{3:<est-functional-diff-screen-1.2  }{2:<st-functional-diff-screen-1 [+] }|
    181      :6,11diffput screen-1                                                                               |
    182      ]])
    183      end)
    184    end
    185  )
    186 end)
    187 
    188 describe('Diff mode screen with 2 diffs open', function()
    189  local fname = 'Xtest-functional-diff-screen-1'
    190  local fname_2 = fname .. '.2'
    191  local screen
    192 
    193  local reread = function()
    194    feed(':e<cr><c-w>w:e<cr><c-w>w:e<cr><c-w>w')
    195  end
    196 
    197  setup(function()
    198    clear()
    199    os.remove(fname)
    200    os.remove(fname_2)
    201  end)
    202 
    203  teardown(function()
    204    os.remove(fname)
    205    os.remove(fname_2)
    206  end)
    207 
    208  before_each(function()
    209    clear()
    210    feed(':e ' .. fname .. '<cr>')
    211    feed(':vnew ' .. fname_2 .. '<cr>')
    212    feed(':windo diffthis<cr>')
    213 
    214    screen = Screen.new(100, 20)
    215    feed('<c-w>=')
    216    feed(':windo set nu!<cr>')
    217  end)
    218 
    219  describe('setup a diff with 2 files and set linematch:30', function()
    220    before_each(function()
    221      feed(':set diffopt=internal,filler,linematch:30<cr>')
    222      local f1 = [[
    223 
    224 common line
    225 common line
    226 
    227 DEFabc
    228 xyz
    229 xyz
    230 xyz
    231 DEFabc
    232 DEFabc
    233 DEFabc
    234 common line
    235 common line
    236 DEF
    237 common line
    238 DEF
    239 something
    240      ]]
    241      local f2 = [[
    242 
    243 common line
    244 common line
    245 
    246 ABCabc
    247 ABCabc
    248 ABCabc
    249 ABCabc
    250 common line
    251 common line
    252 common line
    253 something
    254      ]]
    255      write_file(fname, f1, false)
    256      write_file(fname_2, f2, false)
    257      reread()
    258    end)
    259 
    260    it('get from window 1 from line 5 to 9', function()
    261      feed('1<c-w>w')
    262      feed(':5,9diffget<cr>')
    263      screen:expect([[
    264      {7:+ }{8:  1 }{13:^+--  7 lines: common line··················}{7:+ }{8:  1 }{13:+--  7 lines: common line···················}|
    265      {7:  }{8:  8 }xyz                                        {7:  }{8:  8 }xyz                                         |
    266      {7:  }{8:  9 }DEFabc                                     {7:  }{8:  9 }DEFabc                                      |
    267      {7:  }{8: 10 }DEFabc                                     {7:  }{8: 10 }DEFabc                                      |
    268      {7:  }{8: 11 }DEFabc                                     {7:  }{8: 11 }DEFabc                                      |
    269      {7:  }{8: 12 }common line                                {7:  }{8: 12 }common line                                 |
    270      {7:  }{8: 13 }common line                                {7:  }{8: 13 }common line                                 |
    271      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 14 }{22:DEF                                         }|
    272      {7:  }{8: 14 }common line                                {7:  }{8: 15 }common line                                 |
    273      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 16 }{22:DEF                                         }|
    274      {7:  }{8: 15 }something                                  {7:  }{8: 17 }something                                   |
    275      {1:~                                                }{1:~                                                 }|*7
    276      {3:Xtest-functional-diff-screen-1.2 [+]              }{2:Xtest-functional-diff-screen-1                    }|
    277      :5,9diffget                                                                                         |
    278      ]])
    279    end)
    280    it('get from window 2 from line 5 to 10', function()
    281      feed('2<c-w>w')
    282      feed(':5,10diffget<cr>')
    283      screen:expect([[
    284      {7:- }{8:  1 }                                           {7:- }{8:  1 }^                                            |
    285      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    286      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    287      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    288      {7:  }{8:  5 }ABCabc                                     {7:  }{8:  5 }ABCabc                                      |
    289      {7:  }{8:  6 }ABCabc                                     {7:  }{8:  6 }ABCabc                                      |
    290      {7:  }{8:  7 }ABCabc                                     {7:  }{8:  7 }ABCabc                                      |
    291      {7:  }{8:  8 }{27:ABC}{4:abc                                     }{7:  }{8:  8 }{27:DEF}{4:abc                                      }|
    292      {7:  }{8:  9 }common line                                {7:  }{8:  9 }common line                                 |
    293      {7:  }{8: 10 }common line                                {7:  }{8: 10 }common line                                 |
    294      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 11 }{22:DEF                                         }|
    295      {7:  }{8: 11 }common line                                {7:  }{8: 12 }common line                                 |
    296      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 13 }{22:DEF                                         }|
    297      {7:  }{8: 12 }something                                  {7:  }{8: 14 }something                                   |
    298      {1:~                                                }{1:~                                                 }|*4
    299      {2:Xtest-functional-diff-screen-1.2                  }{3:Xtest-functional-diff-screen-1 [+]                }|
    300      :5,10diffget                                                                                        |
    301      ]])
    302    end)
    303    it('get all from window 2', function()
    304      feed('2<c-w>w')
    305      feed(':4,17diffget<cr>')
    306      screen:expect([[
    307      {7:+ }{8:  1 }{13:+-- 12 lines: common line··················}{7:+ }{8:  1 }{13:^+-- 12 lines: common line···················}|
    308      {1:~                                                }{1:~                                                 }|*17
    309      {2:Xtest-functional-diff-screen-1.2                  }{3:Xtest-functional-diff-screen-1 [+]                }|
    310      :4,17diffget                                                                                        |
    311      ]])
    312    end)
    313    it('get all from window 1', function()
    314      feed('1<c-w>w')
    315      feed(':4,12diffget<cr>')
    316      screen:expect([[
    317      {7:+ }{8:  1 }{13:^+-- 17 lines: common line··················}{7:+ }{8:  1 }{13:+-- 17 lines: common line···················}|
    318      {1:~                                                }{1:~                                                 }|*17
    319      {3:Xtest-functional-diff-screen-1.2 [+]              }{2:Xtest-functional-diff-screen-1                    }|
    320      :4,12diffget                                                                                        |
    321      ]])
    322    end)
    323    it('get from window 1 using do 1 line 5', function()
    324      feed('1<c-w>w')
    325      feed('5gg')
    326      feed('do')
    327      screen:expect([[
    328      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    329      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    330      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    331      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    332      {7:  }{8:  5 }^DEFabc                                     {7:  }{8:  5 }DEFabc                                      |
    333      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  6 }{22:xyz                                         }|
    334      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  7 }{22:xyz                                         }|
    335      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  8 }{22:xyz                                         }|
    336      {7:  }{8:  6 }{27:ABC}{4:abc                                     }{7:  }{8:  9 }{27:DEF}{4:abc                                      }|
    337      {7:  }{8:  7 }{27:ABC}{4:abc                                     }{7:  }{8: 10 }{27:DEF}{4:abc                                      }|
    338      {7:  }{8:  8 }{27:ABC}{4:abc                                     }{7:  }{8: 11 }{27:DEF}{4:abc                                      }|
    339      {7:  }{8:  9 }common line                                {7:  }{8: 12 }common line                                 |
    340      {7:  }{8: 10 }common line                                {7:  }{8: 13 }common line                                 |
    341      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 14 }{22:DEF                                         }|
    342      {7:  }{8: 11 }common line                                {7:  }{8: 15 }common line                                 |
    343      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 16 }{22:DEF                                         }|
    344      {7:  }{8: 12 }something                                  {7:  }{8: 17 }something                                   |
    345      {1:~                                                }{1:~                                                 }|
    346      {3:Xtest-functional-diff-screen-1.2 [+]              }{2:Xtest-functional-diff-screen-1                    }|
    347      :e                                                                                                  |
    348      ]])
    349    end)
    350    it('get from window 1 using do 2 line 6', function()
    351      feed('1<c-w>w')
    352      feed('6gg')
    353      feed('do')
    354      screen:expect([[
    355      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    356      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    357      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    358      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    359      {7:  }{8:  5 }{27:ABC}{4:abc                                     }{7:  }{8:  5 }{27:DEF}{4:abc                                      }|
    360      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  6 }{22:xyz                                         }|
    361      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  7 }{22:xyz                                         }|
    362      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  8 }{22:xyz                                         }|
    363      {7:  }{8:  6 }^DEFabc                                     {7:  }{8:  9 }DEFabc                                      |
    364      {7:  }{8:  7 }DEFabc                                     {7:  }{8: 10 }DEFabc                                      |
    365      {7:  }{8:  8 }DEFabc                                     {7:  }{8: 11 }DEFabc                                      |
    366      {7:  }{8:  9 }common line                                {7:  }{8: 12 }common line                                 |
    367      {7:  }{8: 10 }common line                                {7:  }{8: 13 }common line                                 |
    368      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 14 }{22:DEF                                         }|
    369      {7:  }{8: 11 }common line                                {7:  }{8: 15 }common line                                 |
    370      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 16 }{22:DEF                                         }|
    371      {7:  }{8: 12 }something                                  {7:  }{8: 17 }something                                   |
    372      {1:~                                                }{1:~                                                 }|
    373      {3:Xtest-functional-diff-screen-1.2 [+]              }{2:Xtest-functional-diff-screen-1                    }|
    374      :e                                                                                                  |
    375      ]])
    376    end)
    377    it('get from window 1 using do 2 line 7', function()
    378      feed('1<c-w>w')
    379      feed('7gg')
    380      feed('do')
    381      screen:expect([[
    382      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    383      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    384      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    385      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    386      {7:  }{8:  5 }{27:ABC}{4:abc                                     }{7:  }{8:  5 }{27:DEF}{4:abc                                      }|
    387      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  6 }{22:xyz                                         }|
    388      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  7 }{22:xyz                                         }|
    389      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  8 }{22:xyz                                         }|
    390      {7:  }{8:  6 }DEFabc                                     {7:  }{8:  9 }DEFabc                                      |
    391      {7:  }{8:  7 }^DEFabc                                     {7:  }{8: 10 }DEFabc                                      |
    392      {7:  }{8:  8 }DEFabc                                     {7:  }{8: 11 }DEFabc                                      |
    393      {7:  }{8:  9 }common line                                {7:  }{8: 12 }common line                                 |
    394      {7:  }{8: 10 }common line                                {7:  }{8: 13 }common line                                 |
    395      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 14 }{22:DEF                                         }|
    396      {7:  }{8: 11 }common line                                {7:  }{8: 15 }common line                                 |
    397      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 16 }{22:DEF                                         }|
    398      {7:  }{8: 12 }something                                  {7:  }{8: 17 }something                                   |
    399      {1:~                                                }{1:~                                                 }|
    400      {3:Xtest-functional-diff-screen-1.2 [+]              }{2:Xtest-functional-diff-screen-1                    }|
    401      :e                                                                                                  |
    402      ]])
    403    end)
    404    it('get from window 1 using do 2 line 11', function()
    405      feed('1<c-w>w')
    406      feed('11gg')
    407      feed('do')
    408      screen:expect([[
    409      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    410      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    411      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    412      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    413      {7:  }{8:  5 }{27:ABC}{4:abc                                     }{7:  }{8:  5 }{27:DEF}{4:abc                                      }|
    414      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  6 }{22:xyz                                         }|
    415      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  7 }{22:xyz                                         }|
    416      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  8 }{22:xyz                                         }|
    417      {7:  }{8:  6 }{27:ABC}{4:abc                                     }{7:  }{8:  9 }{27:DEF}{4:abc                                      }|
    418      {7:  }{8:  7 }{27:ABC}{4:abc                                     }{7:  }{8: 10 }{27:DEF}{4:abc                                      }|
    419      {7:  }{8:  8 }{27:ABC}{4:abc                                     }{7:  }{8: 11 }{27:DEF}{4:abc                                      }|
    420      {7:  }{8:  9 }common line                                {7:  }{8: 12 }common line                                 |
    421      {7:  }{8: 10 }common line                                {7:  }{8: 13 }common line                                 |
    422      {7:  }{8: 11 }DEF                                        {7:  }{8: 14 }DEF                                         |
    423      {7:  }{8: 12 }^common line                                {7:  }{8: 15 }common line                                 |
    424      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 16 }{22:DEF                                         }|
    425      {7:  }{8: 13 }something                                  {7:  }{8: 17 }something                                   |
    426      {1:~                                                }{1:~                                                 }|
    427      {3:Xtest-functional-diff-screen-1.2 [+]              }{2:Xtest-functional-diff-screen-1                    }|
    428      :e                                                                                                  |
    429      ]])
    430    end)
    431    it('get from window 1 using do 2 line 12', function()
    432      feed('1<c-w>w')
    433      feed('12gg')
    434      feed('do')
    435      screen:expect([[
    436      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    437      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    438      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    439      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    440      {7:  }{8:  5 }{27:ABC}{4:abc                                     }{7:  }{8:  5 }{27:DEF}{4:abc                                      }|
    441      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  6 }{22:xyz                                         }|
    442      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  7 }{22:xyz                                         }|
    443      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  8 }{22:xyz                                         }|
    444      {7:  }{8:  6 }{27:ABC}{4:abc                                     }{7:  }{8:  9 }{27:DEF}{4:abc                                      }|
    445      {7:  }{8:  7 }{27:ABC}{4:abc                                     }{7:  }{8: 10 }{27:DEF}{4:abc                                      }|
    446      {7:  }{8:  8 }{27:ABC}{4:abc                                     }{7:  }{8: 11 }{27:DEF}{4:abc                                      }|
    447      {7:  }{8:  9 }common line                                {7:  }{8: 12 }common line                                 |
    448      {7:  }{8: 10 }common line                                {7:  }{8: 13 }common line                                 |
    449      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 14 }{22:DEF                                         }|
    450      {7:  }{8: 11 }common line                                {7:  }{8: 15 }common line                                 |
    451      {7:  }{8: 12 }DEF                                        {7:  }{8: 16 }DEF                                         |
    452      {7:  }{8: 13 }^something                                  {7:  }{8: 17 }something                                   |
    453      {1:~                                                }{1:~                                                 }|
    454      {3:Xtest-functional-diff-screen-1.2 [+]              }{2:Xtest-functional-diff-screen-1                    }|
    455      :e                                                                                                  |
    456      ]])
    457    end)
    458    it('put from window 1 using dp 1 line 5', function()
    459      feed('1<c-w>w')
    460      feed('5gg')
    461      feed('dp')
    462      screen:expect([[
    463      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    464      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    465      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    466      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    467      {7:  }{8:  5 }^ABCabc                                     {7:  }{8:  5 }ABCabc                                      |
    468      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  6 }{22:xyz                                         }|
    469      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  7 }{22:xyz                                         }|
    470      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  8 }{22:xyz                                         }|
    471      {7:  }{8:  6 }{27:ABC}{4:abc                                     }{7:  }{8:  9 }{27:DEF}{4:abc                                      }|
    472      {7:  }{8:  7 }{27:ABC}{4:abc                                     }{7:  }{8: 10 }{27:DEF}{4:abc                                      }|
    473      {7:  }{8:  8 }{27:ABC}{4:abc                                     }{7:  }{8: 11 }{27:DEF}{4:abc                                      }|
    474      {7:  }{8:  9 }common line                                {7:  }{8: 12 }common line                                 |
    475      {7:  }{8: 10 }common line                                {7:  }{8: 13 }common line                                 |
    476      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 14 }{22:DEF                                         }|
    477      {7:  }{8: 11 }common line                                {7:  }{8: 15 }common line                                 |
    478      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 16 }{22:DEF                                         }|
    479      {7:  }{8: 12 }something                                  {7:  }{8: 17 }something                                   |
    480      {1:~                                                }{1:~                                                 }|
    481      {3:Xtest-functional-diff-screen-1.2                  }{2:Xtest-functional-diff-screen-1 [+]                }|
    482      :e                                                                                                  |
    483      ]])
    484    end)
    485    it('put from window 1 using dp 2 line 6', function()
    486      feed('1<c-w>w')
    487      feed('6gg')
    488      feed('dp')
    489      screen:expect([[
    490      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    491      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    492      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    493      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    494      {7:  }{8:  5 }{27:ABC}{4:abc                                     }{7:  }{8:  5 }{27:DEF}{4:abc                                      }|
    495      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  6 }{22:xyz                                         }|
    496      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  7 }{22:xyz                                         }|
    497      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  8 }{22:xyz                                         }|
    498      {7:  }{8:  6 }^ABCabc                                     {7:  }{8:  9 }ABCabc                                      |
    499      {7:  }{8:  7 }ABCabc                                     {7:  }{8: 10 }ABCabc                                      |
    500      {7:  }{8:  8 }ABCabc                                     {7:  }{8: 11 }ABCabc                                      |
    501      {7:  }{8:  9 }common line                                {7:  }{8: 12 }common line                                 |
    502      {7:  }{8: 10 }common line                                {7:  }{8: 13 }common line                                 |
    503      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 14 }{22:DEF                                         }|
    504      {7:  }{8: 11 }common line                                {7:  }{8: 15 }common line                                 |
    505      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 16 }{22:DEF                                         }|
    506      {7:  }{8: 12 }something                                  {7:  }{8: 17 }something                                   |
    507      {1:~                                                }{1:~                                                 }|
    508      {3:Xtest-functional-diff-screen-1.2                  }{2:Xtest-functional-diff-screen-1 [+]                }|
    509      :e                                                                                                  |
    510      ]])
    511    end)
    512    it('put from window 1 using dp 2 line 7', function()
    513      feed('1<c-w>w')
    514      feed('7gg')
    515      feed('dp')
    516      screen:expect([[
    517      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    518      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    519      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    520      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    521      {7:  }{8:  5 }{27:ABC}{4:abc                                     }{7:  }{8:  5 }{27:DEF}{4:abc                                      }|
    522      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  6 }{22:xyz                                         }|
    523      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  7 }{22:xyz                                         }|
    524      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  8 }{22:xyz                                         }|
    525      {7:  }{8:  6 }ABCabc                                     {7:  }{8:  9 }ABCabc                                      |
    526      {7:  }{8:  7 }^ABCabc                                     {7:  }{8: 10 }ABCabc                                      |
    527      {7:  }{8:  8 }ABCabc                                     {7:  }{8: 11 }ABCabc                                      |
    528      {7:  }{8:  9 }common line                                {7:  }{8: 12 }common line                                 |
    529      {7:  }{8: 10 }common line                                {7:  }{8: 13 }common line                                 |
    530      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 14 }{22:DEF                                         }|
    531      {7:  }{8: 11 }common line                                {7:  }{8: 15 }common line                                 |
    532      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 16 }{22:DEF                                         }|
    533      {7:  }{8: 12 }something                                  {7:  }{8: 17 }something                                   |
    534      {1:~                                                }{1:~                                                 }|
    535      {3:Xtest-functional-diff-screen-1.2                  }{2:Xtest-functional-diff-screen-1 [+]                }|
    536      :e                                                                                                  |
    537      ]])
    538    end)
    539    it('put from window 1 using dp 2 line 11', function()
    540      feed('1<c-w>w')
    541      feed('11gg')
    542      feed('dp')
    543      screen:expect([[
    544      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    545      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    546      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    547      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    548      {7:  }{8:  5 }{27:ABC}{4:abc                                     }{7:  }{8:  5 }{27:DEF}{4:abc                                      }|
    549      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  6 }{22:xyz                                         }|
    550      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  7 }{22:xyz                                         }|
    551      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  8 }{22:xyz                                         }|
    552      {7:  }{8:  6 }{27:ABC}{4:abc                                     }{7:  }{8:  9 }{27:DEF}{4:abc                                      }|
    553      {7:  }{8:  7 }{27:ABC}{4:abc                                     }{7:  }{8: 10 }{27:DEF}{4:abc                                      }|
    554      {7:  }{8:  8 }{27:ABC}{4:abc                                     }{7:  }{8: 11 }{27:DEF}{4:abc                                      }|
    555      {7:  }{8:  9 }common line                                {7:  }{8: 12 }common line                                 |
    556      {7:  }{8: 10 }common line                                {7:  }{8: 13 }common line                                 |
    557      {7:  }{8: 11 }^common line                                {7:  }{8: 14 }common line                                 |
    558      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 15 }{22:DEF                                         }|
    559      {7:  }{8: 12 }something                                  {7:  }{8: 16 }something                                   |
    560      {1:~                                                }{1:~                                                 }|*2
    561      {3:Xtest-functional-diff-screen-1.2                  }{2:Xtest-functional-diff-screen-1 [+]                }|
    562      :e                                                                                                  |
    563      ]])
    564    end)
    565    it('put from window 1 using dp 2 line 12', function()
    566      feed('1<c-w>w')
    567      feed('12gg')
    568      feed('dp')
    569      screen:expect([[
    570      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    571      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    572      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    573      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    574      {7:  }{8:  5 }{27:ABC}{4:abc                                     }{7:  }{8:  5 }{27:DEF}{4:abc                                      }|
    575      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  6 }{22:xyz                                         }|
    576      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  7 }{22:xyz                                         }|
    577      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  8 }{22:xyz                                         }|
    578      {7:  }{8:  6 }{27:ABC}{4:abc                                     }{7:  }{8:  9 }{27:DEF}{4:abc                                      }|
    579      {7:  }{8:  7 }{27:ABC}{4:abc                                     }{7:  }{8: 10 }{27:DEF}{4:abc                                      }|
    580      {7:  }{8:  8 }{27:ABC}{4:abc                                     }{7:  }{8: 11 }{27:DEF}{4:abc                                      }|
    581      {7:  }{8:  9 }common line                                {7:  }{8: 12 }common line                                 |
    582      {7:  }{8: 10 }common line                                {7:  }{8: 13 }common line                                 |
    583      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 14 }{22:DEF                                         }|
    584      {7:  }{8: 11 }common line                                {7:  }{8: 15 }common line                                 |
    585      {7:  }{8: 12 }^something                                  {7:  }{8: 16 }something                                   |
    586      {1:~                                                }{1:~                                                 }|*2
    587      {3:Xtest-functional-diff-screen-1.2                  }{2:Xtest-functional-diff-screen-1 [+]                }|
    588      :e                                                                                                  |
    589      ]])
    590    end)
    591    it('put from window 2 using dp line 6', function()
    592      feed('2<c-w>w')
    593      feed('6gg')
    594      feed('dp')
    595      screen:expect([[
    596      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    597      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    598      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    599      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    600      {7:  }{8:  5 }{27:ABC}{4:abc                                     }{7:  }{8:  5 }{27:DEF}{4:abc                                      }|
    601      {7:  }{8:  6 }xyz                                        {7:  }{8:  6 }^xyz                                         |
    602      {7:  }{8:  7 }xyz                                        {7:  }{8:  7 }xyz                                         |
    603      {7:  }{8:  8 }xyz                                        {7:  }{8:  8 }xyz                                         |
    604      {7:  }{8:  9 }{27:ABC}{4:abc                                     }{7:  }{8:  9 }{27:DEF}{4:abc                                      }|
    605      {7:  }{8: 10 }{27:ABC}{4:abc                                     }{7:  }{8: 10 }{27:DEF}{4:abc                                      }|
    606      {7:  }{8: 11 }{27:ABC}{4:abc                                     }{7:  }{8: 11 }{27:DEF}{4:abc                                      }|
    607      {7:  }{8: 12 }common line                                {7:  }{8: 12 }common line                                 |
    608      {7:  }{8: 13 }common line                                {7:  }{8: 13 }common line                                 |
    609      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 14 }{22:DEF                                         }|
    610      {7:  }{8: 14 }common line                                {7:  }{8: 15 }common line                                 |
    611      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 16 }{22:DEF                                         }|
    612      {7:  }{8: 15 }something                                  {7:  }{8: 17 }something                                   |
    613      {1:~                                                }{1:~                                                 }|
    614      {2:Xtest-functional-diff-screen-1.2 [+]              }{3:Xtest-functional-diff-screen-1                    }|
    615      :e                                                                                                  |
    616      ]])
    617    end)
    618    it('put from window 2 using dp line 8', function()
    619      feed('2<c-w>w')
    620      feed('8gg')
    621      feed('dp')
    622      screen:expect([[
    623      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    624      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    625      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    626      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    627      {7:  }{8:  5 }{27:ABC}{4:abc                                     }{7:  }{8:  5 }{27:DEF}{4:abc                                      }|
    628      {7:  }{8:  6 }xyz                                        {7:  }{8:  6 }xyz                                         |
    629      {7:  }{8:  7 }xyz                                        {7:  }{8:  7 }xyz                                         |
    630      {7:  }{8:  8 }xyz                                        {7:  }{8:  8 }^xyz                                         |
    631      {7:  }{8:  9 }{27:ABC}{4:abc                                     }{7:  }{8:  9 }{27:DEF}{4:abc                                      }|
    632      {7:  }{8: 10 }{27:ABC}{4:abc                                     }{7:  }{8: 10 }{27:DEF}{4:abc                                      }|
    633      {7:  }{8: 11 }{27:ABC}{4:abc                                     }{7:  }{8: 11 }{27:DEF}{4:abc                                      }|
    634      {7:  }{8: 12 }common line                                {7:  }{8: 12 }common line                                 |
    635      {7:  }{8: 13 }common line                                {7:  }{8: 13 }common line                                 |
    636      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 14 }{22:DEF                                         }|
    637      {7:  }{8: 14 }common line                                {7:  }{8: 15 }common line                                 |
    638      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 16 }{22:DEF                                         }|
    639      {7:  }{8: 15 }something                                  {7:  }{8: 17 }something                                   |
    640      {1:~                                                }{1:~                                                 }|
    641      {2:Xtest-functional-diff-screen-1.2 [+]              }{3:Xtest-functional-diff-screen-1                    }|
    642      :e                                                                                                  |
    643      ]])
    644    end)
    645    it('put from window 2 using dp line 9', function()
    646      feed('2<c-w>w')
    647      feed('9gg')
    648      feed('dp')
    649      screen:expect([[
    650      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    651      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    652      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    653      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    654      {7:  }{8:  5 }{27:ABC}{4:abc                                     }{7:  }{8:  5 }{27:DEF}{4:abc                                      }|
    655      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  6 }{22:xyz                                         }|
    656      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  7 }{22:xyz                                         }|
    657      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  8 }{22:xyz                                         }|
    658      {7:  }{8:  6 }DEFabc                                     {7:  }{8:  9 }^DEFabc                                      |
    659      {7:  }{8:  7 }DEFabc                                     {7:  }{8: 10 }DEFabc                                      |
    660      {7:  }{8:  8 }DEFabc                                     {7:  }{8: 11 }DEFabc                                      |
    661      {7:  }{8:  9 }common line                                {7:  }{8: 12 }common line                                 |
    662      {7:  }{8: 10 }common line                                {7:  }{8: 13 }common line                                 |
    663      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 14 }{22:DEF                                         }|
    664      {7:  }{8: 11 }common line                                {7:  }{8: 15 }common line                                 |
    665      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 16 }{22:DEF                                         }|
    666      {7:  }{8: 12 }something                                  {7:  }{8: 17 }something                                   |
    667      {1:~                                                }{1:~                                                 }|
    668      {2:Xtest-functional-diff-screen-1.2 [+]              }{3:Xtest-functional-diff-screen-1                    }|
    669      :e                                                                                                  |
    670      ]])
    671    end)
    672    it('put from window 2 using dp line 17', function()
    673      feed('2<c-w>w')
    674      feed('17gg')
    675      feed('dp')
    676      screen:expect([[
    677      {7:  }{8:  1 }                                           {7:  }{8:  1 }                                            |
    678      {7:  }{8:  2 }common line                                {7:  }{8:  2 }common line                                 |
    679      {7:  }{8:  3 }common line                                {7:  }{8:  3 }common line                                 |
    680      {7:  }{8:  4 }                                           {7:  }{8:  4 }                                            |
    681      {7:  }{8:  5 }{27:ABC}{4:abc                                     }{7:  }{8:  5 }{27:DEF}{4:abc                                      }|
    682      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  6 }{22:xyz                                         }|
    683      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  7 }{22:xyz                                         }|
    684      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  8 }{22:xyz                                         }|
    685      {7:  }{8:  6 }{27:ABC}{4:abc                                     }{7:  }{8:  9 }{27:DEF}{4:abc                                      }|
    686      {7:  }{8:  7 }{27:ABC}{4:abc                                     }{7:  }{8: 10 }{27:DEF}{4:abc                                      }|
    687      {7:  }{8:  8 }{27:ABC}{4:abc                                     }{7:  }{8: 11 }{27:DEF}{4:abc                                      }|
    688      {7:  }{8:  9 }common line                                {7:  }{8: 12 }common line                                 |
    689      {7:  }{8: 10 }common line                                {7:  }{8: 13 }common line                                 |
    690      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8: 14 }{22:DEF                                         }|
    691      {7:  }{8: 11 }common line                                {7:  }{8: 15 }common line                                 |
    692      {7:  }{8: 12 }DEF                                        {7:  }{8: 16 }DEF                                         |
    693      {7:  }{8: 13 }something                                  {7:  }{8: 17 }^something                                   |
    694      {1:~                                                }{1:~                                                 }|
    695      {2:Xtest-functional-diff-screen-1.2 [+]              }{3:Xtest-functional-diff-screen-1                    }|
    696      :e                                                                                                  |
    697      ]])
    698    end)
    699  end)
    700  describe('setup a diff with 2 files and set linematch:30', function()
    701    before_each(function()
    702      feed(':set diffopt=internal,filler,linematch:30<cr>')
    703      local f1 = [[
    704 // abc d
    705 // d
    706 // d
    707      ]]
    708      local f2 = [[
    709 
    710 abc d
    711 d
    712      ]]
    713      write_file(fname, f1, false)
    714      write_file(fname_2, f2, false)
    715      reread()
    716    end)
    717 
    718    it('display results', function()
    719      screen:expect([[
    720      {7:  }{8:  1 }{22:^                                           }{7:  }{8:    }{23:--------------------------------------------}|
    721      {7:  }{8:  2 }{4:abc d                                      }{7:  }{8:  1 }{27:// }{4:abc d                                    }|
    722      {7:  }{8:  3 }{4:d                                          }{7:  }{8:  2 }{27:// }{4:d                                        }|
    723      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  3 }{22:// d                                        }|
    724      {1:~                                                }{1:~                                                 }|*14
    725      {3:Xtest-functional-diff-screen-1.2                  }{2:Xtest-functional-diff-screen-1                    }|
    726      :e                                                                                                  |
    727      ]])
    728    end)
    729  end)
    730  describe('setup a diff with 2 files and set linematch:30, with ignore white', function()
    731    before_each(function()
    732      feed(':set diffopt=internal,filler,linematch:30,iwhiteall<cr>')
    733      local f1 = [[
    734 void testFunction () {
    735  for (int i = 0; i < 10; i++) {
    736    for (int j = 0; j < 10; j++) {
    737    }
    738  }
    739 }
    740      ]]
    741      local f2 = [[
    742 void testFunction () {
    743  // for (int j = 0; j < 10; i++) {
    744  // }
    745 }
    746      ]]
    747      write_file(fname, f1, false)
    748      write_file(fname_2, f2, false)
    749      reread()
    750    end)
    751 
    752    it('display results', function()
    753      screen:expect([[
    754      {7:  }{8:  1 }^void testFunction () {                     {7:  }{8:  1 }void testFunction () {                      |
    755      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  2 }{22:  for (int i = 0; i < 10; i++) {            }|
    756      {7:  }{8:  2 }{4:  }{27:// for (int j = 0; j < 10; i}{4:++) {        }{7:  }{8:  3 }{4:    }{27:for (int j = 0; j < 10; j}{4:++) {          }|
    757      {7:  }{8:  3 }{4:  }{27:// }{4:}                                     }{7:  }{8:  4 }{4:    }                                       }|
    758      {7:  }{8:    }{23:-------------------------------------------}│{7:  }{8:  5 }{22:  }                                         }|
    759      {7:  }{8:  4 }}                                          {7:  }{8:  6 }}                                           |
    760      {1:~                                                }{1:~                                                 }|*12
    761      {3:Xtest-functional-diff-screen-1.2                  }{2:Xtest-functional-diff-screen-1                    }|
    762      :e                                                                                                  |
    763      ]])
    764    end)
    765  end)
    766  describe('a diff that would result in multiple groups before grouping optimization', function()
    767    before_each(function()
    768      feed(':set diffopt=internal,filler,linematch:30<cr>')
    769      local f1 = [[
    770 !A
    771 !B
    772 !C
    773      ]]
    774      local f2 = [[
    775 ?Z
    776 ?A
    777 ?B
    778 ?C
    779 ?A
    780 ?B
    781 ?B
    782 ?C
    783      ]]
    784      write_file(fname, f1, false)
    785      write_file(fname_2, f2, false)
    786      reread()
    787    end)
    788 
    789    it('display results', function()
    790      screen:expect([[
    791      {7:  }{8:  1 }{22:^?Z                                         }{7:  }{8:    }{23:--------------------------------------------}|
    792      {7:  }{8:  2 }{27:?}{4:A                                         }{7:  }{8:  1 }{27:!}{4:A                                          }|
    793      {7:  }{8:  3 }{27:?}{4:B                                         }{7:  }{8:  2 }{27:!}{4:B                                          }|
    794      {7:  }{8:  4 }{27:?}{4:C                                         }{7:  }{8:  3 }{27:!}{4:C                                          }|
    795      {7:  }{8:  5 }{22:?A                                         }{7:  }{8:    }{23:--------------------------------------------}|
    796      {7:  }{8:  6 }{22:?B                                         }{7:  }{8:    }{23:--------------------------------------------}|
    797      {7:  }{8:  7 }{22:?B                                         }{7:  }{8:    }{23:--------------------------------------------}|
    798      {7:  }{8:  8 }{22:?C                                         }{7:  }{8:    }{23:--------------------------------------------}|
    799      {1:~                                                }{1:~                                                 }|*10
    800      {3:Xtest-functional-diff-screen-1.2                  }{2:Xtest-functional-diff-screen-1                    }|
    801      :e                                                                                                  |
    802      ]])
    803    end)
    804  end)
    805  describe('a diff that would result in multiple groups before grouping optimization', function()
    806    before_each(function()
    807      feed(':set diffopt=internal,filler,linematch:30<cr>')
    808      local f1 = [[
    809 !A
    810 !B
    811 !C
    812      ]]
    813      local f2 = [[
    814 ?A
    815 ?Z
    816 ?B
    817 ?C
    818 ?A
    819 ?B
    820 ?C
    821 ?C
    822      ]]
    823      write_file(fname, f1, false)
    824      write_file(fname_2, f2, false)
    825      reread()
    826    end)
    827 
    828    it('display results', function()
    829      screen:expect([[
    830      {7:  }{8:  1 }{22:^?A                                         }{7:  }{8:    }{23:--------------------------------------------}|
    831      {7:  }{8:  2 }{22:?Z                                         }{7:  }{8:    }{23:--------------------------------------------}|
    832      {7:  }{8:  3 }{22:?B                                         }{7:  }{8:    }{23:--------------------------------------------}|
    833      {7:  }{8:  4 }{22:?C                                         }{7:  }{8:    }{23:--------------------------------------------}|
    834      {7:  }{8:  5 }{27:?}{4:A                                         }{7:  }{8:  1 }{27:!}{4:A                                          }|
    835      {7:  }{8:  6 }{27:?}{4:B                                         }{7:  }{8:  2 }{27:!}{4:B                                          }|
    836      {7:  }{8:  7 }{27:?}{4:C                                         }{7:  }{8:  3 }{27:!}{4:C                                          }|
    837      {7:  }{8:  8 }{22:?C                                         }{7:  }{8:    }{23:--------------------------------------------}|
    838      {1:~                                                }{1:~                                                 }|*10
    839      {3:Xtest-functional-diff-screen-1.2                  }{2:Xtest-functional-diff-screen-1                    }|
    840      :e                                                                                                  |
    841      ]])
    842    end)
    843  end)
    844  describe('setup a diff with 2 files and set linematch:10', function()
    845    before_each(function()
    846      feed(':set diffopt=internal,filler,linematch:10<cr>')
    847      local f1 = [[
    848 common line
    849 HIL
    850 
    851 aABCabc
    852 aABCabc
    853 aABCabc
    854 aABCabc
    855 common line
    856 HIL
    857 common line
    858 something
    859      ]]
    860      local f2 = [[
    861 common line
    862 DEF
    863 GHI
    864 something
    865 
    866 aDEFabc
    867 xyz
    868 xyz
    869 xyz
    870 aDEFabc
    871 aDEFabc
    872 aDEFabc
    873 common line
    874 DEF
    875 GHI
    876 something else
    877 common line
    878 something
    879      ]]
    880      write_file(fname, f1, false)
    881      write_file(fname_2, f2, false)
    882      reread()
    883    end)
    884 
    885    it(
    886      'enable linematch for the longest diff block by increasing the number argument passed to linematch',
    887      function()
    888        feed('1<c-w>w')
    889        -- linematch is disabled for the longest diff because it's combined line length is over 10
    890        screen:expect([[
    891      {7:  }{8:  1 }^common line                                {7:  }{8:  1 }common line                                 |
    892      {7:  }{8:  2 }{22:DEF                                        }{7:  }{8:    }{23:--------------------------------------------}|
    893      {7:  }{8:  3 }{27:GHI}{4:                                        }{7:  }{8:  2 }{27:HIL}{4:                                         }|
    894      {7:  }{8:  4 }{22:something                                  }{7:  }{8:    }{23:--------------------------------------------}|
    895      {7:  }{8:  5 }                                           {7:  }{8:  3 }                                            |
    896      {7:  }{8:  6 }{4:a}{27:DEF}{4:abc                                    }{7:  }{8:  4 }{4:a}{27:ABC}{4:abc                                     }|
    897      {7:  }{8:  7 }{27:xyz}{4:                                        }{7:  }{8:  5 }{27:aABCabc}{4:                                     }|
    898      {7:  }{8:  8 }{27:xyz}{4:                                        }{7:  }{8:  6 }{27:aABCabc}{4:                                     }|
    899      {7:  }{8:  9 }{27:xyz}{4:                                        }{7:  }{8:  7 }{27:aABCabc}{4:                                     }|
    900      {7:  }{8: 10 }{22:aDEFabc                                    }{7:  }{8:    }{23:--------------------------------------------}|
    901      {7:  }{8: 11 }{22:aDEFabc                                    }{7:  }{8:    }{23:--------------------------------------------}|
    902      {7:  }{8: 12 }{22:aDEFabc                                    }{7:  }{8:    }{23:--------------------------------------------}|
    903      {7:  }{8: 13 }common line                                {7:  }{8:  8 }common line                                 |
    904      {7:  }{8: 14 }{22:DEF                                        }{7:  }{8:    }{23:--------------------------------------------}|
    905      {7:  }{8: 15 }{27:GHI}{4:                                        }{7:  }{8:  9 }{27:HIL}{4:                                         }|
    906      {7:  }{8: 16 }{22:something else                             }{7:  }{8:    }{23:--------------------------------------------}|
    907      {7:  }{8: 17 }common line                                {7:  }{8: 10 }common line                                 |
    908      {7:  }{8: 18 }something                                  {7:  }{8: 11 }something                                   |
    909      {3:Xtest-functional-diff-screen-1.2                  }{2:Xtest-functional-diff-screen-1                    }|
    910      :e                                                                                                  |
    911      ]])
    912        -- enable it by increasing the number
    913        feed(':set diffopt-=linematch:10<cr>')
    914        feed(':set diffopt+=linematch:30<cr>')
    915        screen:expect([[
    916      {7:  }{8:  1 }^common line                                {7:  }{8:  1 }common line                                 |
    917      {7:  }{8:  2 }{22:DEF                                        }{7:  }{8:    }{23:--------------------------------------------}|
    918      {7:  }{8:  3 }{27:GHI}{4:                                        }{7:  }{8:  2 }{27:HIL}{4:                                         }|
    919      {7:  }{8:  4 }{22:something                                  }{7:  }{8:    }{23:--------------------------------------------}|
    920      {7:  }{8:  5 }                                           {7:  }{8:  3 }                                            |
    921      {7:  }{8:  6 }{4:a}{27:DEF}{4:abc                                    }{7:  }{8:  4 }{4:a}{27:ABC}{4:abc                                     }|
    922      {7:  }{8:  7 }{22:xyz                                        }{7:  }{8:    }{23:--------------------------------------------}|
    923      {7:  }{8:  8 }{22:xyz                                        }{7:  }{8:    }{23:--------------------------------------------}|
    924      {7:  }{8:  9 }{22:xyz                                        }{7:  }{8:    }{23:--------------------------------------------}|
    925      {7:  }{8: 10 }{4:a}{27:DEF}{4:abc                                    }{7:  }{8:  5 }{4:a}{27:ABC}{4:abc                                     }|
    926      {7:  }{8: 11 }{4:a}{27:DEF}{4:abc                                    }{7:  }{8:  6 }{4:a}{27:ABC}{4:abc                                     }|
    927      {7:  }{8: 12 }{4:a}{27:DEF}{4:abc                                    }{7:  }{8:  7 }{4:a}{27:ABC}{4:abc                                     }|
    928      {7:  }{8: 13 }common line                                {7:  }{8:  8 }common line                                 |
    929      {7:  }{8: 14 }{22:DEF                                        }{7:  }{8:    }{23:--------------------------------------------}|
    930      {7:  }{8: 15 }{27:GHI}{4:                                        }{7:  }{8:  9 }{27:HIL}{4:                                         }|
    931      {7:  }{8: 16 }{22:something else                             }{7:  }{8:    }{23:--------------------------------------------}|
    932      {7:  }{8: 17 }common line                                {7:  }{8: 10 }common line                                 |
    933      {7:  }{8: 18 }something                                  {7:  }{8: 11 }something                                   |
    934      {3:Xtest-functional-diff-screen-1.2                  }{2:Xtest-functional-diff-screen-1                    }|
    935      :set diffopt+=linematch:30                                                                          |
    936      ]])
    937      end
    938    )
    939    it('get all from second window', function()
    940      feed('2<c-w>w')
    941      feed(':1,12diffget<cr>')
    942      screen:expect([[
    943      {7:+ }{8:  1 }{13:+-- 18 lines: common line··················}{7:+ }{8:  1 }{13:^+-- 18 lines: common line···················}|
    944      {1:~                                                }{1:~                                                 }|*17
    945      {2:Xtest-functional-diff-screen-1.2                  }{3:Xtest-functional-diff-screen-1 [+]                }|
    946      :1,12diffget                                                                                        |
    947      ]])
    948    end)
    949    it('get all from first window', function()
    950      feed('1<c-w>w')
    951      feed(':1,19diffget<cr>')
    952      screen:expect([[
    953      {7:+ }{8:  1 }{13:^+-- 11 lines: common line··················}{7:+ }{8:  1 }{13:+-- 11 lines: common line···················}|
    954      {1:~                                                }{1:~                                                 }|*17
    955      {3:Xtest-functional-diff-screen-1.2 [+]              }{2:Xtest-functional-diff-screen-1                    }|
    956      :1,19diffget                                                                                        |
    957      ]])
    958    end)
    959    it(
    960      'get part of the non linematched diff block in window 2 line 7 - 8 (non line matched block)',
    961      function()
    962        feed('2<c-w>w')
    963        feed(':7,8diffget<cr>')
    964        screen:expect([[
    965      {7:  }{8:  1 }common line                                {7:  }{8:  1 }^common line                                 |
    966      {7:  }{8:  2 }{22:DEF                                        }{7:  }{8:    }{23:--------------------------------------------}|
    967      {7:  }{8:  3 }{27:GHI}{4:                                        }{7:  }{8:  2 }{27:HIL}{4:                                         }|
    968      {7:  }{8:  4 }{22:something                                  }{7:  }{8:    }{23:--------------------------------------------}|
    969      {7:  }{8:  5 }                                           {7:  }{8:  3 }                                            |
    970      {7:  }{8:  6 }{4:a}{27:DEF}{4:abc                                    }{7:  }{8:  4 }{4:a}{27:ABC}{4:abc                                     }|
    971      {7:  }{8:  7 }{27:xyz}{4:                                        }{7:  }{8:  5 }{27:aABCabc}{4:                                     }|
    972      {7:  }{8:  8 }{27:xyz}{4:                                        }{7:  }{8:  6 }{27:aABCabc}{4:                                     }|
    973      {7:  }{8:  9 }xyz                                        {7:  }{8:  7 }xyz                                         |
    974      {7:  }{8: 10 }aDEFabc                                    {7:  }{8:  8 }aDEFabc                                     |
    975      {7:  }{8: 11 }aDEFabc                                    {7:  }{8:  9 }aDEFabc                                     |
    976      {7:  }{8: 12 }aDEFabc                                    {7:  }{8: 10 }aDEFabc                                     |
    977      {7:  }{8: 13 }common line                                {7:  }{8: 11 }common line                                 |
    978      {7:  }{8: 14 }{22:DEF                                        }{7:  }{8:    }{23:--------------------------------------------}|
    979      {7:  }{8: 15 }{27:GHI}{4:                                        }{7:  }{8: 12 }{27:HIL}{4:                                         }|
    980      {7:  }{8: 16 }{22:something else                             }{7:  }{8:    }{23:--------------------------------------------}|
    981      {7:  }{8: 17 }common line                                {7:  }{8: 13 }common line                                 |
    982      {7:  }{8: 18 }something                                  {7:  }{8: 14 }something                                   |
    983      {2:Xtest-functional-diff-screen-1.2                  }{3:Xtest-functional-diff-screen-1 [+]                }|
    984      :7,8diffget                                                                                         |
    985      ]])
    986      end
    987    )
    988    it(
    989      'get part of the non linematched diff block in window 2 line 8 - 10 (line matched block)',
    990      function()
    991        feed('2<c-w>w')
    992        feed(':8,10diffget<cr>')
    993        screen:expect([[
    994      {7:  }{8:  1 }common line                                {7:  }{8:  1 }^common line                                 |
    995      {7:  }{8:  2 }{22:DEF                                        }{7:  }{8:    }{23:--------------------------------------------}|
    996      {7:  }{8:  3 }{27:GHI}{4:                                        }{7:  }{8:  2 }{27:HIL}{4:                                         }|
    997      {7:  }{8:  4 }{22:something                                  }{7:  }{8:    }{23:--------------------------------------------}|
    998      {7:  }{8:  5 }                                           {7:  }{8:  3 }                                            |
    999      {7:  }{8:  6 }{4:a}{27:DEF}{4:abc                                    }{7:  }{8:  4 }{4:a}{27:ABC}{4:abc                                     }|
   1000      {7:  }{8:  7 }{27:xyz}{4:                                        }{7:  }{8:  5 }{27:aABCabc}{4:                                     }|
   1001      {7:  }{8:  8 }{27:xyz}{4:                                        }{7:  }{8:  6 }{27:aABCabc}{4:                                     }|
   1002      {7:  }{8:  9 }{27:xyz}{4:                                        }{7:  }{8:  7 }{27:aABCabc}{4:                                     }|
   1003      {7:  }{8: 10 }{22:aDEFabc                                    }{7:  }{8:    }{23:--------------------------------------------}|
   1004      {7:  }{8: 11 }{22:aDEFabc                                    }{7:  }{8:    }{23:--------------------------------------------}|
   1005      {7:  }{8: 12 }{22:aDEFabc                                    }{7:  }{8:    }{23:--------------------------------------------}|
   1006      {7:  }{8: 13 }common line                                {7:  }{8:  8 }common line                                 |
   1007      {7:  }{8: 14 }DEF                                        {7:  }{8:  9 }DEF                                         |
   1008      {7:  }{8: 15 }GHI                                        {7:  }{8: 10 }GHI                                         |
   1009      {7:  }{8: 16 }something else                             {7:  }{8: 11 }something else                              |
   1010      {7:  }{8: 17 }common line                                {7:  }{8: 12 }common line                                 |
   1011      {7:  }{8: 18 }something                                  {7:  }{8: 13 }something                                   |
   1012      {2:Xtest-functional-diff-screen-1.2                  }{3:Xtest-functional-diff-screen-1 [+]                }|
   1013      :8,10diffget                                                                                        |
   1014      ]])
   1015      end
   1016    )
   1017  end)
   1018 end)
   1019 
   1020 describe('regressions', function()
   1021  local screen
   1022 
   1023  it("doesn't crash with long lines", function()
   1024    clear()
   1025    feed(':set diffopt=internal.filler,linematch:30<cr>')
   1026    screen = Screen.new(100, 20)
   1027    -- line must be greater than MATCH_CHAR_MAX_LEN
   1028    n.api.nvim_buf_set_lines(0, 0, -1, false, { string.rep('a', 1000) .. 'hello' })
   1029    n.exec 'vnew'
   1030    n.api.nvim_buf_set_lines(0, 0, -1, false, { string.rep('a', 1010) .. 'world' })
   1031    n.exec 'windo diffthis'
   1032  end)
   1033 
   1034  it('properly computes filler lines for hunks bigger than linematch limit', function()
   1035    clear()
   1036    feed(':set diffopt=internal,filler,linematch:10<cr>')
   1037    screen = Screen.new(100, 20)
   1038    local lines = {}
   1039    for i = 0, 29 do
   1040      lines[#lines + 1] = tostring(i)
   1041    end
   1042    n.api.nvim_buf_set_lines(0, 0, -1, false, lines)
   1043    n.exec 'vnew'
   1044    n.api.nvim_buf_set_lines(0, 0, -1, false, { '00', '29' })
   1045    n.exec 'windo diffthis'
   1046    feed('<C-e>')
   1047    screen:expect {
   1048      grid = [[
   1049      {1:  }{2:------------------------------------------------}│{1:  }{3:^1                                              }|
   1050      {1:  }{2:------------------------------------------------}│{1:  }{3:2                                              }|
   1051      {1:  }{2:------------------------------------------------}│{1:  }{3:3                                              }|
   1052      {1:  }{2:------------------------------------------------}│{1:  }{3:4                                              }|
   1053      {1:  }{2:------------------------------------------------}│{1:  }{3:5                                              }|
   1054      {1:  }{2:------------------------------------------------}│{1:  }{3:6                                              }|
   1055      {1:  }{2:------------------------------------------------}│{1:  }{3:7                                              }|
   1056      {1:  }{2:------------------------------------------------}│{1:  }{3:8                                              }|
   1057      {1:  }{2:------------------------------------------------}│{1:  }{3:9                                              }|
   1058      {1:  }{2:------------------------------------------------}│{1:  }{3:10                                             }|
   1059      {1:  }{2:------------------------------------------------}│{1:  }{3:11                                             }|
   1060      {1:  }{2:------------------------------------------------}│{1:  }{3:12                                             }|
   1061      {1:  }{2:------------------------------------------------}│{1:  }{3:13                                             }|
   1062      {1:  }{2:------------------------------------------------}│{1:  }{3:14                                             }|
   1063      {1:  }{2:------------------------------------------------}│{1:  }{3:15                                             }|
   1064      {1:  }{2:------------------------------------------------}│{1:  }{3:16                                             }|
   1065      {1:  }{2:------------------------------------------------}│{1:  }{3:17                                             }|
   1066      {1:  }29                                              │{1:  }{3:18                                             }|
   1067      {4:[No Name] [+]                                      }{5:[No Name] [+]                                    }|
   1068                                                                                                          |
   1069    ]],
   1070      attr_ids = {
   1071        [1] = { foreground = Screen.colors.DarkBlue, background = Screen.colors.Grey },
   1072        [2] = {
   1073          bold = true,
   1074          background = Screen.colors.LightCyan,
   1075          foreground = Screen.colors.Blue1,
   1076        },
   1077        [3] = { background = Screen.colors.LightBlue },
   1078        [4] = { reverse = true },
   1079        [5] = { reverse = true, bold = true },
   1080      },
   1081    }
   1082  end)
   1083 
   1084  -- oldtest: Test_linematch_3diffs_sanity_check()
   1085  it('sanity check with 3 diff buffers', function()
   1086    clear()
   1087    screen = Screen.new(75, 20)
   1088    n.api.nvim_buf_set_lines(0, 0, -1, false, { 'abcd', 'def', 'hij' })
   1089    n.exec('rightbelow vnew')
   1090    n.api.nvim_buf_set_lines(0, 0, -1, false, { 'defq', 'hijk', 'nopq' })
   1091    n.exec('rightbelow vnew')
   1092    n.api.nvim_buf_set_lines(0, 0, -1, false, { 'hijklm', 'nopqr', 'stuv' })
   1093    n.exec([[
   1094      set diffopt=internal,filler,linematch:60
   1095      windo diffthis | wincmd t
   1096      call feedkeys("Aq\<esc>")
   1097      call feedkeys("GAklm\<esc>")
   1098      call feedkeys("o")
   1099    ]])
   1100    screen:expect([[
   1101      {7:  }{22:abcdq                 }{7:  }{23:----------------------}│{7:  }{23:-----------------------}|
   1102      {7:  }{4:def                   }{7:  }{4:def}{27:q}{4:                  }{7:  }{23:-----------------------}|
   1103      {7:  }{4:hijk}{27:lm}{4:                }{7:  }{4:hijk                  }{7:  }{4:hijk}{27:lm}{4:                 }|
   1104      {7:  }{23:----------------------}│{7:  }{4:nopq                  }│{7:  }{4:nopq}{27:r}{4:                  }|
   1105      {7:  }{4:^                      }{7:  }{23:----------------------}│{7:  }{27:stuv}{4:                   }|
   1106      {1:~                       }{1:~                       }{1:~                        }|*13
   1107      {3:[No Name] [+]            }{2:[No Name] [+]            [No Name] [+]            }|
   1108      {5:-- INSERT --}                                                               |
   1109    ]])
   1110  end)
   1111 end)