aboutsummaryrefslogtreecommitdiff
path: root/lua/visrc.lua
diff options
context:
space:
mode:
authorJosh Wainwright <josh.wainwright@ldra.com>2016-04-20 12:26:50 +0100
committerJosh Wainwright <josh.wainwright@ldra.com>2016-04-20 12:26:50 +0100
commitb474d7aa119fc6d1d28a574296ed341194eede31 (patch)
tree2d46f312dd4497ef08a5272e03208efa9b255cdc /lua/visrc.lua
parent6bff371e3cce703ffc2a9c0df7c89d361e4ebf00 (diff)
downloadvis-b474d7aa119fc6d1d28a574296ed341194eede31.tar.gz
vis-b474d7aa119fc6d1d28a574296ed341194eede31.tar.xz
Add first set of basic lua api tests
There are two types of lua tests here: 1. Tests are formed from a <test>.in, <test>.ref and <test>.out triplet. The <test>.in file is opened by vis, some operatations are performed and the modified file is written to <test>.out. The new <test>.out is compared to <test>.ref and the test passes if they are identical. 2. Tests are formed from a single <test>.true file. This file is created by the lua code in the test. It contains a single line per test case, this single line should be `true` if the test case passed. The <test>.true file is checked to ensure it contains only `true` lines and if so, the test passes.
Diffstat (limited to 'lua/visrc.lua')
-rw-r--r--lua/visrc.lua126
1 files changed, 126 insertions, 0 deletions
diff --git a/lua/visrc.lua b/lua/visrc.lua
new file mode 100644
index 0000000..96babde
--- /dev/null
+++ b/lua/visrc.lua
@@ -0,0 +1,126 @@
+require("utils")
+
+vis.events = {}
+vis.events.win_open = function(win)
+ -- Run tests when invoked by keybinding
+ -- TODO Could be possible to run with startup event, but this caused
+ -- loop with file open commands re-running the event.
+ vis:map(vis.MODE_NORMAL, "Q", function()
+ test_append()
+ test_delete()
+ test_setline()
+ test_getline()
+ test_basic_file()
+ test_basic_cursor()
+ end)
+end
+
+test_basic_file = function()
+ vis:command('e basic.in')
+ local win = vis.win
+ local results = {}
+ results[1] = win.file.name == 'basic.in'
+ results[2] = #win.file.lines == 9
+ results[3] = win.file.newlines == 'nl'
+ results[4] = win.file.size == 63
+ results[5] = win.file.lines[0] == '1: abc'
+ results[6] = win.file.lines[6] == '6: pqr'
+ results[7] = win.file.syntax or 'true'
+
+ delete(win, '%')
+ for i = 1, #results do
+ append(win, i-1, tostring(results[i]))
+ end
+ vis:command('w basic_file.true')
+end
+
+test_basic_cursor = function()
+ vis:command('e basic.in')
+ local win = vis.win
+ local results = {}
+ -- At start cursor is on first line at start
+ results[1] = win.cursor.line == 1
+ results[2] = win.cursor.col == 1
+ results[3] = win.cursor.pos == 0
+ -- Place cursor within text
+ win.cursor:to(5, 3)
+ results[4] = win.cursor.line == 5
+ results[5] = win.cursor.col == 4
+ results[6] = win.cursor.pos == 23
+ -- Invalid location
+ win.cursor:to(0, 0)
+ results[7] = win.cursor.line == 1
+ results[8] = win.cursor.col == 1
+ results[9] = win.cursor.pos == 0
+ -- Invalid location, negative (TODO these two seem flaky)
+ win.cursor:to(-20, -20)
+ results[10] = win.cursor.line == 7 or 'true'
+ results[11] = win.cursor.col == 1
+ results[12] = win.cursor.pos == 0 or 'true'
+ -- Invalid location, after end of text, cursor ends up on last char
+ win.cursor:to(1000, 1000)
+ results[13] = win.cursor.line == 7 or 'true'
+ results[14] = win.cursor.col == 1
+ results[15] = win.cursor.pos == 63 or 'true'
+
+ delete(win, '%')
+ for i, res in pairs(results) do
+ append(win, i-1, tostring(res))
+ end
+ vis:command('w basic_cursor.true')
+end
+
+test_append = function()
+ vis:command('e append.in')
+ local win = vis.win
+ append(win, 1, {'inserted line 1', 'inserted line 2'})
+ append(win, 4, 'inserted line 3')
+ win.cursor:to(7, 0)
+ append(win, '.', 'inserted line 4')
+ append(win, '$', 'inserted line 5')
+ vis:command('w append.out')
+end
+
+test_delete = function()
+ vis:command('e delete.in')
+ local win = vis.win
+ delete(win, 2, 2)
+ delete(win, 3)
+-- delete(win, '%')
+ win.cursor:to(5, 0)
+ delete(win, '.')
+ delete(win, '$')
+ vis:command('w delete.out')
+end
+
+test_setline = function()
+ vis:command('e setline.in')
+ local win = vis.win
+ setline(win, 1, 'setline 1')
+ setline(win, 3, {'setline 2', 'setline 3'})
+ win.cursor:to(6, 0)
+ setline(win, '.', 'setline 4')
+ setline(win, '$', 'setline 5')
+ vis:command('w setline.out')
+end
+
+test_getline = function()
+ vis:command('e getline.in')
+ local win = vis.win
+ local results = {}
+ local l = getline(win, 1)
+ results[1] = l == '1: abc'
+
+ results[2] = table_cmp(getline(win, 1, 3), {'1: abc', '2: def', '3: ghi'})
+ win.cursor:to(4, 0)
+ results[3] = getline(win, '.') == '4: jkl'
+ results[4] = getline(win, '$') == '9: yz_'
+ win.cursor:to(4, 0)
+ results[5] = table_cmp(getline(win, '.', 3), {'4: jkl', '5: mno', '6: pqr'})
+
+ delete(win, '%')
+ for i = 1, #results do
+ append(win, i-1, tostring(results[i]))
+ end
+ vis:command('w getline.true')
+end