mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	 052498ed42
			
		
	
	052498ed42
	
	
	
		
			
			Specifically, functions that are run in the context of the test runner are put in module `test/testutil.lua` while the functions that are run in the context of the test session are put in `test/functional/testnvim.lua`. Closes https://github.com/neovim/neovim/issues/27004.
		
			
				
	
	
		
			226 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local t = require('test.testutil')
 | |
| local n = require('test.functional.testnvim')()
 | |
| 
 | |
| local clear = n.clear
 | |
| local command = n.command
 | |
| local eq = t.eq
 | |
| local pathsep = n.get_pathsep()
 | |
| local fn = n.fn
 | |
| local api = n.api
 | |
| local exec_lua = n.exec_lua
 | |
| 
 | |
| local testdir = 'Xtest-editorconfig'
 | |
| 
 | |
| --- @param name string
 | |
| --- @param expected table<string,any>
 | |
| local function test_case(name, expected)
 | |
|   local filename = testdir .. pathsep .. name
 | |
|   command('edit ' .. filename)
 | |
|   for opt, val in pairs(expected) do
 | |
|     eq(val, api.nvim_get_option_value(opt, { buf = 0 }), name)
 | |
|   end
 | |
| end
 | |
| 
 | |
| setup(function()
 | |
|   n.mkdir_p(testdir)
 | |
|   t.write_file(
 | |
|     testdir .. pathsep .. '.editorconfig',
 | |
|     [[
 | |
|     root = true
 | |
| 
 | |
|     [3_space.txt]
 | |
|     indent_style = space
 | |
|     indent_size = 3
 | |
|     tab_width = 3
 | |
| 
 | |
|     [4_space.py]
 | |
|     indent_style = space
 | |
|     indent_size = 4
 | |
|     tab_width = 8
 | |
| 
 | |
|     [space.txt]
 | |
|     indent_style = space
 | |
|     indent_size = tab
 | |
| 
 | |
|     [tab.txt]
 | |
|     indent_style = tab
 | |
| 
 | |
|     [4_tab.txt]
 | |
|     indent_style = tab
 | |
|     indent_size = 4
 | |
|     tab_width = 4
 | |
| 
 | |
|     [4_tab_width_of_8.txt]
 | |
|     indent_style = tab
 | |
|     indent_size = 4
 | |
|     tab_width = 8
 | |
| 
 | |
|     [lf.txt]
 | |
|     end_of_line = lf
 | |
| 
 | |
|     [crlf.txt]
 | |
|     end_of_line = crlf
 | |
| 
 | |
|     [cr.txt]
 | |
|     end_of_line = cr
 | |
| 
 | |
|     [utf-8.txt]
 | |
|     charset = utf-8
 | |
| 
 | |
|     [utf-8-bom.txt]
 | |
|     charset = utf-8-bom
 | |
| 
 | |
|     [utf-16be.txt]
 | |
|     charset = utf-16be
 | |
| 
 | |
|     [utf-16le.txt]
 | |
|     charset = utf-16le
 | |
| 
 | |
|     [latin1.txt]
 | |
|     charset = latin1
 | |
| 
 | |
|     [with_newline.txt]
 | |
|     insert_final_newline = true
 | |
| 
 | |
|     [without_newline.txt]
 | |
|     insert_final_newline = false
 | |
| 
 | |
|     [trim.txt]
 | |
|     trim_trailing_whitespace = true
 | |
| 
 | |
|     [no_trim.txt]
 | |
|     trim_trailing_whitespace = false
 | |
| 
 | |
|     [max_line_length.txt]
 | |
|     max_line_length = 42
 | |
|     ]]
 | |
|   )
 | |
| end)
 | |
| 
 | |
| teardown(function()
 | |
|   n.rmdir(testdir)
 | |
| end)
 | |
| 
 | |
