neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

environ_spec.lua (2369B)


      1 local t = require('test.testutil')
      2 local n = require('test.functional.testnvim')()
      3 
      4 local clear = n.clear
      5 local eq = t.eq
      6 local environ = n.fn.environ
      7 local exists = n.fn.exists
      8 local system = n.fn.system
      9 local nvim_prog = n.nvim_prog
     10 local command = n.command
     11 local eval = n.eval
     12 local setenv = n.fn.setenv
     13 
     14 describe('environment variables', function()
     15  it('environ() handles empty env variable', function()
     16    clear({ env = { EMPTY_VAR = '' } })
     17    eq('', environ()['EMPTY_VAR'])
     18    eq(nil, environ()['DOES_NOT_EXIST'])
     19  end)
     20 
     21  it('exists() handles empty env variable', function()
     22    clear({ env = { EMPTY_VAR = '' } })
     23    eq(1, exists('$EMPTY_VAR'))
     24    eq(0, exists('$DOES_NOT_EXIST'))
     25  end)
     26 end)
     27 
     28 describe('empty $HOME', function()
     29  local original_home = os.getenv('HOME')
     30 
     31  before_each(clear)
     32 
     33  -- recover $HOME after each test
     34  after_each(function()
     35    if original_home ~= nil then
     36      setenv('HOME', original_home)
     37    end
     38    os.remove('test_empty_home')
     39    os.remove('./~')
     40  end)
     41 
     42  local function tilde_in_cwd()
     43    -- get files in cwd
     44    command("let test_empty_home_cwd_files = split(globpath('.', '*'), '\n')")
     45    -- get the index of the file named '~'
     46    command('let test_empty_home_tilde_index = index(test_empty_home_cwd_files, "./~")')
     47    return eval('test_empty_home_tilde_index') ~= -1
     48  end
     49 
     50  local function write_and_test_tilde()
     51    system({
     52      nvim_prog,
     53      '-u',
     54      'NONE',
     55      '-i',
     56      'NONE',
     57      '--headless',
     58      '-c',
     59      'write test_empty_home',
     60      '+q',
     61    })
     62    eq(false, tilde_in_cwd())
     63  end
     64 
     65  it("'~' folder not created in cwd if $HOME and related env not defined", function()
     66    command('unlet $HOME')
     67    write_and_test_tilde()
     68 
     69    command("let $HOMEDRIVE='C:'")
     70    command("let $USERPROFILE='C:\\'")
     71    write_and_test_tilde()
     72 
     73    command('unlet $HOMEDRIVE')
     74    write_and_test_tilde()
     75 
     76    command('unlet $USERPROFILE')
     77    write_and_test_tilde()
     78 
     79    command("let $HOME='%USERPROFILE%'")
     80    command("let $USERPROFILE='C:\\'")
     81    write_and_test_tilde()
     82  end)
     83 
     84  it("'~' folder not created in cwd if writing a file with invalid $HOME", function()
     85    setenv('HOME', '/path/does/not/exist')
     86    write_and_test_tilde()
     87  end)
     88 
     89  it("'~' folder not created in cwd if writing a file with $HOME=''", function()
     90    command("let $HOME=''")
     91    write_and_test_tilde()
     92  end)
     93 end)