aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2016-09-18 01:54:23 +0300
committerZyX <kp-pav@yandex.ru>2017-03-29 10:08:06 +0300
commit82e6cac5f9d437da5aeb8c4cf51945cfeb5922ff (patch)
tree264ef365afb42508a0de33bc38ae282ad63031dd /test
parent9898f36aa306d2a7f53fbe08c64048260992d3bb (diff)
downloadrneovim-82e6cac5f9d437da5aeb8c4cf51945cfeb5922ff.tar.gz
rneovim-82e6cac5f9d437da5aeb8c4cf51945cfeb5922ff.tar.bz2
rneovim-82e6cac5f9d437da5aeb8c4cf51945cfeb5922ff.zip
functests: Add null_spec.lua from #4615
For now it is full of FIXMEs and tests for incorrect behaviour. Sorted out to have FIXMEs in one place, commented crashing tests in other and correctly working tests in the third one.
Diffstat (limited to 'test')
-rw-r--r--test/functional/eval/null_spec.lua141
1 files changed, 141 insertions, 0 deletions
diff --git a/test/functional/eval/null_spec.lua b/test/functional/eval/null_spec.lua
new file mode 100644
index 0000000000..9a35905be0
--- /dev/null
+++ b/test/functional/eval/null_spec.lua
@@ -0,0 +1,141 @@
+local helpers = require('test.functional.helpers')(after_each)
+
+local curbufmeths = helpers.curbufmeths
+local redir_exec = helpers.redir_exec
+local exc_exec = helpers.exc_exec
+local command = helpers.command
+local clear = helpers.clear
+local meths = helpers.meths
+local funcs = helpers.funcs
+local eq = helpers.eq
+
+describe('NULL', function()
+ before_each(function()
+ clear()
+ command('let L = v:_null_list')
+ command('let D = v:_null_dict')
+ command('let S = $XXX_NONEXISTENT_VAR_XXX')
+ end)
+ local tmpfname = 'Xtest-functional-viml-null'
+ after_each(function()
+ os.remove(tmpfname)
+ end)
+ describe('list', function()
+ local null_list_test = function(name, cmd, err)
+ it(name, function()
+ eq(err, exc_exec(cmd))
+ end)
+ end
+ local null_list_expr_test = function(name, expr, err, val, after)
+ it(name, function()
+ eq((err == 0) and ('') or ('\n' .. err),
+ redir_exec('let g:_var = ' .. expr))
+ if val == nil then
+ eq(0, funcs.exists('g:_var'))
+ else
+ eq(val, meths.get_var('_var'))
+ end
+ if after ~= nil then
+ after()
+ end
+ end)
+ end
+
+ -- Incorrect behaviour
+
+ -- FIXME map() should not return 0 without error
+ null_list_expr_test('does not crash map()', 'map(L, "v:val")', 0, 0)
+ -- FIXME map() should not return 0 without error
+ null_list_expr_test('does not crash filter()', 'filter(L, "1")', 0, 0)
+ -- FIXME map() should at least return L
+ null_list_expr_test('makes map() return v:_null_list', 'map(L, "v:val") is# L', 0, 0)
+ -- FIXME filter() should at least return L
+ null_list_expr_test('makes filter() return v:_null_list', 'map(L, "1") is# L', 0, 0)
+ -- FIXME add() should not return 1 at all
+ null_list_expr_test('does not crash add()', 'add(L, 0)', 0, 1)
+ -- FIXME extend() should not return 0 without error
+ null_list_expr_test('does not crash extend()', 'extend(L, [1])', 0, 0)
+ -- FIXME extend() should not return 0 at all
+ null_list_expr_test('does not crash extend() (second position)', 'extend([1], L)', 0, 0)
+ -- FIXME Should return 1
+ null_list_expr_test('is equal to itself', 'L == L', 0, 0)
+ -- FIXME Should return 0
+ null_list_expr_test('is not not equal to itself', 'L != L', 0, 1)
+ -- FIXME Should return empty list
+ null_list_expr_test('can be added to itself', '(L + L)', 'E15: Invalid expression: (L + L)', nil)
+ -- FIXME Should return [1]
+ null_list_expr_test('can be added to non-empty list (reversed)', '(L + [1])',
+ 'E15: Invalid expression: (L + [1])', nil)
+ -- FIXME Should return [1]
+ null_list_expr_test('can be added to non-empty list', '([1] + L)',
+ 'E15: Invalid expression: ([1] + L)', nil)
+ -- FIXME Should return 1
+ null_list_expr_test('counts correctly', 'count([L], L)', 0, 0)
+ -- FIXME should be accepted by inputlist()
+ null_list_expr_test('is accepted as an empty list by inputlist()',
+ '[feedkeys("\\n"), inputlist(L)]', 'E686: Argument of inputlist() must be a List', {0, 0})
+ -- FIXME should be accepted by writefile(), return {0, {}}
+ null_list_expr_test('is accepted as an empty list by writefile()',
+ ('[writefile(L, "%s"), readfile("%s")]'):format(tmpfname, tmpfname),
+ 'E484: Can\'t open file ' .. tmpfname, {0, {}})
+ -- FIXME should give error message
+ null_list_expr_test('does not crash remove()', 'remove(L, 0)', 0, 0)
+ -- FIXME should return 0
+ null_list_expr_test('is accepted by setqflist()', 'setqflist(L)', 0, -1)
+ -- FIXME should return 0
+ null_list_expr_test('is accepted by setloclist()', 'setloclist(1, L)', 0, -1)
+ -- FIXME should return 0
+ null_list_expr_test('is accepted by setmatches()', 'setmatches(L)', 0, -1)
+ -- FIXME should return empty list or error out
+ null_list_expr_test('is accepted by sort()', 'sort(L)', 0, 0)
+ -- FIXME Should return 1
+ null_list_expr_test('is accepted by sort()', 'sort(L) is L', 0, 0)
+ -- FIXME should not error out
+ null_list_test('is accepted by :cexpr', 'cexpr L', 'Vim(cexpr):E777: String or List expected')
+ -- FIXME should not error out
+ null_list_test('is accepted by :lexpr', 'lexpr L', 'Vim(lexpr):E777: String or List expected')
+ -- FIXME should not error out
+ null_list_test('is accepted by :for', 'for x in L|throw x|endfor', 'Vim(for):E714: List required')
+
+ -- Subjectable behaviour
+
+ -- FIXME Should return 1
+ null_list_expr_test('is equal to empty list', 'L == []', 0, 0)
+ -- FIXME Should return 1
+ null_list_expr_test('is equal to empty list (reverse order)', '[] == L', 0, 0)
+ -- FIXME Should return 1
+ null_list_expr_test('is not locked', 'islocked("v:_null_list")', 0, 0)
+
+ -- Crashes
+
+ -- null_list_expr_test('does not crash setreg', 'setreg("x", L)', 0, 0)
+ -- null_list_expr_test('does not crash setline', 'setline(1, L)', 0, 0)
+ -- null_list_expr_test('does not crash system()', 'system("cat", L)', 0, '')
+ -- null_list_expr_test('does not crash systemlist()', 'systemlist("cat", L)', 0, {})
+
+ -- Correct behaviour
+ null_list_expr_test('does not crash append()', 'append(1, L)', 0, 0, function()
+ eq({''}, curbufmeths.get_lines(0, -1, false))
+ end)
+ null_list_expr_test('is identical to itself', 'L is L', 0, 1)
+ null_list_expr_test('can be sliced', 'L[:]', 0, {})
+ null_list_expr_test('can be copied', 'copy(L)', 0, {})
+ null_list_expr_test('can be deepcopied', 'deepcopy(L)', 0, {})
+ null_list_expr_test('does not crash when indexed', 'L[1]',
+ 'E684: list index out of range: 1\nE15: Invalid expression: L[1]', nil)
+ null_list_expr_test('does not crash call()', 'call("arglistid", L)', 0, 0)
+ null_list_expr_test('does not crash col()', 'col(L)', 0, 0)
+ null_list_expr_test('does not crash virtcol()', 'virtcol(L)', 0, 0)
+ null_list_expr_test('does not crash line()', 'line(L)', 0, 0)
+ null_list_expr_test('does not crash count()', 'count(L, 1)', 0, 0)
+ null_list_expr_test('does not crash cursor()', 'cursor(L)', 'E474: Invalid argument', -1)
+ null_list_expr_test('is empty', 'empty(L)', 0, 1)
+ null_list_expr_test('does not crash get()', 'get(L, 1, 10)', 0, 10)
+ null_list_expr_test('has zero length', 'len(L)', 0, 0)
+ null_list_expr_test('is accepted as an empty list by max()', 'max(L)', 0, 0)
+ null_list_expr_test('is accepted as an empty list by min()', 'min(L)', 0, 0)
+ null_list_expr_test('is stringified correctly', 'string(L)', 0, '[]')
+ null_list_expr_test('is JSON encoded correctly', 'json_encode(L)', 0, '[]')
+ null_list_test('does not crash lockvar', 'lockvar! L', 0)
+ end)
+end)