aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2017-11-12 02:18:43 +0300
committerZyX <kp-pav@yandex.ru>2017-11-12 02:18:43 +0300
commitc7495ebcc0918ffd682083408895451318e41d1f (patch)
treea5868eb68f0308c8ce5eae057aa47f9adb6ab36d /test
parent1aa6276c29d562a6287519e6755a613eabca5c31 (diff)
downloadrneovim-c7495ebcc0918ffd682083408895451318e41d1f.tar.gz
rneovim-c7495ebcc0918ffd682083408895451318e41d1f.tar.bz2
rneovim-c7495ebcc0918ffd682083408895451318e41d1f.zip
viml/parser/expressions: Add support for parsing assignments
Diffstat (limited to 'test')
-rw-r--r--test/symbolic/klee/viml_expressions_parser.c3
-rw-r--r--test/unit/viml/expressions/lexer_spec.lua10
-rw-r--r--test/unit/viml/expressions/parser_spec.lua23
-rw-r--r--test/unit/viml/helpers.lua13
4 files changed, 35 insertions, 14 deletions
diff --git a/test/symbolic/klee/viml_expressions_parser.c b/test/symbolic/klee/viml_expressions_parser.c
index 9448937430..fd75e8d355 100644
--- a/test/symbolic/klee/viml_expressions_parser.c
+++ b/test/symbolic/klee/viml_expressions_parser.c
@@ -48,7 +48,8 @@ int main(const int argc, const char *const *const argv,
klee_make_symbolic(&shift, sizeof(shift), "shift");
klee_make_symbolic(&flags, sizeof(flags), "flags");
klee_assume(shift < INPUT_SIZE);
- klee_assume(flags <= (kExprFlagsMulti|kExprFlagsDisallowEOC));
+ klee_assume(
+ flags <= (kExprFlagsMulti|kExprFlagsDisallowEOC|kExprFlagsParseLet));
#endif
ParserLine plines[] = {
diff --git a/test/unit/viml/expressions/lexer_spec.lua b/test/unit/viml/expressions/lexer_spec.lua
index 75a641c48a..1b57a24ad5 100644
--- a/test/unit/viml/expressions/lexer_spec.lua
+++ b/test/unit/viml/expressions/lexer_spec.lua
@@ -13,6 +13,7 @@ local conv_ccs = viml_helpers.conv_ccs
local new_pstate = viml_helpers.new_pstate
local conv_cmp_type = viml_helpers.conv_cmp_type
local pstate_set_str = viml_helpers.pstate_set_str
+local conv_expr_asgn_type = viml_helpers.conv_expr_asgn_type
local shallowcopy = global_helpers.shallowcopy
local intchar2lua = global_helpers.intchar2lua
@@ -52,6 +53,8 @@ child_call_once(function()
[tonumber(lib.kExprLexParenthesis)] = 'Parenthesis',
[tonumber(lib.kExprLexComma)] = 'Comma',
[tonumber(lib.kExprLexArrow)] = 'Arrow',
+
+ [tonumber(lib.kExprLexAssignment)] = 'Assignment',
}
eltkn_mul_type_tab = {
@@ -118,6 +121,8 @@ local function eltkn2lua(pstate, tkn)
ret.data.val = tonumber(tkn.data.num.is_float
and tkn.data.num.val.floating
or tkn.data.num.val.integer)
+ elseif ret.type == 'Assignment' then
+ ret.data = { type = conv_expr_asgn_type(tkn.data.ass.type) }
elseif ret.type == 'Invalid' then
ret.data = { error = ffi.string(tkn.data.err.msg) }
end
@@ -198,7 +203,9 @@ describe('Expressions lexer', function()
singl_eltkn_test('Question', '?')
singl_eltkn_test('Colon', ':')
singl_eltkn_test('Dot', '.')
+ singl_eltkn_test('Assignment', '.=', {type='Concat'})
singl_eltkn_test('Plus', '+')
+ singl_eltkn_test('Assignment', '+=', {type='Add'})
singl_eltkn_test('Comma', ',')
singl_eltkn_test('Multiplication', '*', {type='Mul'})
singl_eltkn_test('Multiplication', '/', {type='Div'})
@@ -266,12 +273,13 @@ describe('Expressions lexer', function()
singl_eltkn_test('DoubleQuotedString', '"x\\"', {closed=false})
singl_eltkn_test('DoubleQuotedString', '"\\"x', {closed=false})
singl_eltkn_test('Not', '!')
- singl_eltkn_test('Invalid', '=', {error='E15: Expected == or =~: %.*s'})
+ singl_eltkn_test('Assignment', '=', {type='Plain'})
comparison_test('==', '!=', 'Equal')
comparison_test('=~', '!~', 'Matches')
comparison_test('>', '<=', 'Greater')
comparison_test('>=', '<', 'GreaterOrEqual')
singl_eltkn_test('Minus', '-')
+ singl_eltkn_test('Assignment', '-=', {type='Subtract'})
singl_eltkn_test('Arrow', '->')
singl_eltkn_test('Invalid', '~', {error='E15: Unidentified character: %.*s'})
simple_test({{data=nil, size=0}}, 'EOC', 0, {error='start.col >= #pstr'})
diff --git a/test/unit/viml/expressions/parser_spec.lua b/test/unit/viml/expressions/parser_spec.lua
index cfc9fe95ac..810d7bfbc6 100644
--- a/test/unit/viml/expressions/parser_spec.lua
+++ b/test/unit/viml/expressions/parser_spec.lua
@@ -18,6 +18,7 @@ local conv_ccs = viml_helpers.conv_ccs
local new_pstate = viml_helpers.new_pstate
local conv_cmp_type = viml_helpers.conv_cmp_type
local pstate_set_str = viml_helpers.pstate_set_str
+local conv_expr_asgn_type = viml_helpers.conv_expr_asgn_type
local mergedicts_copy = global_helpers.mergedicts_copy
local format_string = global_helpers.format_string
@@ -109,6 +110,7 @@ make_enum_conv_tab(lib, {
'kExprNodeMod',
'kExprNodeOption',
'kExprNodeEnvironment',
+ 'kExprNodeAssignment',
}, 'kExprNode', function(ret) east_node_type_tab = ret end)
local function conv_east_node_type(typ)
@@ -174,6 +176,8 @@ local function eastnode2lua(pstate, eastnode, checked_nodes)
typ = ('%s(ident=%s)'):format(
typ,
ffi.string(eastnode.data.env.ident, eastnode.data.env.ident_len))
+ elseif typ == 'Assignment' then
+ typ = ('%s(%s)'):format(typ, conv_expr_asgn_type(eastnode.data.ass.type))
end
ret_str = typ .. ':' .. ret_str
local can_simplify = not ret.children
@@ -3976,27 +3980,20 @@ describe('Expressions parser', function()
-- 012345
ast = {
{
- 'Comparison(type=Equal,inv=0,ccs=UseOption):0:3:=',
+ 'Assignment(Add):0:1: +=',
children = {
- {
- 'BinaryPlus:0:1: +',
- children = {
- 'PlainIdentifier(scope=0,ident=a):0:0:a',
- 'Missing:0:3:',
- },
- },
+ 'PlainIdentifier(scope=0,ident=a):0:0:a',
'PlainIdentifier(scope=0,ident=b):0:4: b',
},
},
},
err = {
- arg = '= b',
- msg = 'E15: Expected == or =~: %.*s',
+ arg = '+= b',
+ msg = 'E15: Misplaced assignment: %.*s',
},
}, {
hl('IdentifierName', 'a'),
- hl('BinaryPlus', '+', 1),
- hl('InvalidComparison', '='),
+ hl('InvalidAssignmentWithAddition', '+=', 1),
hl('IdentifierName', 'b', 1),
})
check_parsing('a + b == c + d', {
@@ -7347,4 +7344,6 @@ describe('Expressions parser', function()
},
})
end)
+ -- FIXME: Test assignments thoroughly
+ -- FIXME: Test that parsing assignments can be used for `:for` pre-`in` part.
end)
diff --git a/test/unit/viml/helpers.lua b/test/unit/viml/helpers.lua
index 9d2d7b61c7..9d8102e023 100644
--- a/test/unit/viml/helpers.lua
+++ b/test/unit/viml/helpers.lua
@@ -107,6 +107,18 @@ local function conv_ccs(ccs)
return conv_enum(ccs_tab, ccs)
end
+local expr_asgn_type_tab
+make_enum_conv_tab(lib, {
+ 'kExprAsgnPlain',
+ 'kExprAsgnAdd',
+ 'kExprAsgnSubtract',
+ 'kExprAsgnConcat',
+}, 'kExprAsgn', function(ret) expr_asgn_type_tab = ret end)
+
+local function conv_expr_asgn_type(expr_asgn_type)
+ return conv_enum(expr_asgn_type_tab, expr_asgn_type)
+end
+
return {
conv_ccs = conv_ccs,
pline2lua = pline2lua,
@@ -114,4 +126,5 @@ return {
new_pstate = new_pstate,
conv_cmp_type = conv_cmp_type,
pstate_set_str = pstate_set_str,
+ conv_expr_asgn_type = conv_expr_asgn_type,
}