mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	refactor(snippet): rename test utilities
This commit is contained in:
		 Maria José Solano
					Maria José Solano
				
			
				
					committed by
					
						 Mathias Fußenegger
						Mathias Fußenegger
					
				
			
			
				
	
			
			
			 Mathias Fußenegger
						Mathias Fußenegger
					
				
			
						parent
						
							7e36c8e972
						
					
				
				
					commit
					4972c80489
				
			| @@ -1,5 +1,6 @@ | ||||
| local helpers = require('test.functional.helpers')(after_each) | ||||
|  | ||||
| local buf_lines = helpers.buf_lines | ||||
| local clear = helpers.clear | ||||
| local eq = helpers.eq | ||||
| local exec_lua = helpers.exec_lua | ||||
| @@ -23,7 +24,7 @@ describe('vim.snippet', function() | ||||
|   --- @param expected string[] | ||||
|   --- @param settings? string | ||||
|   --- @param prefix? string | ||||
|   local function test_success(snippet, expected, settings, prefix) | ||||
|   local function test_expand_success(snippet, expected, settings, prefix) | ||||
|     if settings then | ||||
|       exec_lua(settings) | ||||
|     end | ||||
| @@ -31,17 +32,17 @@ describe('vim.snippet', function() | ||||
|       feed('i' .. prefix) | ||||
|     end | ||||
|     exec_lua('vim.snippet.expand(...)', table.concat(snippet, '\n')) | ||||
|     eq(expected, helpers.buf_lines(0)) | ||||
|     eq(expected, buf_lines(0)) | ||||
|   end | ||||
|  | ||||
|   --- @param snippet string | ||||
|   --- @param err string | ||||
|   local function test_fail(snippet, err) | ||||
|   local function test_expand_fail(snippet, err) | ||||
|     matches(err, pcall_err(exec_lua, string.format('vim.snippet.expand("%s")', snippet))) | ||||
|   end | ||||
|  | ||||
|   it('adds base indentation to inserted text', function() | ||||
|     test_success( | ||||
|     test_expand_success( | ||||
|       { 'function $1($2)', '  $0', 'end' }, | ||||
|       { '  function ()', '    ', '  end' }, | ||||
|       '', | ||||
| @@ -50,11 +51,11 @@ describe('vim.snippet', function() | ||||
|   end) | ||||
|  | ||||
|   it('adds indentation based on the start of snippet lines', function() | ||||
|     test_success({ 'if $1 then', '  $0', 'end' }, { 'if  then', '  ', 'end' }) | ||||
|     test_expand_success({ 'if $1 then', '  $0', 'end' }, { 'if  then', '  ', 'end' }) | ||||
|   end) | ||||
|  | ||||
|   it('replaces tabs with spaces when expandtab is set', function() | ||||
|     test_success( | ||||
|     test_expand_success( | ||||
|       { 'function $1($2)', '\t$0', 'end' }, | ||||
|       { 'function ()', '  ', 'end' }, | ||||
|       [[ | ||||
| @@ -65,7 +66,7 @@ describe('vim.snippet', function() | ||||
|   end) | ||||
|  | ||||
|   it('respects tabs when expandtab is not set', function() | ||||
|     test_success( | ||||
|     test_expand_success( | ||||
|       { 'function $1($2)', '\t$0', 'end' }, | ||||
|       { 'function ()', '\t', 'end' }, | ||||
|       'vim.o.expandtab = false' | ||||
| @@ -73,28 +74,28 @@ describe('vim.snippet', function() | ||||
|   end) | ||||
|  | ||||
|   it('inserts known variable value', function() | ||||
|     test_success({ '; print($TM_CURRENT_LINE)' }, { 'foo; print(foo)' }, nil, 'foo') | ||||
|     test_expand_success({ '; print($TM_CURRENT_LINE)' }, { 'foo; print(foo)' }, nil, 'foo') | ||||
|   end) | ||||
|  | ||||
|   it('uses default when variable is not set', function() | ||||
|     test_success({ 'print(${TM_CURRENT_WORD:foo})' }, { 'print(foo)' }) | ||||
|     test_expand_success({ 'print(${TM_CURRENT_WORD:foo})' }, { 'print(foo)' }) | ||||
|   end) | ||||
|  | ||||
|   it('replaces unknown variables by placeholders', function() | ||||
|     test_success({ 'print($UNKNOWN)' }, { 'print(UNKNOWN)' }) | ||||
|     test_expand_success({ 'print($UNKNOWN)' }, { 'print(UNKNOWN)' }) | ||||
|   end) | ||||
|  | ||||
|   it('does not jump outside snippet range', function() | ||||
|     test_success({ 'function $1($2)', '  $0', 'end' }, { 'function ()', '  ', 'end' }) | ||||
|     test_expand_success({ 'function $1($2)', '  $0', 'end' }, { 'function ()', '  ', 'end' }) | ||||
|     eq(false, exec_lua('return vim.snippet.jumpable(-1)')) | ||||
|     feed('<Tab><Tab>i') | ||||
|     eq(false, exec_lua('return vim.snippet.jumpable(1)')) | ||||
|   end) | ||||
|  | ||||
|   it('navigates backwards', function() | ||||
|     test_success({ 'function $1($2) end' }, { 'function () end' }) | ||||
|     test_expand_success({ 'function $1($2) end' }, { 'function () end' }) | ||||
|     feed('<Tab><S-Tab>foo') | ||||
|     eq({ 'function foo() end' }, helpers.buf_lines(0)) | ||||
|     eq({ 'function foo() end' }, buf_lines(0)) | ||||
|   end) | ||||
|  | ||||
|   it('visits all tabstops', function() | ||||
| @@ -102,7 +103,7 @@ describe('vim.snippet', function() | ||||
|       return exec_lua('return vim.api.nvim_win_get_cursor(0)') | ||||
|     end | ||||
|  | ||||
|     test_success({ 'function $1($2)', '  $0', 'end' }, { 'function ()', '  ', 'end' }) | ||||
|     test_expand_success({ 'function $1($2)', '  $0', 'end' }, { 'function ()', '  ', 'end' }) | ||||
|     eq({ 1, 9 }, cursor()) | ||||
|     feed('<Tab>') | ||||
|     eq({ 1, 10 }, cursor()) | ||||
| @@ -111,84 +112,84 @@ describe('vim.snippet', function() | ||||
|   end) | ||||
|  | ||||
|   it('syncs text of tabstops with equal indexes', function() | ||||
|     test_success({ 'var double = ${1:x} + ${1:x}' }, { 'var double = x + x' }) | ||||
|     test_expand_success({ 'var double = ${1:x} + ${1:x}' }, { 'var double = x + x' }) | ||||
|     feed('123') | ||||
|     eq({ 'var double = 123 + 123' }, helpers.buf_lines(0)) | ||||
|     eq({ 'var double = 123 + 123' }, buf_lines(0)) | ||||
|   end) | ||||
|  | ||||
|   it('cancels session with changes outside the snippet', function() | ||||
|     test_success({ 'print($1)' }, { 'print()' }) | ||||
|     test_expand_success({ 'print($1)' }, { 'print()' }) | ||||
|     feed('<Esc>O-- A comment') | ||||
|     eq(false, exec_lua('return vim.snippet.active()')) | ||||
|     eq({ '-- A comment', 'print()' }, helpers.buf_lines(0)) | ||||
|     eq({ '-- A comment', 'print()' }, buf_lines(0)) | ||||
|   end) | ||||
|  | ||||
|   it('handles non-consecutive tabstops', function() | ||||
|     test_success({ 'class $1($3) {', '  $0', '}' }, { 'class () {', '  ', '}' }) | ||||
|     test_expand_success({ 'class $1($3) {', '  $0', '}' }, { 'class () {', '  ', '}' }) | ||||
|     feed('Foo') -- First tabstop | ||||
|     feed('<Tab><Tab>') -- Jump to $0 | ||||
|     feed('// Inside') -- Insert text | ||||
|     eq({ 'class Foo() {', '  // Inside', '}' }, helpers.buf_lines(0)) | ||||
|     eq({ 'class Foo() {', '  // Inside', '}' }, buf_lines(0)) | ||||
|   end) | ||||
|  | ||||
|   it('handles multiline placeholders', function() | ||||
|     test_success( | ||||
|     test_expand_success( | ||||
|       { 'public void foo() {', '  ${0:// TODO Auto-generated', '  throw;}', '}' }, | ||||
|       { 'public void foo() {', '  // TODO Auto-generated', '  throw;', '}' } | ||||
|     ) | ||||
|   end) | ||||
|  | ||||
|   it('inserts placeholder in all tabstops when the first tabstop has the placeholder', function() | ||||
|     test_success( | ||||
|     test_expand_success( | ||||
|       { 'for (${1:int} ${2:x} = ${3:0}; $2 < ${4:N}; $2++) {', '  $0', '}' }, | ||||
|       { 'for (int x = 0; x < N; x++) {', '  ', '}' } | ||||
|     ) | ||||
|   end) | ||||
|  | ||||
|   it('inserts placeholder in all tabstops when a later tabstop has the placeholder', function() | ||||
|     test_success( | ||||
|     test_expand_success( | ||||
|       { 'for (${1:int} $2 = ${3:0}; ${2:x} < ${4:N}; $2++) {', '  $0', '}' }, | ||||
|       { 'for (int x = 0; x < N; x++) {', '  ', '}' } | ||||
|     ) | ||||
|   end) | ||||
|  | ||||
|   it('errors with multiple placeholders for the same index', function() | ||||
|     test_fail('class ${1:Foo} { void ${1:foo}() {} }', 'multiple placeholders for tabstop $1') | ||||
|     test_expand_fail('class ${1:Foo} { void ${1:foo}() {} }', 'multiple placeholders for tabstop $1') | ||||
|   end) | ||||
|  | ||||
|   it('errors with multiple $0 tabstops', function() | ||||
|     test_fail('function $1() { $0 }$0', 'multiple $0 tabstops') | ||||
|     test_expand_fail('function $1() { $0 }$0', 'multiple $0 tabstops') | ||||
|   end) | ||||
|  | ||||
|   it('cancels session when deleting the snippet', function() | ||||
|     test_success({ 'local function $1()', '  $0', 'end' }, { 'local function ()', '  ', 'end' }) | ||||
|     test_expand_success({ 'local function $1()', '  $0', 'end' }, { 'local function ()', '  ', 'end' }) | ||||
|     feed('<esc>Vjjd') | ||||
|     eq(false, exec_lua('return vim.snippet.active()')) | ||||
|   end) | ||||
|  | ||||
|   it('cancels session when inserting outside snippet region', function() | ||||
|     feed('i<cr>') | ||||
|     test_success({ 'local function $1()', '  $0', 'end' }, { '', 'local function ()', '  ', 'end' }) | ||||
|     test_expand_success({ 'local function $1()', '  $0', 'end' }, { '', 'local function ()', '  ', 'end' }) | ||||
|     feed('<esc>O-- A comment') | ||||
|     eq(false, exec_lua('return vim.snippet.active()')) | ||||
|   end) | ||||
|  | ||||
|   it('inserts choice', function () | ||||
|     test_success({ 'console.${1|assert,log,error|}()' }, { 'console.()' }) | ||||
|     test_expand_success({ 'console.${1|assert,log,error|}()' }, { 'console.()' }) | ||||
|     sleep(100) | ||||
|     feed('<Down><C-y>') | ||||
|     eq({ 'console.log()' }, helpers.buf_lines(0)) | ||||
|     eq({ 'console.log()' }, buf_lines(0)) | ||||
|   end) | ||||
|  | ||||
|   it('closes the choice completion menu when jumping', function () | ||||
|     test_success({ 'console.${1|assert,log,error|}($2)' }, { 'console.()' }) | ||||
|     test_expand_success({ 'console.${1|assert,log,error|}($2)' }, { 'console.()' }) | ||||
|     sleep(100) | ||||
|     exec_lua('vim.snippet.jump(1)') | ||||
|     eq(0, exec_lua('return vim.fn.pumvisible()')) | ||||
|   end) | ||||
|  | ||||
|   it('jumps to next tabstop after inserting choice', function() | ||||
|     test_success( | ||||
|     test_expand_success( | ||||
|       { '${1|public,protected,private|} function ${2:name}() {', '\t$0', '}' }, | ||||
|       { ' function name() {', '\t', '}' } | ||||
|     ) | ||||
| @@ -196,6 +197,6 @@ describe('vim.snippet', function() | ||||
|     feed('<C-y><Tab>') | ||||
|     sleep(10) | ||||
|     feed('foo') | ||||
|     eq({ 'public function foo() {', '\t', '}' }, helpers.buf_lines(0)) | ||||
|     eq({ 'public function foo() {', '\t', '}' }, buf_lines(0)) | ||||
|   end) | ||||
| end) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user