from test.vim_test_case import VimTestCase as _VimTest from test.constant import * class SnippetActions_PreActionModifiesBuffer(_VimTest): files = { 'us/all.snippets': r""" pre_expand "snip.buffer[snip.line:snip.line] = ['\n']" snippet a "desc" "True" e abc endsnippet """} keys = 'a' + EX wanted = '\nabc' class SnippetActions_PostActionModifiesBuffer(_VimTest): files = { 'us/all.snippets': r""" post_expand "snip.buffer[snip.line+1:snip.line+1] = ['\n']" snippet a "desc" "True" e abc endsnippet """} keys = 'a' + EX wanted = 'abc\n' class SnippetActions_ErrorOnBufferModificationThroughCommand(_VimTest): files = { 'us/all.snippets': r""" pre_expand "vim.command('normal O')" snippet a "desc" "True" e abc endsnippet """} keys = 'a' + EX expected_error = 'changes are untrackable' class SnippetActions_ErrorOnModificationSnippetLine(_VimTest): files = { 'us/all.snippets': r""" post_expand "vim.command('normal dd')" snippet i "desc" "True" e if: $1 endsnippet """} keys = 'i' + EX expected_error = 'line under the cursor was modified' class SnippetActions_EnsureIndent(_VimTest): files = { 'us/all.snippets': r""" pre_expand "snip.buffer[snip.line] = ' '*4; snip.cursor[1] = 4" snippet i "desc" "True" e if: $1 endsnippet """} keys = '\ni' + EX + 'i' + EX + 'x' wanted = """ if: if: x""" class SnippetActions_PostActionCanUseSnippetRange(_VimTest): files = { 'us/all.snippets': r""" global !p def ensure_newlines(start, end): snip.buffer[start[0]:start[0]] = ['\n'] * 2 snip.buffer[end[0]+1:end[0]+1] = ['\n'] * 1 endglobal post_expand "ensure_newlines(snip.snippet_start, snip.snippet_end)" snippet i "desc" if $1 else $2 end endsnippet """} keys = '\ni' + EX + 'x' + JF + 'y' wanted = """ if x else y end """ class SnippetActions_CanModifyParentBody(_VimTest): files = { 'us/all.snippets': r""" global !p def ensure_newlines(start, end): snip.buffer[start[0]:start[0]] = ['\n'] * 2 endglobal post_expand "ensure_newlines(snip.snippet_start, snip.snippet_end)" snippet i "desc" if $1 else $2 end endsnippet """} keys = '\ni' + EX + 'i' + EX + 'x' + JF + 'y' + JF + JF + 'z' wanted = """ if if x else y end else z end""" class SnippetActions_MoveParentSnippetFromChildInPreAction(_VimTest): files = { 'us/all.snippets': r""" global !p def insert_import(): snip.buffer[2:2] = ['import smthing', ''] endglobal pre_expand "insert_import()" snippet p "desc" print(smthing.traceback()) endsnippet snippet i "desc" if $1 else $2 end endsnippet """} keys = 'i' + EX + 'p' + EX + JF + 'z' wanted = """import smthing if print(smthing.traceback()) else z end""" class SnippetActions_CanExpandSnippetInDifferentPlace(_VimTest): files = { 'us/all.snippets': r""" global !p def expand_after_if(snip): snip.buffer[snip.line] = snip.buffer[snip.line][:snip.column] + \ snip.buffer[snip.line][snip.column+1:] snip.cursor[1] = snip.buffer[snip.line].index('if ')+3 endglobal pre_expand "expand_after_if(snip)" snippet n "append not to if" w not $0 endsnippet snippet i "if cond" w if $1: $2 endsnippet """} keys = 'i' + EX + 'blah' + JF + 'n' + EX + JF + 'pass' wanted = """if not blah: pass""" class SnippetActions_MoveVisual(_VimTest): files = { 'us/all.snippets': r""" global !p def extract_method(snip): del snip.buffer[snip.line] snip.buffer[len(snip.buffer)-1:len(snip.buffer)-1] = [''] snip.cursor.set(len(snip.buffer)-2, 0) endglobal pre_expand "extract_method(snip)" snippet n "append not to if" w def $1: ${VISUAL} endsnippet """} keys = """ def a: x() y() z()""" + ESC + 'kVk' + EX + 'n' + EX + 'b' wanted = """ def a: z() def b: x() y()""" class SnippetActions_CanMirrorTabStopsOutsideOfSnippet(_VimTest): files = { 'us/all.snippets': r""" post_jump "snip.buffer[2] = 'debug({})'.format(snip.tabstops[1].current_text)" snippet i "desc" if $1: $2 endsnippet """} keys = """ --- i""" + EX + "test(some(complex(cond(a))))" + JF + "x" wanted = """debug(test(some(complex(cond(a))))) --- if test(some(complex(cond(a)))): x""" class SnippetActions_CanExpandAnonSnippetInJumpAction(_VimTest): files = { 'us/all.snippets': r""" global !p def expand_anon(snip): if snip.tabstop == 0: snip.expand_anon("a($2, $1)") endglobal post_jump "expand_anon(snip)" snippet i "desc" if ${1:cond}: $0 endsnippet """} keys = "i" + EX + "x" + JF + "1" + JF + "2" + JF + ";" wanted = """if x: a(2, 1);""" class SnippetActions_CanExpandAnonSnippetInJumpActionWhileSelected(_VimTest): files = { 'us/all.snippets': r""" global !p def expand_anon(snip): if snip.tabstop == 0: snip.expand_anon(" // a($2, $1)") endglobal post_jump "expand_anon(snip)" snippet i "desc" if ${1:cond}: ${2:pass} endsnippet """} keys = "i" + EX + "x" + JF + JF + "1" + JF + "2" + JF + ";" wanted = """if x: pass // a(2, 1);""" class SnippetActions_CanUseContextFromContextMatch(_VimTest): files = { 'us/all.snippets': r""" pre_expand "snip.buffer[snip.line:snip.line] = [snip.context]" snippet i "desc" "'some context'" e body endsnippet """} keys = "i" + EX wanted = """some context body""" class SnippetActions_CanExpandAnonSnippetOnFirstJump(_VimTest): files = { 'us/all.snippets': r""" global !p def expand_new_snippet_on_first_jump(snip): if snip.tabstop == 1: snip.expand_anon("some_check($1, $2, $3)") endglobal post_jump "expand_new_snippet_on_first_jump(snip)" snippet "test" "test new features" "True" bwre if $1: $2 endsnippet """} keys = "test" + EX + "1" + JF + "2" + JF + "3" + JF + " or 4" + JF + "5" wanted = """if some_check(1, 2, 3) or 4: 5""" class SnippetActions_CanExpandAnonOnPreExpand(_VimTest): files = { 'us/all.snippets': r""" pre_expand "snip.buffer[snip.line] = ''; snip.expand_anon('totally_different($2, $1)')" snippet test "test new features" wb endsnippet """} keys = "test" + EX + "1" + JF + "2" + JF + "3" wanted = """totally_different(2, 1)3""" class SnippetActions_CanEvenWrapSnippetInPreAction(_VimTest): files = { 'us/all.snippets': r""" pre_expand "snip.buffer[snip.line] = ''; snip.expand_anon('some_wrapper($1): $2')" snippet test "test new features" wb wrapme($2, $1) endsnippet """} keys = "test" + EX + "1" + JF + "2" + JF + "3" + JF + "4" wanted = """some_wrapper(wrapme(2, 1)3): 4""" class SnippetActions_CanVisuallySelectFirstPlaceholderInAnonSnippetInPre(_VimTest): files = { 'us/all.snippets': r""" pre_expand "snip.buffer[snip.line] = ''; snip.expand_anon('${1:asd}, ${2:blah}')" snippet test "test new features" wb endsnippet """} keys = "test" + EX + "1" + JF + "2" wanted = """1, 2""" class SnippetActions_UseCorrectJumpActions(_VimTest): files = { 'us/all.snippets': r""" post_jump "snip.buffer[-2:-2]=['a' + str(snip.tabstop)]" snippet a "a" wb $1 { $2 } endsnippet snippet b "b" wb bbb endsnippet post_jump "snip.buffer[-2:-2]=['c' + str(snip.tabstop)]" snippet c "c" w $1 : $2 : $3 endsnippet """} keys = "a" + EX + "1" + JF + "b" + EX + " c" + EX + "2" + JF + "3" + JF + "4" + JF + JF wanted = """1 { bbb 2 : 3 : 4 } a1 a2 c1 c2 c3 c0 a0""" class SnippetActions_PostActionModifiesCharAfterSnippet(_VimTest): files = { 'us/all.snippets': r""" post_expand "snip.buffer[snip.snippet_end[0]] = snip.buffer[snip.snippet_end[0]][:-1]" snippet a "desc" i ($1) endsnippet """} keys = '[]' + ARR_L + 'a' + EX + '1' + JF + '2' wanted = '[(1)2' class SnippetActions_PostActionModifiesLineAfterSnippet(_VimTest): files = { 'us/all.snippets': r""" post_expand "snip.buffer[snip.snippet_end[0]+1:snip.snippet_end[0]+2] = []" snippet a "desc" 1: $1 $0 endsnippet """} keys = '\n3' + ARR_U + 'a' + EX + '1' + JF + '2' wanted = '1: 1\n2'