| describe('editorconfig', function()
 | |
|   before_each(function()
 | |
|     -- Remove -u NONE so that plugins (i.e. editorconfig.lua) are loaded
 | |
|     clear({ args_rm = { '-u' } })
 | |
|   end)
 | |
| 
 | |
|   it('sets indent options', function()
 | |
|     test_case('3_space.txt', {
 | |
|       expandtab = true,
 | |
|       shiftwidth = 3,
 | |
|       softtabstop = -1,
 | |
|       tabstop = 3,
 | |
|     })
 | |
| 
 | |
|     test_case('4_space.py', {
 | |
|       expandtab = true,
 | |
|       shiftwidth = 4,
 | |
|       softtabstop = -1,
 | |
|       tabstop = 8,
 | |
|     })
 | |
| 
 | |
|     test_case('space.txt', {
 | |
|       expandtab = true,
 | |
|       shiftwidth = 0,
 | |
|       softtabstop = 0,
 | |
|     })
 | |
| 
 | |
|     test_case('tab.txt', {
 | |
|       expandtab = false,
 | |
|       shiftwidth = 0,
 | |
|       softtabstop = 0,
 | |
|     })
 | |
| 
 | |
|     test_case('4_tab.txt', {
 | |
|       expandtab = false,
 | |
|       shiftwidth = 4,
 | |
|       softtabstop = -1,
 | |
|       tabstop = 4,
 | |
|     })
 | |
| 
 | |
|     test_case('4_tab_width_of_8.txt', {
 | |
|       expandtab = false,
 | |
|       shiftwidth = 4,
 | |
|       softtabstop = -1,
 | |
|       tabstop = 8,
 | |
|     })
 | |
|   end)
 | |
| 
 | |
|   it('sets end-of-line options', function()
 | |
|     test_case('lf.txt', { fileformat = 'unix' })
 | |
|     test_case('crlf.txt', { fileformat = 'dos' })
 | |
|     test_case('cr.txt', { fileformat = 'mac' })
 | |
|   end)
 | |
| 
 | |
|   it('sets encoding options', function()
 | |
|     test_case('utf-8.txt', { fileencoding = 'utf-8', bomb = false })
 | |
|     test_case('utf-8-bom.txt', { fileencoding = 'utf-8', bomb = true })
 | |
|     test_case('utf-16be.txt', { fileencoding = 'utf-16', bomb = false })
 | |
|     test_case('utf-16le.txt', { fileencoding = 'utf-16le', bomb = false })
 | |
|     test_case('latin1.txt', { fileencoding = 'latin1', bomb = false })
 | |
|   end)
 | |
| 
 | |
|   it('sets newline options', function()
 | |
|     test_case('with_newline.txt', { fixendofline = true })
 | |
|     test_case('without_newline.txt', { fixendofline = false })
 | |
|   end)
 | |
| 
 | |
|   it('respects trim_trailing_whitespace', function()
 | |
|     local filename = testdir .. pathsep .. 'trim.txt'
 | |
|     -- luacheck: push ignore 613
 | |
|     local untrimmed = [[
 | |
| This line ends in whitespace 
 | |
| So does this one    
 | |
| And this one         
 | |
| But not this one
 | |
| ]]
 | |
|     -- luacheck: pop
 | |
|     local trimmed = untrimmed:gsub('%s+\n', '\n')
 | |
| 
 | |
|     t.write_file(filename, untrimmed)
 | |
|     command('edit ' .. filename)
 | |
|     command('write')
 | |
|     command('bdelete')
 | |
|     eq(trimmed, t.read_file(filename))
 | |
| 
 | |
|     filename = testdir .. pathsep .. 'no_trim.txt'
 | |
|     t.write_file(filename, untrimmed)
 | |
|     command('edit ' .. filename)
 | |
|     command('write')
 | |
|     command('bdelete')
 | |
|     eq(untrimmed, t.read_file(filename))
 | |
|   end)
 | |
| 
 | |
|   it('sets textwidth', function()
 | |
|     test_case('max_line_length.txt', { textwidth = 42 })
 | |
|   end)
 | |
| 
 | |
|   it('can be disabled globally', function()
 | |
|     api.nvim_set_var('editorconfig', false)
 | |
|     api.nvim_set_option_value('shiftwidth', 42, {})
 | |
|     test_case('3_space.txt', { shiftwidth = 42 })
 | |
|   end)
 | |
| 
 | |
|   it('can be disabled per-buffer', function()
 | |
|     api.nvim_set_option_value('shiftwidth', 42, {})
 | |
|     local bufnr = fn.bufadd(testdir .. pathsep .. '3_space.txt')
 | |
|     api.nvim_buf_set_var(bufnr, 'editorconfig', false)
 | |
|     test_case('3_space.txt', { shiftwidth = 42 })
 | |
|     test_case('4_space.py', { shiftwidth = 4 })
 | |
|   end)
 | |
| 
 | |
|   it('does not operate on invalid buffers', function()
 | |
|     local ok, err = unpack(exec_lua([[
 | |
|       vim.cmd.edit('test.txt')
 | |
|       local bufnr = vim.api.nvim_get_current_buf()
 | |
|       vim.cmd.bwipeout(bufnr)
 | |
|       return {pcall(require('editorconfig').config, bufnr)}
 | |
|     ]]))
 | |
| 
 | |
|     eq(true, ok, err)
 | |
|   end)
 | |
| end)
 |