view src/testdir/test_windows_home.vim @ 32962:7771cb060685 v9.0.1781

patch 9.0.1781: Problems when setting bin/paste option Commit: https://github.com/vim/vim/commit/757593c07a4f4ac43eb6c6e52fc299abc9bc08bc Author: Christian Brabandt <cb@256bit.org> Date: Tue Aug 22 21:44:10 2023 +0200 patch 9.0.1781: Problems when setting bin/paste option Problem: Problems when setting bin/paste option Solution: When setting binary/paste, remember that this also affects depending options, so that :verbose set returns the right location. Mention if depending options for 'binary' or 'paste' have been reset indirectly. Add a test to verify it works. Also noticed as small bug, that the global option value for expandtab was not reset when paste option is set, so fix that while at it. closes: #12837 closes: #12879 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: zeertzjq <zeertzjq@outlook.com>
author Christian Brabandt <cb@256bit.org>
date Tue, 22 Aug 2023 22:00:03 +0200
parents 08940efa6b4e
children
line wrap: on
line source

" Test for $HOME on Windows.

source check.vim
CheckMSWindows

let s:env = {}

func s:restore_env()
  for i in keys(s:env)
    exe 'let ' . i . '=s:env["' . i . '"]'
  endfor
endfunc

func s:save_env(...)
  for i in a:000
    exe 'let s:env["' . i . '"]=' . i
  endfor
endfunc

func s:unlet_env(...)
  for i in a:000
    exe 'let ' . i . '=""'
  endfor
endfunc

func CheckHomeIsMissingFromSubprocessEnvironment()
  silent! let out = system('set')
  let env = filter(split(out, "\n"), 'v:val=~"^HOME="')
  call assert_equal(0, len(env))
endfunc

func CheckHomeIsInSubprocessEnvironment(exp)
  silent! let out = system('set')
  let env = filter(split(out, "\n"), 'v:val=~"^HOME="')
  let home = len(env) == 0 ? "" : substitute(env[0], '[^=]\+=', '', '')
  call assert_equal(a:exp, home)
endfunc

func CheckHome(exp, ...)
  call assert_equal(a:exp, $HOME)
  call assert_equal(a:exp, expand('~', ':p'))
  if !a:0
    call CheckHomeIsMissingFromSubprocessEnvironment()
  else
    call CheckHomeIsInSubprocessEnvironment(a:1)
  endif
endfunc

func Test_WindowsHome()
  command! -nargs=* SaveEnv call <SID>save_env(<f-args>)
  command! -nargs=* RestoreEnv call <SID>restore_env()
  command! -nargs=* UnletEnv call <SID>unlet_env(<f-args>)
  set noshellslash

  let save_home = $HOME
  SaveEnv $USERPROFILE $HOMEDRIVE $HOMEPATH
  try
    " Normal behavior: use $HOMEDRIVE and $HOMEPATH, ignore $USERPROFILE
    let $USERPROFILE = 'unused'
    let $HOMEDRIVE = 'C:'
    let $HOMEPATH = '\foobar'
    let $HOME = ''  " Force recomputing "homedir"
    call CheckHome('C:\foobar')

    " Same, but with $HOMEPATH not set
    UnletEnv $HOMEPATH
    let $HOME = ''  " Force recomputing "homedir"
    call CheckHome('C:\')

    " Use $USERPROFILE if $HOMEPATH and $HOMEDRIVE are empty
    UnletEnv $HOMEDRIVE $HOMEPATH
    let $USERPROFILE = 'C:\foo'
    let $HOME = ''  " Force recomputing "homedir"
    call CheckHome('C:\foo')

    " If $HOME is set the others don't matter
    let $HOME = 'C:\bar'
    let $USERPROFILE = 'unused'
    let $HOMEDRIVE = 'unused'
    let $HOMEPATH = 'unused'
    call CheckHome('C:\bar', 'C:\bar')

    " If $HOME contains %USERPROFILE% it is expanded
    let $USERPROFILE = 'C:\foo'
    let $HOME = '%USERPROFILE%\bar'
    let $HOMEDRIVE = 'unused'
    let $HOMEPATH = 'unused'
    call CheckHome('C:\foo\bar', '%USERPROFILE%\bar')

    " Invalid $HOME is kept
    let $USERPROFILE = 'C:\foo'
    let $HOME = '%USERPROFILE'
    let $HOMEDRIVE = 'unused'
    let $HOMEPATH = 'unused'
    call CheckHome('%USERPROFILE', '%USERPROFILE')

    " %USERPROFILE% not at start of $HOME is not expanded
    let $USERPROFILE = 'unused'
    let $HOME = 'C:\%USERPROFILE%'
    let $HOMEDRIVE = 'unused'
    let $HOMEPATH = 'unused'
    call CheckHome('C:\%USERPROFILE%', 'C:\%USERPROFILE%')

    if has('channel')
      RestoreEnv
      let $HOME = save_home
      let env = ''
      let job = job_start('cmd /c set', {'out_cb': {ch,x->[env,execute('let env=x')]}})
      sleep 1
      let env = filter(split(env, "\n"), 'v:val=="HOME"')
      let home = len(env) == 0 ? "" : env[0]
      call assert_equal('', home)
    endif
  finally
    RestoreEnv
    delcommand SaveEnv
    delcommand RestoreEnv
    delcommand UnletEnv
  endtry
endfunc

" vim: shiftwidth=2 sts=2 expandtab