diff options
Diffstat (limited to 'test/functional/helpers.lua')
| -rw-r--r-- | test/functional/helpers.lua | 45 | 
1 files changed, 43 insertions, 2 deletions
diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua index 5b641b5054..f4b2a8dfdc 100644 --- a/test/functional/helpers.lua +++ b/test/functional/helpers.lua @@ -319,7 +319,14 @@ end  -- Dedent the given text and write it to the file name.  local function write_file(name, text, dont_dedent)    local file = io.open(name, 'w') -  if not dont_dedent then +  if type(text) == 'table' then +    -- Byte blob +    local bytes = text +    text = '' +    for _, char in ipairs(bytes) do +      text = ('%s%c'):format(text, char) +    end +  elseif not dont_dedent then      text = dedent(text)    end    file:write(text) @@ -337,11 +344,23 @@ local function read_file(name)    return ret  end +local sourced_fnames = {}  local function source(code)    local fname = tmpname()    write_file(fname, code)    nvim_command('source '..fname) -  os.remove(fname) +  -- DO NOT REMOVE FILE HERE. +  -- do_source() has a habit of checking whether files are “same” by using inode +  -- and device IDs. If you run two source() calls in quick succession there is +  -- a good chance that underlying filesystem will reuse the inode, making files +  -- appear as “symlinks” to do_source when it checks FileIDs. With current +  -- setup linux machines (both QB, travis and mine(ZyX-I) with XFS) do reuse +  -- inodes, Mac OS machines (again, both QB and travis) do not. +  -- +  -- Files appearing as “symlinks” mean that both the first and the second +  -- source() calls will use same SID, which may fail some tests which check for +  -- exact numbers after `<SNR>` in e.g. function names. +  sourced_fnames[#sourced_fnames + 1] = fname    return fname  end @@ -581,6 +600,24 @@ local function missing_provider(provider)    end  end +local function alter_slashes(obj) +  if not iswin() then +    return obj +  end +  if type(obj) == 'string' then +    local ret = obj:gsub('/', '\\') +    return ret +  elseif type(obj) == 'table' then +    local ret = {} +    for k, v in pairs(obj) do +      ret[k] = alter_slashes(v) +    end +    return ret +  else +    assert(false, 'Could only alter slashes for tables of strings and strings') +  end +end +  local module = {    prepend_argv = prepend_argv,    clear = clear, @@ -649,11 +686,15 @@ local module = {    NIL = mpack.NIL,    get_pathsep = get_pathsep,    missing_provider = missing_provider, +  alter_slashes = alter_slashes,  }  return function(after_each)    if after_each then      after_each(function() +      for _, fname in ipairs(sourced_fnames) do +        os.remove(fname) +      end        check_logs()        check_cores('build/bin/nvim')      end)  | 
