aboutsummaryrefslogtreecommitdiff
path: root/test/functional/ui/diff_spec.lua
diff options
context:
space:
mode:
authorAnatolii Sakhnik <sakhnik@gmail.com>2018-12-02 22:58:07 +0200
committerAnatolii Sakhnik <sakhnik@gmail.com>2018-12-09 19:45:56 +0200
commitcf1ffa91667a482c6355f5999b9e97ccc0b4126a (patch)
tree0b30423f48fcd3ff19afe6142ee66db5f31cf7d3 /test/functional/ui/diff_spec.lua
parent67c5bc1ac082236c0a36c785619987b9462aa89a (diff)
downloadrneovim-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.lua776
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)