diff options
| author | Josh Wainwright <josh.wainwright@ldra.com> | 2016-04-20 12:26:50 +0100 |
|---|---|---|
| committer | Josh Wainwright <josh.wainwright@ldra.com> | 2016-04-20 12:26:50 +0100 |
| commit | b474d7aa119fc6d1d28a574296ed341194eede31 (patch) | |
| tree | 2d46f312dd4497ef08a5272e03208efa9b255cdc /lua/visrc.lua | |
| parent | 6bff371e3cce703ffc2a9c0df7c89d361e4ebf00 (diff) | |
| download | vis-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.lua | 126 |
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 |
