aboutsummaryrefslogtreecommitdiff
path: root/test/helpers.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/helpers.lua')
-rw-r--r--test/helpers.lua50
1 files changed, 38 insertions, 12 deletions
diff --git a/test/helpers.lua b/test/helpers.lua
index 013fe60596..da18c0f39f 100644
--- a/test/helpers.lua
+++ b/test/helpers.lua
@@ -645,8 +645,38 @@ local function hexdump(str)
return dump .. hex .. string.rep(" ", 8 - len % 8) .. asc
end
-local function read_file(name)
- local file = io.open(name, 'r')
+-- Reads text lines from `filename` into a table.
+--
+-- filename: path to file
+-- start: start line (1-indexed), negative means "lines before end" (tail)
+local function read_file_list(filename, start)
+ local lnum = (start ~= nil and type(start) == 'number') and start or 1
+ local tail = (lnum < 0)
+ local maxlines = tail and math.abs(lnum) or nil
+ local file = io.open(filename, 'r')
+ if not file then
+ return nil
+ end
+ local lines = {}
+ local i = 1
+ for line in file:lines() do
+ if i >= start then
+ table.insert(lines, line)
+ if #lines > maxlines then
+ table.remove(lines, 1)
+ end
+ end
+ i = i + 1
+ end
+ file:close()
+ return lines
+end
+
+-- Reads the entire contents of `filename` into a string.
+--
+-- filename: path to file
+local function read_file(filename)
+ local file = io.open(filename, 'r')
if not file then
return nil
end
@@ -684,18 +714,13 @@ end
-- Also removes the file, if the current environment looks like CI.
local function read_nvim_log()
local logfile = os.getenv('NVIM_LOG_FILE') or '.nvimlog'
- local logtext = read_file(logfile)
- local lines = {}
- for l in string.gmatch(logtext or '', "[^\n]+") do -- Split at newlines.
- table.insert(lines, l)
- end
+ local keep = isCI() and 999 or 10
+ local lines = read_file_list(logfile, -keep) or {}
local log = (('-'):rep(78)..'\n'
..string.format('$NVIM_LOG_FILE: %s\n', logfile)
- ..(logtext and (isCI() and '' or '(last 10 lines)\n') or '(empty)\n'))
- local keep = (isCI() and #lines or math.min(10, #lines))
- local startidx = math.max(1, #lines - keep + 1)
- for i = startidx, (startidx + keep - 1) do
- log = log..lines[i]..'\n'
+ ..(#lines > 0 and '(last '..tostring(keep)..' lines)\n' or '(empty)\n'))
+ for _,line in ipairs(lines) do
+ log = log..line..'\n'
end
log = log..('-'):rep(78)..'\n'
if isCI() then
@@ -733,6 +758,7 @@ local module = {
popen_r = popen_r,
popen_w = popen_w,
read_file = read_file,
+ read_file_list = read_file_list,
read_nvim_log = read_nvim_log,
repeated_read_cmd = repeated_read_cmd,
shallowcopy = shallowcopy,