mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	 72652cbc46
			
		
	
	72652cbc46
	
	
	
		
			
			helpers.source() was a hack to work around the lack of anonymous :source. Its "create tempfile" behavior is not a required part of most tests that use it. Some tests still need the old "create tempfile" behavior either because they test SID behavior, or because of missing nvim_exec features: #16071
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local helpers = require('test.functional.helpers')(after_each)
 | |
| 
 | |
| local eq = helpers.eq
 | |
| local neq = helpers.neq
 | |
| local command = helpers.command
 | |
| local write_file = helpers.write_file
 | |
| local meths = helpers.meths
 | |
| local clear = helpers.clear
 | |
| local dedent = helpers.dedent
 | |
| local exc_exec = helpers.exc_exec
 | |
| local missing_provider = helpers.missing_provider
 | |
| 
 | |
| local tmpfile = 'X_ex_cmds_script'
 | |
| 
 | |
| before_each(clear)
 | |
| 
 | |
| local function source(code)
 | |
|   write_file(tmpfile, code)
 | |
|   command('source '..tmpfile)
 | |
| end
 | |
| 
 | |
| describe('script_get-based command', function()
 | |
|   local garbage = ')}{+*({}]*[;(+}{&[]}{*])('
 | |
| 
 | |
|   after_each(function()
 | |
|     os.remove(tmpfile)
 | |
|   end)
 | |
| 
 | |
|   local function test_garbage_exec(cmd, check_neq)
 | |
|     describe(cmd, function()
 | |
|       it('works correctly when skipping oneline variant', function()
 | |
|         eq(true, pcall(source, (dedent([[
 | |
|           if 0
 | |
|             %s %s
 | |
|           endif
 | |
|         ]])):format(cmd, garbage)))
 | |
|         eq('', meths.exec('messages', true))
 | |
|         if check_neq then
 | |
|           neq(0, exc_exec(dedent([[
 | |
|             %s %s
 | |
|           ]])):format(cmd, garbage))
 | |
|         end
 | |
|       end)
 | |
|       it('works correctly when skipping HEREdoc variant', function()
 | |
|         eq(true, pcall(source, (dedent([[
 | |
|           if 0
 | |
|           %s << EOF
 | |
|           %s
 | |
|           EOF
 | |
|           endif
 | |
|         ]])):format(cmd, garbage)))
 | |
|         eq('', meths.exec('messages', true))
 | |
|         if check_neq then
 | |
|           eq(true, pcall(source, (dedent([[
 | |
|             let g:exc = 0
 | |
|             try
 | |
|             %s << EOF
 | |
|             %s
 | |
|             EOF
 | |
|             catch
 | |
|             let g:exc = v:exception
 | |
|             endtry
 | |
|           ]])):format(cmd, garbage)))
 | |
|           neq(0, meths.get_var('exc'))
 | |
|         end
 | |
|       end)
 | |
|     end)
 | |
|   end
 | |
| 
 | |
|   clear()
 | |
| 
 | |
|   -- Built-in scripts
 | |
|   test_garbage_exec('lua', true)
 | |
| 
 | |
|   -- Provider-based scripts
 | |
|   test_garbage_exec('ruby', not missing_provider('ruby'))
 | |
|   test_garbage_exec('python3', not missing_provider('python3'))
 | |
| 
 | |
|   -- Missing scripts
 | |
|   test_garbage_exec('python', false)
 | |
|   test_garbage_exec('tcl', false)
 | |
|   test_garbage_exec('mzscheme', false)
 | |
|   test_garbage_exec('perl', false)
 | |
| 
 | |
|   -- Not really a script
 | |
|   test_garbage_exec('xxxinvalidlanguagexxx', true)
 | |
| end)
 |