Skip to content

Commit fa29c8a

Browse files
committed
patch 8.2.0313: Vim9: insufficient script tests
Problem: Vim9: insufficient script tests. Solution: Add tests. Make import of alphanumeric name work.
1 parent f2d5c24 commit fa29c8a

3 files changed

Lines changed: 55 additions & 7 deletions

File tree

src/testdir/test_vim9_script.vim

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,50 @@ def Test_vim9script()
352352
writefile(import_star_lines, 'Ximport.vim')
353353
assert_fails('source Ximport.vim', 'E1045:')
354354

355+
" try to import something that exists but is not exported
356+
let import_not_exported_lines =<< trim END
357+
vim9script
358+
import name from './Xexport.vim'
359+
END
360+
writefile(import_not_exported_lines, 'Ximport.vim')
361+
assert_fails('source Ximport.vim', 'E1049:')
362+
363+
" import a very long name, requires making a copy
364+
let import_long_name_lines =<< trim END
365+
vim9script
366+
import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim'
367+
END
368+
writefile(import_long_name_lines, 'Ximport.vim')
369+
assert_fails('source Ximport.vim', 'E1048:')
370+
371+
let import_no_from_lines =<< trim END
372+
vim9script
373+
import name './Xexport.vim'
374+
END
375+
writefile(import_no_from_lines, 'Ximport.vim')
376+
assert_fails('source Ximport.vim', 'E1070:')
377+
378+
let import_invalid_string_lines =<< trim END
379+
vim9script
380+
import name from Xexport.vim
381+
END
382+
writefile(import_invalid_string_lines, 'Ximport.vim')
383+
assert_fails('source Ximport.vim', 'E1071:')
384+
385+
let import_wrong_name_lines =<< trim END
386+
vim9script
387+
import name from './XnoExport.vim'
388+
END
389+
writefile(import_wrong_name_lines, 'Ximport.vim')
390+
assert_fails('source Ximport.vim', 'E1053:')
391+
392+
let import_missing_comma_lines =<< trim END
393+
vim9script
394+
import {exported name} from './Xexport.vim'
395+
END
396+
writefile(import_missing_comma_lines, 'Ximport.vim')
397+
assert_fails('source Ximport.vim', 'E1046:')
398+
355399
delete('Ximport.vim')
356400
delete('Xexport.vim')
357401

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -738,6 +738,8 @@ static char *(features[]) =
738738

739739
static int included_patches[] =
740740
{ /* Add new patch number below this line */
741+
/**/
742+
313,
741743
/**/
742744
312,
743745
/**/

src/vim9script.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ find_exported(
172172
scriptitem_T *script = SCRIPT_ITEM(sid);
173173

174174
// isolate one name
175-
while (eval_isnamec1(*arg))
175+
while (eval_isnamec(*arg))
176176
++arg;
177177
*name_len = (int)(arg - name);
178178

@@ -262,9 +262,9 @@ handle_import(char_u *arg_start, garray_T *gap, int import_sid)
262262
{
263263
if (*arg == '*')
264264
arg = skipwhite(arg + 1);
265-
else
265+
else if (eval_isnamec1(*arg))
266266
{
267-
while (eval_isnamec1(*arg))
267+
while (eval_isnamec(*arg))
268268
++arg;
269269
arg = skipwhite(arg);
270270
}
@@ -273,8 +273,9 @@ handle_import(char_u *arg_start, garray_T *gap, int import_sid)
273273
// skip over "as Name "
274274
arg = skipwhite(arg + 2);
275275
as_ptr = arg;
276-
while (eval_isnamec1(*arg))
277-
++arg;
276+
if (eval_isnamec1(*arg))
277+
while (eval_isnamec(*arg))
278+
++arg;
278279
as_len = (int)(arg - as_ptr);
279280
arg = skipwhite(arg);
280281
}
@@ -286,7 +287,7 @@ handle_import(char_u *arg_start, garray_T *gap, int import_sid)
286287
}
287288
if (STRNCMP("from", arg, 4) != 0 || !VIM_ISWHITE(arg[4]))
288289
{
289-
emsg(_("E1045: Missing \"from\""));
290+
emsg(_("E1070: Missing \"from\""));
290291
return NULL;
291292
}
292293
from_ptr = arg;
@@ -299,7 +300,7 @@ handle_import(char_u *arg_start, garray_T *gap, int import_sid)
299300
ret = get_string_tv(&arg, &tv, TRUE);
300301
if (ret == FAIL || tv.vval.v_string == NULL || *tv.vval.v_string == NUL)
301302
{
302-
emsg(_("E1045: Invalid string after \"from\""));
303+
emsg(_("E1071: Invalid string after \"from\""));
303304
return NULL;
304305
}
305306
cmd_end = arg;
@@ -423,6 +424,7 @@ handle_import(char_u *arg_start, garray_T *gap, int import_sid)
423424
}
424425
if (arg != from_ptr)
425426
{
427+
// cannot happen, just in case the above has a flaw
426428
emsg(_("E1047: syntax error in import"));
427429
return NULL;
428430
}

0 commit comments

Comments
 (0)