diff options
author | Anatolii Sakhnik <sakhnik@gmail.com> | 2018-12-02 22:58:07 +0200 |
---|---|---|
committer | Anatolii Sakhnik <sakhnik@gmail.com> | 2018-12-09 19:45:56 +0200 |
commit | cf1ffa91667a482c6355f5999b9e97ccc0b4126a (patch) | |
tree | 0b30423f48fcd3ff19afe6142ee66db5f31cf7d3 /test/functional/ui/diff_spec.lua | |
parent | 67c5bc1ac082236c0a36c785619987b9462aa89a (diff) | |
download | rneovim-cf1ffa91667a482c6355f5999b9e97ccc0b4126a.tar.gz rneovim-cf1ffa91667a482c6355f5999b9e97ccc0b4126a.tar.bz2 rneovim-cf1ffa91667a482c6355f5999b9e97ccc0b4126a.zip |
vim-patch:8.1.0360: using an external diff program is slow and inflexible
Problem: Using an external diff program is slow and inflexible.
Solution: Include the xdiff library. (Christian Brabandt)
Use it by default.
https://github.com/vim/vim/commit/e828b7621cf9065a3582be0c4dd1e0e846e335bf
vim-patch:8.1.0360
vim-patch:8.1.0364
vim-patch:8.1.0366
vim-patch:8.1.0370
vim-patch:8.1.0377
vim-patch:8.1.0378
vim-patch:8.1.0381
vim-patch:8.1.0396
vim-patch:8.1.0432
Diffstat (limited to 'test/functional/ui/diff_spec.lua')
-rw-r--r-- | test/functional/ui/diff_spec.lua | 776 |
1 files changed, 776 insertions, 0 deletions
diff --git a/test/functional/ui/diff_spec.lua b/test/functional/ui/diff_spec.lua new file mode 100644 index 0000000000..8f2b667b3c --- /dev/null +++ b/test/functional/ui/diff_spec.lua @@ -0,0 +1,776 @@ +local helpers = require('test.functional.helpers')(after_each) +local Screen = require('test.functional.ui.screen') + +local feed = helpers.feed +local clear = helpers.clear +local write_file = helpers.write_file + +describe('Diff mode screen', function() + local fname = 'Xtest-functional-diff-screen-1' + local fname_2 = fname .. '.2' + local screen + + local reread = function() + feed(':e<cr><c-w>w:e<cr><c-w>w') + end + + setup(function() + clear() + os.remove(fname) + os.remove(fname_2) + end) + + teardown(function() + os.remove(fname) + os.remove(fname_2) + end) + + before_each(function() + clear() + feed(':e ' .. fname_2 .. '<cr>') + feed(':vnew ' .. fname .. '<cr>') + feed(':diffthis<cr>') + feed('<c-w>w:diffthis<cr><c-w>w') + + screen = Screen.new(40, 16) + screen:attach() + screen:set_default_attr_ids({ + [1] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.WebGray}, + [2] = {background = Screen.colors.LightCyan1, bold = true, foreground = Screen.colors.Blue1}, + [3] = {reverse = true}, + [4] = {background = Screen.colors.LightBlue}, + [5] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.LightGrey}, + [6] = {bold = true, foreground = Screen.colors.Blue1}, + [7] = {bold = true, reverse = true}, + [8] = {bold = true, background = Screen.colors.Red}, + [9] = {background = Screen.colors.LightMagenta}, + }) + end) + + it('Add a line in beginning of file 2', function() + write_file(fname, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n", false) + write_file(fname_2, "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n", false) + reread() + + feed(':set diffopt=filler<cr>') + screen:expect([[ + {1: }{2:------------------}{3:│}{1: }{4:0 }| + {1: }^1 {3:│}{1: }1 | + {1: }2 {3:│}{1: }2 | + {1: }3 {3:│}{1: }3 | + {1: }4 {3:│}{1: }4 | + {1: }5 {3:│}{1: }5 | + {1: }6 {3:│}{1: }6 | + {1:+ }{5:+-- 4 lines: 7···}{3:│}{1:+ }{5:+-- 4 lines: 7··}| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=filler | + ]]) + + feed(':set diffopt+=internal<cr>') + screen:expect([[ + {1: }{2:------------------}{3:│}{1: }{4:0 }| + {1: }^1 {3:│}{1: }1 | + {1: }2 {3:│}{1: }2 | + {1: }3 {3:│}{1: }3 | + {1: }4 {3:│}{1: }4 | + {1: }5 {3:│}{1: }5 | + {1: }6 {3:│}{1: }6 | + {1:+ }{5:+-- 4 lines: 7···}{3:│}{1:+ }{5:+-- 4 lines: 7··}| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt+=internal | + ]]) + end) + + it('Add a line in beginning of file 1', function() + write_file(fname, "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n", false) + write_file(fname_2, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n", false) + reread() + + feed(":set diffopt=filler<cr>") + screen:expect([[ + {1: }{4:^0 }{3:│}{1: }{2:-----------------}| + {1: }1 {3:│}{1: }1 | + {1: }2 {3:│}{1: }2 | + {1: }3 {3:│}{1: }3 | + {1: }4 {3:│}{1: }4 | + {1: }5 {3:│}{1: }5 | + {1: }6 {3:│}{1: }6 | + {1:+ }{5:+-- 4 lines: 7···}{3:│}{1:+ }{5:+-- 4 lines: 7··}| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=filler | + ]]) + + feed(":set diffopt+=internal<cr>") + screen:expect([[ + {1: }{4:^0 }{3:│}{1: }{2:-----------------}| + {1: }1 {3:│}{1: }1 | + {1: }2 {3:│}{1: }2 | + {1: }3 {3:│}{1: }3 | + {1: }4 {3:│}{1: }4 | + {1: }5 {3:│}{1: }5 | + {1: }6 {3:│}{1: }6 | + {1:+ }{5:+-- 4 lines: 7···}{3:│}{1:+ }{5:+-- 4 lines: 7··}| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt+=internal | + ]]) + end) + + it('Add a line at the end of file 2', function() + write_file(fname, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n", false) + write_file(fname_2, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n", false) + reread() + + feed(":set diffopt=filler<cr>") + screen:expect([[ + {1:+ }{5:^+-- 4 lines: 1···}{3:│}{1:+ }{5:+-- 4 lines: 1··}| + {1: }5 {3:│}{1: }5 | + {1: }6 {3:│}{1: }6 | + {1: }7 {3:│}{1: }7 | + {1: }8 {3:│}{1: }8 | + {1: }9 {3:│}{1: }9 | + {1: }10 {3:│}{1: }10 | + {1: }{2:------------------}{3:│}{1: }{4:11 }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=filler | + ]]) + + feed(":set diffopt+=internal<cr>") + screen:expect([[ + {1:+ }{5:^+-- 4 lines: 1···}{3:│}{1:+ }{5:+-- 4 lines: 1··}| + {1: }5 {3:│}{1: }5 | + {1: }6 {3:│}{1: }6 | + {1: }7 {3:│}{1: }7 | + {1: }8 {3:│}{1: }8 | + {1: }9 {3:│}{1: }9 | + {1: }10 {3:│}{1: }10 | + {1: }{2:------------------}{3:│}{1: }{4:11 }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt+=internal | + ]]) + end) + + it('Add a line at the end of file 1', function() + write_file(fname, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n", false) + write_file(fname_2, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n", false) + reread() + + feed(":set diffopt=filler<cr>") + screen:expect([[ + {1:+ }{5:^+-- 4 lines: 1···}{3:│}{1:+ }{5:+-- 4 lines: 1··}| + {1: }5 {3:│}{1: }5 | + {1: }6 {3:│}{1: }6 | + {1: }7 {3:│}{1: }7 | + {1: }8 {3:│}{1: }8 | + {1: }9 {3:│}{1: }9 | + {1: }10 {3:│}{1: }10 | + {1: }{4:11 }{3:│}{1: }{2:-----------------}| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=filler | + ]]) + + feed(":set diffopt+=internal<cr>") + screen:expect([[ + {1:+ }{5:^+-- 4 lines: 1···}{3:│}{1:+ }{5:+-- 4 lines: 1··}| + {1: }5 {3:│}{1: }5 | + {1: }6 {3:│}{1: }6 | + {1: }7 {3:│}{1: }7 | + {1: }8 {3:│}{1: }8 | + {1: }9 {3:│}{1: }9 | + {1: }10 {3:│}{1: }10 | + {1: }{4:11 }{3:│}{1: }{2:-----------------}| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt+=internal | + ]]) + end) + + it('Add a line in the middle of file 2, remove on at the end of file 1', function() + write_file(fname, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n", false) + write_file(fname_2, "1\n2\n3\n4\n4\n5\n6\n7\n8\n9\n10\n", false) + reread() + + feed(':set diffopt=filler<cr>') + screen:expect([[ + {1: }^1 {3:│}{1: }1 | + {1: }2 {3:│}{1: }2 | + {1: }3 {3:│}{1: }3 | + {1: }4 {3:│}{1: }4 | + {1: }{2:------------------}{3:│}{1: }{4:4 }| + {1: }5 {3:│}{1: }5 | + {1: }6 {3:│}{1: }6 | + {1: }7 {3:│}{1: }7 | + {1: }8 {3:│}{1: }8 | + {1: }9 {3:│}{1: }9 | + {1: }10 {3:│}{1: }10 | + {1: }{4:11 }{3:│}{1: }{2:-----------------}| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=filler | + ]]) + + feed(':set diffopt+=internal<cr>') + screen:expect([[ + {1: }^1 {3:│}{1: }1 | + {1: }2 {3:│}{1: }2 | + {1: }3 {3:│}{1: }3 | + {1: }4 {3:│}{1: }4 | + {1: }{2:------------------}{3:│}{1: }{4:4 }| + {1: }5 {3:│}{1: }5 | + {1: }6 {3:│}{1: }6 | + {1: }7 {3:│}{1: }7 | + {1: }8 {3:│}{1: }8 | + {1: }9 {3:│}{1: }9 | + {1: }10 {3:│}{1: }10 | + {1: }{4:11 }{3:│}{1: }{2:-----------------}| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt+=internal | + ]]) + end) + + it('Add a line in the middle of file 1, remove on at the end of file 2', function() + write_file(fname, "1\n2\n3\n4\n4\n5\n6\n7\n8\n9\n10\n", false) + write_file(fname_2, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n", false) + reread() + + feed(':set diffopt=filler<cr>') + screen:expect([[ + {1: }^1 {3:│}{1: }1 | + {1: }2 {3:│}{1: }2 | + {1: }3 {3:│}{1: }3 | + {1: }4 {3:│}{1: }4 | + {1: }{4:4 }{3:│}{1: }{2:-----------------}| + {1: }5 {3:│}{1: }5 | + {1: }6 {3:│}{1: }6 | + {1: }7 {3:│}{1: }7 | + {1: }8 {3:│}{1: }8 | + {1: }9 {3:│}{1: }9 | + {1: }10 {3:│}{1: }10 | + {1: }{2:------------------}{3:│}{1: }{4:11 }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=filler | + ]]) + + feed(':set diffopt+=internal<cr>') + screen:expect([[ + {1: }^1 {3:│}{1: }1 | + {1: }2 {3:│}{1: }2 | + {1: }3 {3:│}{1: }3 | + {1: }4 {3:│}{1: }4 | + {1: }{4:4 }{3:│}{1: }{2:-----------------}| + {1: }5 {3:│}{1: }5 | + {1: }6 {3:│}{1: }6 | + {1: }7 {3:│}{1: }7 | + {1: }8 {3:│}{1: }8 | + {1: }9 {3:│}{1: }9 | + {1: }10 {3:│}{1: }10 | + {1: }{2:------------------}{3:│}{1: }{4:11 }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt+=internal | + ]]) + end) + + describe('normal/patience/histogram diff algorithm', function() + setup(function() + local f1 = [[#include <stdio.h> + +// Frobs foo heartily +int frobnitz(int foo) +{ + int i; + for(i = 0; i < 10; i++) + { + printf("Your answer is: "); + printf("%d\n", foo); + } +} + +int fact(int n) +{ + if(n > 1) + { + return fact(n-1) * n; + } + return 1; +} + +int main(int argc, char **argv) +{ + frobnitz(fact(10)); +}]] + write_file(fname, f1, false) + local f2 = [[#include <stdio.h> + +int fib(int n) +{ + if(n > 2) + { + return fib(n-1) + fib(n-2); + } + return 1; +} + +// Frobs foo heartily +int frobnitz(int foo) +{ + int i; + for(i = 0; i < 10; i++) + { + printf("%d\n", foo); + } +} + +int main(int argc, char **argv) +{ + frobnitz(fib(10)); +}]] + write_file(fname_2, f2, false) + end) + + it('diffopt=+algorithm:myers', function() + reread() + feed(':set diffopt=internal,filler<cr>') + screen:expect([[ + {1: }^#include <stdio.h>{3:│}{1: }#include <stdio.h| + {1: } {3:│}{1: } | + {1: }{8:// Frobs foo heart}{3:│}{1: }{8:int fib(int n)}{9: }| + {1: }{4:int frobnitz(int f}{3:│}{1: }{2:-----------------}| + {1: }{ {3:│}{1: }{ | + {1: }{9: i}{8:nt i;}{9: }{3:│}{1: }{9: i}{8:f(n > 2)}{9: }| + {1: }{4: for(i = 0; i <}{3:│}{1: }{2:-----------------}| + {1: } { {3:│}{1: } { | + {1: }{9: }{8:printf("Yo}{3:│}{1: }{9: }{8:return fi}| + {1: }{4: printf("%d}{3:│}{1: }{2:-----------------}| + {1: } } {3:│}{1: } } | + {1: }{2:------------------}{3:│}{1: }{4: return 1; }| + {1: }} {3:│}{1: }} | + {1: } {3:│}{1: } | + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=internal,filler | + ]]) + + feed('G') + screen:expect([[ + {1: }{2:------------------}{3:│}{1: }{4:int frobnitz(int }| + {1: }{ {3:│}{1: }{ | + {1: }{9: i}{8:f(n > 1)}{9: }{3:│}{1: }{9: i}{8:nt i;}{9: }| + {1: }{2:------------------}{3:│}{1: }{4: for(i = 0; i }| + {1: } { {3:│}{1: } { | + {1: }{9: }{8:return fac}{3:│}{1: }{9: }{8:printf("%}| + {1: } } {3:│}{1: } } | + {1: }{4: return 1; }{3:│}{1: }{2:-----------------}| + {1: }} {3:│}{1: }} | + {1: } {3:│}{1: } | + {1: }int main(int argc,{3:│}{1: }int main(int argc| + {1: }{ {3:│}{1: }{ | + {1: }{9: frobnitz(f}{8:act}{9:(}{3:│}{1: }{9: frobnitz(f}{8:ib}{9:(}| + {1: }^} {3:│}{1: }} | + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=internal,filler | + ]]) + end) + + it('diffopt+=algorithm:patience', function() + reread() + feed(':set diffopt=internal,filler,algorithm:patience<cr>') + screen:expect([[ + {1: }^#include <stdio.h>{3:│}{1: }#include <stdio.h| + {1: } {3:│}{1: } | + {1: }{2:------------------}{3:│}{1: }{4:int fib(int n) }| + {1: }{2:------------------}{3:│}{1: }{4:{ }| + {1: }{2:------------------}{3:│}{1: }{4: if(n > 2) }| + {1: }{2:------------------}{3:│}{1: }{4: { }| + {1: }{2:------------------}{3:│}{1: }{4: return fi}| + {1: }{2:------------------}{3:│}{1: }{4: } }| + {1: }{2:------------------}{3:│}{1: }{4: return 1; }| + {1: }{2:------------------}{3:│}{1: }{4:} }| + {1: }{2:------------------}{3:│}{1: }{4: }| + {1: }// Frobs foo heart{3:│}{1: }// Frobs foo hear| + {1: }int frobnitz(int f{3:│}{1: }int frobnitz(int | + {1: }{ {3:│}{1: }{ | + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + | + ]]) + + feed('G') + screen:expect([[ + {1: } {3:│}{1: } | + {1: }{4:int fact(int n) }{3:│}{1: }{2:-----------------}| + {1: }{4:{ }{3:│}{1: }{2:-----------------}| + {1: }{4: if(n > 1) }{3:│}{1: }{2:-----------------}| + {1: }{4: { }{3:│}{1: }{2:-----------------}| + {1: }{4: return fac}{3:│}{1: }{2:-----------------}| + {1: }{4: } }{3:│}{1: }{2:-----------------}| + {1: }{4: return 1; }{3:│}{1: }{2:-----------------}| + {1: }{4:} }{3:│}{1: }{2:-----------------}| + {1: }{4: }{3:│}{1: }{2:-----------------}| + {1: }int main(int argc,{3:│}{1: }int main(int argc| + {1: }{ {3:│}{1: }{ | + {1: }{9: frobnitz(f}{8:act}{9:(}{3:│}{1: }{9: frobnitz(f}{8:ib}{9:(}| + {1: }^} {3:│}{1: }} | + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + | + ]]) + end) + + it('diffopt+=algorithm:histogram', function() + reread() + feed(':set diffopt=internal,filler,algorithm:histogram<cr>') + screen:expect([[ + {1: }^#include <stdio.h>{3:│}{1: }#include <stdio.h| + {1: } {3:│}{1: } | + {1: }{2:------------------}{3:│}{1: }{4:int fib(int n) }| + {1: }{2:------------------}{3:│}{1: }{4:{ }| + {1: }{2:------------------}{3:│}{1: }{4: if(n > 2) }| + {1: }{2:------------------}{3:│}{1: }{4: { }| + {1: }{2:------------------}{3:│}{1: }{4: return fi}| + {1: }{2:------------------}{3:│}{1: }{4: } }| + {1: }{2:------------------}{3:│}{1: }{4: return 1; }| + {1: }{2:------------------}{3:│}{1: }{4:} }| + {1: }{2:------------------}{3:│}{1: }{4: }| + {1: }// Frobs foo heart{3:│}{1: }// Frobs foo hear| + {1: }int frobnitz(int f{3:│}{1: }int frobnitz(int | + {1: }{ {3:│}{1: }{ | + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + | + ]]) + + feed('G') + screen:expect([[ + {1: } {3:│}{1: } | + {1: }{4:int fact(int n) }{3:│}{1: }{2:-----------------}| + {1: }{4:{ }{3:│}{1: }{2:-----------------}| + {1: }{4: if(n > 1) }{3:│}{1: }{2:-----------------}| + {1: }{4: { }{3:│}{1: }{2:-----------------}| + {1: }{4: return fac}{3:│}{1: }{2:-----------------}| + {1: }{4: } }{3:│}{1: }{2:-----------------}| + {1: }{4: return 1; }{3:│}{1: }{2:-----------------}| + {1: }{4:} }{3:│}{1: }{2:-----------------}| + {1: }{4: }{3:│}{1: }{2:-----------------}| + {1: }int main(int argc,{3:│}{1: }int main(int argc| + {1: }{ {3:│}{1: }{ | + {1: }{9: frobnitz(f}{8:act}{9:(}{3:│}{1: }{9: frobnitz(f}{8:ib}{9:(}| + {1: }^} {3:│}{1: }} | + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + | + ]]) + end) + end) + + describe('diffopt+=indent-heuristic', function() + setup(function() + local f1 = [[ + def finalize(values) + + values.each do |v| + v.finalize + end]] + write_file(fname, f1, false) + local f2 = [[ + def finalize(values) + + values.each do |v| + v.prepare + end + + values.each do |v| + v.finalize + end]] + write_file(fname_2, f2, false) + feed(':diffupdate!<cr>') + end) + + it('internal', function() + reread() + feed(":set diffopt=internal,filler<cr>") + screen:expect([[ + {1: }^def finalize(value{3:│}{1: }def finalize(valu| + {1: } {3:│}{1: } | + {1: } values.each do |{3:│}{1: } values.each do | + {1: }{2:------------------}{3:│}{1: }{4: v.prepare }| + {1: }{2:------------------}{3:│}{1: }{4: end }| + {1: }{2:------------------}{3:│}{1: }{4: }| + {1: }{2:------------------}{3:│}{1: }{4: values.each do }| + {1: } v.finalize {3:│}{1: } v.finalize | + {1: } end {3:│}{1: } end | + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=internal,filler | + ]]) + end) + + it('indent-heuristic', function() + reread() + feed(':set diffopt=internal,filler,indent-heuristic<cr>') + screen:expect([[ + {1: }^def finalize(value{3:│}{1: }def finalize(valu| + {1: } {3:│}{1: } | + {1: }{2:------------------}{3:│}{1: }{4: values.each do }| + {1: }{2:------------------}{3:│}{1: }{4: v.prepare }| + {1: }{2:------------------}{3:│}{1: }{4: end }| + {1: }{2:------------------}{3:│}{1: }{4: }| + {1: } values.each do |{3:│}{1: } values.each do | + {1: } v.finalize {3:│}{1: } v.finalize | + {1: } end {3:│}{1: } end | + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + | + ]]) + end) + end) + + it('Diff the same file', function() + write_file(fname, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n", false) + write_file(fname_2, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n", false) + reread() + + feed(':set diffopt=filler<cr>') + screen:expect([[ + {1:+ }{5:^+-- 10 lines: 1···}{3:│}{1:+ }{5:+-- 10 lines: 1··}| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=filler | + ]]) + + feed(':set diffopt+=internal<cr>') + screen:expect([[ + {1:+ }{5:^+-- 10 lines: 1···}{3:│}{1:+ }{5:+-- 10 lines: 1··}| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt+=internal | + ]]) + end) + + it('Diff an empty file', function() + write_file(fname, "", false) + write_file(fname_2, "", false) + reread() + + feed(':set diffopt=filler<cr>') + screen:expect([[ + {1:- }^ {3:│}{1:- } | + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=filler | + ]]) + + feed(':set diffopt+=internal<cr>') + screen:expect([[ + {1:- }^ {3:│}{1:- } | + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt+=internal | + ]]) + end) + + it('diffopt+=icase', function() + write_file(fname, "a\nb\ncd\n", false) + write_file(fname_2, "A\nb\ncDe\n", false) + reread() + + feed(':set diffopt=filler,icase<cr>') + screen:expect([[ + {1: }^a {3:│}{1: }A | + {1: }b {3:│}{1: }b | + {1: }{9:cd }{3:│}{1: }{9:cD}{8:e}{9: }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=filler,icase | + ]]) + + feed(':set diffopt+=internal<cr>') + screen:expect([[ + {1: }^a {3:│}{1: }A | + {1: }b {3:│}{1: }b | + {1: }{9:cd }{3:│}{1: }{9:cD}{8:e}{9: }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt+=internal | + ]]) + end) + + describe('diffopt+=iwhite', function() + setup(function() + local f1 = 'int main()\n{\n printf("Hello, World!");\n return 0;\n}\n' + write_file(fname, f1, false) + local f2 = 'int main()\n{\n if (0)\n {\n printf("Hello, World!");\n return 0;\n }\n}\n' + write_file(fname_2, f2, false) + feed(':diffupdate!<cr>') + end) + + it('external', function() + reread() + feed(':set diffopt=filler,iwhite<cr>') + screen:expect([[ + {1: }^int main() {3:│}{1: }int main() | + {1: }{ {3:│}{1: }{ | + {1: }{2:------------------}{3:│}{1: }{4: if (0) }| + {1: }{2:------------------}{3:│}{1: }{4: { }| + {1: } printf("Hello, {3:│}{1: } printf("Hel| + {1: } return 0; {3:│}{1: } return 0; | + {1: }{2:------------------}{3:│}{1: }{4: } }| + {1: }} {3:│}{1: }} | + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=filler,iwhite | + ]]) + end) + + it('internal', function() + reread() + feed(':set diffopt=filler,iwhite,internal<cr>') + screen:expect([[ + {1: }^int main() {3:│}{1: }int main() | + {1: }{ {3:│}{1: }{ | + {1: }{2:------------------}{3:│}{1: }{4: if (0) }| + {1: }{2:------------------}{3:│}{1: }{4: { }| + {1: } printf("Hello, {3:│}{1: } printf("Hel| + {1: } return 0; {3:│}{1: } return 0; | + {1: }{2:------------------}{3:│}{1: }{4: } }| + {1: }} {3:│}{1: }} | + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {1: }{6:~ }{3:│}{1: }{6:~ }| + {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }| + :set diffopt=filler,iwhite,internal | + ]]) + end) + end) +end) |